Skip to content

Commit e7e99e5

Browse files
authored
feat: update Ollama embedding API to latest version with multi-text embedding support (#1715)
1 parent 402fcf7 commit e7e99e5

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

relay/adaptor/ollama/adaptor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {
2424
// https://github.com/ollama/ollama/blob/main/docs/api.md
2525
fullRequestURL := fmt.Sprintf("%s/api/chat", meta.BaseURL)
2626
if meta.Mode == relaymode.Embeddings {
27-
fullRequestURL = fmt.Sprintf("%s/api/embeddings", meta.BaseURL)
27+
fullRequestURL = fmt.Sprintf("%s/api/embed", meta.BaseURL)
2828
}
2929
return fullRequestURL, nil
3030
}

relay/adaptor/ollama/main.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,15 @@ func StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusC
157157

158158
func ConvertEmbeddingRequest(request model.GeneralOpenAIRequest) *EmbeddingRequest {
159159
return &EmbeddingRequest{
160-
Model: request.Model,
161-
Prompt: strings.Join(request.ParseInput(), " "),
160+
Model: request.Model,
161+
Input: request.ParseInput(),
162+
Options: &Options{
163+
Seed: int(request.Seed),
164+
Temperature: request.Temperature,
165+
TopP: request.TopP,
166+
FrequencyPenalty: request.FrequencyPenalty,
167+
PresencePenalty: request.PresencePenalty,
168+
},
162169
}
163170
}
164171

@@ -201,15 +208,17 @@ func embeddingResponseOllama2OpenAI(response *EmbeddingResponse) *openai.Embeddi
201208
openAIEmbeddingResponse := openai.EmbeddingResponse{
202209
Object: "list",
203210
Data: make([]openai.EmbeddingResponseItem, 0, 1),
204-
Model: "text-embedding-v1",
211+
Model: response.Model,
205212
Usage: model.Usage{TotalTokens: 0},
206213
}
207214

208-
openAIEmbeddingResponse.Data = append(openAIEmbeddingResponse.Data, openai.EmbeddingResponseItem{
209-
Object: `embedding`,
210-
Index: 0,
211-
Embedding: response.Embedding,
212-
})
215+
for i, embedding := range response.Embeddings {
216+
openAIEmbeddingResponse.Data = append(openAIEmbeddingResponse.Data, openai.EmbeddingResponseItem{
217+
Object: `embedding`,
218+
Index: i,
219+
Embedding: embedding,
220+
})
221+
}
213222
return &openAIEmbeddingResponse
214223
}
215224

relay/adaptor/ollama/model.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ type ChatResponse struct {
3737
}
3838

3939
type EmbeddingRequest struct {
40-
Model string `json:"model"`
41-
Prompt string `json:"prompt"`
40+
Model string `json:"model"`
41+
Input []string `json:"input"`
42+
// Truncate bool `json:"truncate,omitempty"`
43+
Options *Options `json:"options,omitempty"`
44+
// KeepAlive string `json:"keep_alive,omitempty"`
4245
}
4346

4447
type EmbeddingResponse struct {
45-
Error string `json:"error,omitempty"`
46-
Embedding []float64 `json:"embedding,omitempty"`
48+
Error string `json:"error,omitempty"`
49+
Model string `json:"model"`
50+
Embeddings [][]float64 `json:"embeddings"`
4751
}

0 commit comments

Comments
 (0)