mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-25 11:20:07 +08:00
* fix: ollama url * feat: add Ollama provider integration and update dependencies * fix: update Ollama provider handling and API host formatting * feat: support Ollama Cloud * test: formatOllamaApiHost * chore * fix: update Ollama provider check to use isOllamaProvider function * fix: address PR review issues for Ollama provider Critical fixes: - Fix regex escape bug: /\v1$/ → /\/v1$/ in OpenAIBaseClient.ts - Add comprehensive error handling for Ollama fetch API (network errors, non-200 responses, invalid JSON) Minor improvements: - Fix inconsistent optional chaining in formatOllamaApiHost - Add null check in migration 180 for undefined state.llm.providers All checks passed: lint, typecheck, tests (2313 tests) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: suyao <sy20010504@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import type { BaseEmbeddings } from '@cherrystudio/embedjs-interfaces'
|
|
import { OllamaEmbeddings } from '@cherrystudio/embedjs-ollama'
|
|
import { OpenAiEmbeddings } from '@cherrystudio/embedjs-openai'
|
|
import type { ApiClient } from '@types'
|
|
import { net } from 'electron'
|
|
|
|
import { VoyageEmbeddings } from './VoyageEmbeddings'
|
|
|
|
export default class EmbeddingsFactory {
|
|
static create({ embedApiClient, dimensions }: { embedApiClient: ApiClient; dimensions?: number }): BaseEmbeddings {
|
|
const batchSize = 10
|
|
const { model, provider, apiKey, baseURL } = embedApiClient
|
|
if (provider === 'voyageai') {
|
|
return new VoyageEmbeddings({
|
|
modelName: model,
|
|
apiKey,
|
|
outputDimension: dimensions,
|
|
batchSize: 8
|
|
})
|
|
}
|
|
if (provider === 'ollama') {
|
|
return new OllamaEmbeddings({
|
|
model: model,
|
|
baseUrl: baseURL.replace(/\/api$/, ''),
|
|
requestOptions: {
|
|
// @ts-ignore expected
|
|
'encoding-format': 'float'
|
|
}
|
|
})
|
|
}
|
|
// NOTE: Azure OpenAI 也走 OpenAIEmbeddings, baseURL是https://xxxx.openai.azure.com/openai/v1
|
|
return new OpenAiEmbeddings({
|
|
model,
|
|
apiKey,
|
|
dimensions,
|
|
batchSize,
|
|
configuration: { baseURL, fetch: net.fetch as typeof fetch }
|
|
})
|
|
}
|
|
}
|