fix(memory): update Gemini embedding to gemini-embedding-001 with dimension support (#10)

- Replace deprecated text-embedding-004 with gemini-embedding-001
- Add WithDimensions() to OpenAIEmbeddingProvider for dimension truncation
- Pass dimensions=1536 for Gemini to match pgvector column size
- Allow config override of Gemini embedding model via embedding_model
This commit is contained in:
miken90 authored and GitHub committed 2026-02-28 09:16:00 +07:00
1 parent 1b1ca2214a
commit 4db5259581
2 files changed
+20 -5

No files matched your search

+6 -1
View File
@@ -237,7 +237,12 @@ func createEmbeddingProvider(name string, cfg *config.Config, memCfg *config.Mem
if cfg.Providers.Gemini.APIKey == "" {
return nil
}
return memory.NewOpenAIEmbeddingProvider("gemini", cfg.Providers.Gemini.APIKey, "https://generativelanguage.googleapis.com/v1beta/openai", "text-embedding-004")
geminiModel := "gemini-embedding-001"
if memCfg != nil && memCfg.EmbeddingModel != "" {
geminiModel = memCfg.EmbeddingModel
}
return memory.NewOpenAIEmbeddingProvider("gemini", cfg.Providers.Gemini.APIKey, "https://generativelanguage.googleapis.com/v1beta/openai", geminiModel).
WithDimensions(1536)
}
return nil
}
+14 -4
View File
@@ -25,10 +25,11 @@ type EmbeddingProvider interface {
// OpenAIEmbeddingProvider uses the OpenAI-compatible embedding API.
// Works with OpenAI, OpenRouter, and any compatible endpoint.
type OpenAIEmbeddingProvider struct {
name string
model string
apiKey string
apiURL string
name string
model string
apiKey string
apiURL string
dimensions int // optional: truncate output to this many dimensions (0 = use model default)
}
// NewOpenAIEmbeddingProvider creates a provider for OpenAI-compatible embedding APIs.
@@ -48,6 +49,12 @@ func NewOpenAIEmbeddingProvider(name, apiKey, apiURL, model string) *OpenAIEmbed
}
}
// WithDimensions sets the output dimensions for models that support dimension truncation.
func (p *OpenAIEmbeddingProvider) WithDimensions(d int) *OpenAIEmbeddingProvider {
p.dimensions = d
return p
}
func (p *OpenAIEmbeddingProvider) Name() string { return p.name }
func (p *OpenAIEmbeddingProvider) Model() string { return p.model }
@@ -56,6 +63,9 @@ func (p *OpenAIEmbeddingProvider) Embed(ctx context.Context, texts []string) ([]
"input": texts,
"model": p.model,
}
if p.dimensions > 0 {
reqBody["dimensions"] = p.dimensions
}
bodyJSON, err := json.Marshal(reqBody)
if err != nil {