vision-model-checker.test.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { isVisionModel } from "../app/utils";
  2. describe("isVisionModel", () => {
  3. const originalEnv = process.env;
  4. beforeEach(() => {
  5. jest.resetModules();
  6. process.env = { ...originalEnv };
  7. });
  8. afterEach(() => {
  9. process.env = originalEnv;
  10. });
  11. test("should identify vision models using regex patterns", () => {
  12. const visionModels = [
  13. "gpt-4-vision",
  14. "claude-3-opus",
  15. "gemini-1.5-pro",
  16. "gemini-2.0",
  17. "gemini-exp-vision",
  18. "learnlm-vision",
  19. "qwen-vl-max",
  20. "qwen2-vl-max",
  21. "gpt-4-turbo",
  22. "dall-e-3",
  23. ];
  24. visionModels.forEach((model) => {
  25. expect(isVisionModel(model)).toBe(true);
  26. });
  27. });
  28. test("should exclude specific models", () => {
  29. expect(isVisionModel("claude-3-5-haiku-20241022")).toBe(false);
  30. });
  31. test("should not identify non-vision models", () => {
  32. const nonVisionModels = [
  33. "gpt-3.5-turbo",
  34. "gpt-4-turbo-preview",
  35. "claude-2",
  36. "regular-model",
  37. ];
  38. nonVisionModels.forEach((model) => {
  39. expect(isVisionModel(model)).toBe(false);
  40. });
  41. });
  42. test("should identify models from VISION_MODELS env var", () => {
  43. process.env.VISION_MODELS = "custom-vision-model,another-vision-model";
  44. expect(isVisionModel("custom-vision-model")).toBe(true);
  45. expect(isVisionModel("another-vision-model")).toBe(true);
  46. expect(isVisionModel("unrelated-model")).toBe(false);
  47. });
  48. test("should handle empty or missing VISION_MODELS", () => {
  49. process.env.VISION_MODELS = "";
  50. expect(isVisionModel("unrelated-model")).toBe(false);
  51. delete process.env.VISION_MODELS;
  52. expect(isVisionModel("unrelated-model")).toBe(false);
  53. expect(isVisionModel("gpt-4-vision")).toBe(true);
  54. });
  55. });