|
| 1 | +import { describe, it, expect } from "vitest" |
| 2 | +import { |
| 3 | + getModelDimension, |
| 4 | + getModelScoreThreshold, |
| 5 | + getDefaultModelId, |
| 6 | + EMBEDDING_MODEL_PROFILES, |
| 7 | +} from "../embeddingModels" |
| 8 | + |
| 9 | +describe("embeddingModels", () => { |
| 10 | + describe("EMBEDDING_MODEL_PROFILES", () => { |
| 11 | + it("should have gemini provider with gemini-embedding-001 model", () => { |
| 12 | + const geminiProfiles = EMBEDDING_MODEL_PROFILES.gemini |
| 13 | + expect(geminiProfiles).toBeDefined() |
| 14 | + expect(geminiProfiles!["gemini-embedding-001"]).toBeDefined() |
| 15 | + expect(geminiProfiles!["gemini-embedding-001"].dimension).toBe(3072) |
| 16 | + }) |
| 17 | + |
| 18 | + it("should have deprecated text-embedding-004 in gemini profiles for backward compatibility", () => { |
| 19 | + // This is critical for backward compatibility: |
| 20 | + // Users with text-embedding-004 configured need dimension lookup to work |
| 21 | + // even though the model is migrated to gemini-embedding-001 in GeminiEmbedder |
| 22 | + const geminiProfiles = EMBEDDING_MODEL_PROFILES.gemini |
| 23 | + expect(geminiProfiles).toBeDefined() |
| 24 | + expect(geminiProfiles!["text-embedding-004"]).toBeDefined() |
| 25 | + expect(geminiProfiles!["text-embedding-004"].dimension).toBe(3072) |
| 26 | + }) |
| 27 | + }) |
| 28 | + |
| 29 | + describe("getModelDimension", () => { |
| 30 | + it("should return dimension for gemini-embedding-001", () => { |
| 31 | + const dimension = getModelDimension("gemini", "gemini-embedding-001") |
| 32 | + expect(dimension).toBe(3072) |
| 33 | + }) |
| 34 | + |
| 35 | + it("should return dimension for deprecated text-embedding-004", () => { |
| 36 | + // This ensures createVectorStore() works for users with text-embedding-004 configured |
| 37 | + // The dimension should be 3072 (matching gemini-embedding-001) because: |
| 38 | + // 1. GeminiEmbedder migrates text-embedding-004 to gemini-embedding-001 |
| 39 | + // 2. gemini-embedding-001 produces 3072-dimensional embeddings |
| 40 | + // 3. Vector store dimension must match the actual embedding dimension |
| 41 | + const dimension = getModelDimension("gemini", "text-embedding-004") |
| 42 | + expect(dimension).toBe(3072) |
| 43 | + }) |
| 44 | + |
| 45 | + it("should return undefined for unknown model", () => { |
| 46 | + const dimension = getModelDimension("gemini", "unknown-model") |
| 47 | + expect(dimension).toBeUndefined() |
| 48 | + }) |
| 49 | + |
| 50 | + it("should return undefined for unknown provider", () => { |
| 51 | + const dimension = getModelDimension("unknown-provider" as any, "some-model") |
| 52 | + expect(dimension).toBeUndefined() |
| 53 | + }) |
| 54 | + |
| 55 | + it("should return correct dimensions for openai models", () => { |
| 56 | + expect(getModelDimension("openai", "text-embedding-3-small")).toBe(1536) |
| 57 | + expect(getModelDimension("openai", "text-embedding-3-large")).toBe(3072) |
| 58 | + expect(getModelDimension("openai", "text-embedding-ada-002")).toBe(1536) |
| 59 | + }) |
| 60 | + }) |
| 61 | + |
| 62 | + describe("getModelScoreThreshold", () => { |
| 63 | + it("should return score threshold for gemini-embedding-001", () => { |
| 64 | + const threshold = getModelScoreThreshold("gemini", "gemini-embedding-001") |
| 65 | + expect(threshold).toBe(0.4) |
| 66 | + }) |
| 67 | + |
| 68 | + it("should return score threshold for deprecated text-embedding-004", () => { |
| 69 | + const threshold = getModelScoreThreshold("gemini", "text-embedding-004") |
| 70 | + expect(threshold).toBe(0.4) |
| 71 | + }) |
| 72 | + |
| 73 | + it("should return undefined for unknown model", () => { |
| 74 | + const threshold = getModelScoreThreshold("gemini", "unknown-model") |
| 75 | + expect(threshold).toBeUndefined() |
| 76 | + }) |
| 77 | + }) |
| 78 | + |
| 79 | + describe("getDefaultModelId", () => { |
| 80 | + it("should return gemini-embedding-001 for gemini provider", () => { |
| 81 | + const defaultModel = getDefaultModelId("gemini") |
| 82 | + expect(defaultModel).toBe("gemini-embedding-001") |
| 83 | + }) |
| 84 | + |
| 85 | + it("should return text-embedding-3-small for openai provider", () => { |
| 86 | + const defaultModel = getDefaultModelId("openai") |
| 87 | + expect(defaultModel).toBe("text-embedding-3-small") |
| 88 | + }) |
| 89 | + |
| 90 | + it("should return codestral-embed-2505 for mistral provider", () => { |
| 91 | + const defaultModel = getDefaultModelId("mistral") |
| 92 | + expect(defaultModel).toBe("codestral-embed-2505") |
| 93 | + }) |
| 94 | + }) |
| 95 | +}) |
0 commit comments