| 1 | namespace HybridCodebaseIndex.Core.Embeddings; |
| 2 | |
| 3 | internal static class EmbeddingProviderFactory |
| 4 | { |
| 5 | internal static IEmbeddingProvider Create(IndexSettings settings, string? indexDirectory = null) |
| 6 | { |
| 7 | var provider = (settings.EmbeddingProvider ?? "dummy").Trim().ToLowerInvariant(); |
| 8 | return provider switch |
| 9 | { |
| 10 | "dummy" => new DummyEmbeddingProvider(settings.EmbeddingDim > 0 ? settings.EmbeddingDim : 64), |
| 11 | "onnx" => CreateOnnx(settings, indexDirectory), |
| 12 | _ => new DummyEmbeddingProvider(settings.EmbeddingDim > 0 ? settings.EmbeddingDim : 64), |
| 13 | }; |
| 14 | } |
| 15 | |
| 16 | private static IEmbeddingProvider CreateOnnx(IndexSettings settings, string? indexDirectory) |
| 17 | { |
| 18 | var modelPath = settings.EmbeddingModelPath; |
| 19 | if (!string.IsNullOrWhiteSpace(modelPath) && !Path.IsPathRooted(modelPath) && !string.IsNullOrWhiteSpace(indexDirectory)) |
| 20 | modelPath = Path.Combine(indexDirectory, modelPath); |
| 21 | |
| 22 | var vocabPath = settings.EmbeddingVocabPath; |
| 23 | if (!string.IsNullOrWhiteSpace(vocabPath) && !Path.IsPathRooted(vocabPath) && !string.IsNullOrWhiteSpace(indexDirectory)) |
| 24 | vocabPath = Path.Combine(indexDirectory, vocabPath); |
| 25 | |
| 26 | var seqLen = settings.EmbeddingSequenceLength > 0 ? settings.EmbeddingSequenceLength : 128; |
| 27 | var preferGpu = settings.EmbeddingPreferGpu; |
| 28 | return new OnnxEmbeddingProvider( |
| 29 | modelPath: modelPath ?? "", |
| 30 | vocabPath: vocabPath, |
| 31 | doLowerCase: settings.EmbeddingDoLowerCase, |
| 32 | seqLen: seqLen, |
| 33 | preferGpu: preferGpu); |
| 34 | } |
| 35 | } |
| 36 | |
| 37 | |