08c5f82a04
* refactor(knowledge): simplify dimension settings, support base migration Embedding dimension - remove 'auto set dimension', let the user take control - reuse findModelById - improve error messages for VoyageEmbeddings Knowledgebase migration - enable migration when model or dimension changes - add knowledgeThunk to reuse code KnowledgeSettings - unify UI for AddKnowledgeBasePopup and EditKnowledgeBasePopup - refactor KnowledgeSettings, split it to smaller components Tests: - knowledgeThunk - InputEmbeddingDimension - KnowledgeBaseFormModal - GeneralSettingsPanel - AdvancedSettingsPanel - InfoTooltip Misc. - add InfoTooltip - remove MemoriesSettingsModal * fix: i18n and vitest config
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import type { BaseEmbeddings } from '@cherrystudio/embedjs-interfaces'
|
|
import { OllamaEmbeddings } from '@cherrystudio/embedjs-ollama'
|
|
import { OpenAiEmbeddings } from '@cherrystudio/embedjs-openai'
|
|
import { AzureOpenAiEmbeddings } from '@cherrystudio/embedjs-openai/src/azure-openai-embeddings'
|
|
import { ApiClient } from '@types'
|
|
|
|
import { VoyageEmbeddings } from './VoyageEmbeddings'
|
|
|
|
export default class EmbeddingsFactory {
|
|
static create({ embedApiClient, dimensions }: { embedApiClient: ApiClient; dimensions?: number }): BaseEmbeddings {
|
|
const batchSize = 10
|
|
const { model, provider, apiKey, apiVersion, baseURL } = embedApiClient
|
|
if (provider === 'voyageai') {
|
|
return new VoyageEmbeddings({
|
|
modelName: model,
|
|
apiKey,
|
|
outputDimension: dimensions,
|
|
batchSize: 8
|
|
})
|
|
}
|
|
if (provider === 'ollama') {
|
|
if (baseURL.includes('v1/')) {
|
|
return new OllamaEmbeddings({
|
|
model: model,
|
|
baseUrl: baseURL.replace('v1/', ''),
|
|
requestOptions: {
|
|
// @ts-ignore expected
|
|
'encoding-format': 'float'
|
|
}
|
|
})
|
|
}
|
|
return new OllamaEmbeddings({
|
|
model: model,
|
|
baseUrl: baseURL,
|
|
requestOptions: {
|
|
// @ts-ignore expected
|
|
'encoding-format': 'float'
|
|
}
|
|
})
|
|
}
|
|
if (apiVersion !== undefined) {
|
|
return new AzureOpenAiEmbeddings({
|
|
azureOpenAIApiKey: apiKey,
|
|
azureOpenAIApiVersion: apiVersion,
|
|
azureOpenAIApiDeploymentName: model,
|
|
azureOpenAIEndpoint: baseURL,
|
|
dimensions,
|
|
batchSize
|
|
})
|
|
}
|
|
return new OpenAiEmbeddings({
|
|
model,
|
|
apiKey,
|
|
dimensions,
|
|
batchSize,
|
|
configuration: { baseURL }
|
|
})
|
|
}
|
|
}
|