feat(knowledge): support Voyage AI (#3810)
* feat(knowledge): support Voyage AI * chore
This commit is contained in:
parent
32b8fa7e63
commit
ae8869e1b6
@ -53,6 +53,7 @@
|
|||||||
"@electron-toolkit/utils": "^3.0.0",
|
"@electron-toolkit/utils": "^3.0.0",
|
||||||
"@electron/notarize": "^2.5.0",
|
"@electron/notarize": "^2.5.0",
|
||||||
"@google/generative-ai": "^0.21.0",
|
"@google/generative-ai": "^0.21.0",
|
||||||
|
"@langchain/community": "^0.3.36",
|
||||||
"@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch",
|
"@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch",
|
||||||
"@llm-tools/embedjs-libsql": "^0.1.28",
|
"@llm-tools/embedjs-libsql": "^0.1.28",
|
||||||
"@llm-tools/embedjs-loader-csv": "^0.1.28",
|
"@llm-tools/embedjs-loader-csv": "^0.1.28",
|
||||||
|
|||||||
24
src/main/embeddings/Embeddings.ts
Normal file
24
src/main/embeddings/Embeddings.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import type { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'
|
||||||
|
import { KnowledgeBaseParams } from '@types'
|
||||||
|
|
||||||
|
import EmbeddingsFactory from './EmbeddingsFactory'
|
||||||
|
|
||||||
|
export default class Embeddings {
|
||||||
|
private sdk: BaseEmbeddings
|
||||||
|
constructor({ model, apiKey, apiVersion, baseURL, dimensions }: KnowledgeBaseParams) {
|
||||||
|
this.sdk = EmbeddingsFactory.create({ model, apiKey, apiVersion, baseURL, dimensions } as KnowledgeBaseParams)
|
||||||
|
}
|
||||||
|
public async init(): Promise<void> {
|
||||||
|
return this.sdk.init()
|
||||||
|
}
|
||||||
|
public async getDimensions(): Promise<number> {
|
||||||
|
return this.sdk.getDimensions()
|
||||||
|
}
|
||||||
|
public async embedDocuments(texts: string[]): Promise<number[][]> {
|
||||||
|
return this.sdk.embedDocuments(texts)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async embedQuery(text: string): Promise<number[]> {
|
||||||
|
return this.sdk.embedQuery(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/main/embeddings/EmbeddingsFactory.ts
Normal file
38
src/main/embeddings/EmbeddingsFactory.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import type { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'
|
||||||
|
import { OpenAiEmbeddings } from '@llm-tools/embedjs-openai'
|
||||||
|
import { AzureOpenAiEmbeddings } from '@llm-tools/embedjs-openai/src/azure-openai-embeddings'
|
||||||
|
import { getInstanceName } from '@main/utils'
|
||||||
|
import { KnowledgeBaseParams } from '@types'
|
||||||
|
|
||||||
|
import VoyageEmbeddings from './VoyageEmbeddings'
|
||||||
|
|
||||||
|
export default class EmbeddingsFactory {
|
||||||
|
static create({ model, apiKey, apiVersion, baseURL, dimensions }: KnowledgeBaseParams): BaseEmbeddings {
|
||||||
|
const batchSize = 10
|
||||||
|
if (model.includes('voyage')) {
|
||||||
|
return new VoyageEmbeddings({
|
||||||
|
modelName: model,
|
||||||
|
apiKey,
|
||||||
|
outputDimension: dimensions,
|
||||||
|
batchSize: 8
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (apiVersion !== undefined) {
|
||||||
|
return new AzureOpenAiEmbeddings({
|
||||||
|
azureOpenAIApiKey: apiKey,
|
||||||
|
azureOpenAIApiVersion: apiVersion,
|
||||||
|
azureOpenAIApiDeploymentName: model,
|
||||||
|
azureOpenAIApiInstanceName: getInstanceName(baseURL),
|
||||||
|
dimensions,
|
||||||
|
batchSize
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return new OpenAiEmbeddings({
|
||||||
|
model,
|
||||||
|
apiKey,
|
||||||
|
dimensions,
|
||||||
|
batchSize,
|
||||||
|
configuration: { baseURL }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/embeddings/VoyageEmbeddings.ts
Normal file
30
src/main/embeddings/VoyageEmbeddings.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { VoyageEmbeddings as _VoyageEmbeddings } from '@langchain/community/embeddings/voyage'
|
||||||
|
import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'
|
||||||
|
|
||||||
|
export default class VoyageEmbeddings extends BaseEmbeddings {
|
||||||
|
private model: _VoyageEmbeddings
|
||||||
|
constructor(private readonly configuration?: ConstructorParameters<typeof _VoyageEmbeddings>[0]) {
|
||||||
|
super()
|
||||||
|
if (!this.configuration) this.configuration = {}
|
||||||
|
if (!this.configuration.modelName) this.configuration.modelName = 'voyage-3'
|
||||||
|
|
||||||
|
if (!this.configuration.outputDimension) {
|
||||||
|
throw new Error('You need to pass in the optional dimensions parameter for this model')
|
||||||
|
}
|
||||||
|
this.model = new _VoyageEmbeddings(this.configuration)
|
||||||
|
}
|
||||||
|
override async getDimensions(): Promise<number> {
|
||||||
|
if (!this.configuration?.outputDimension) {
|
||||||
|
throw new Error('You need to pass in the optional dimensions parameter for this model')
|
||||||
|
}
|
||||||
|
return this.configuration?.outputDimension
|
||||||
|
}
|
||||||
|
|
||||||
|
override async embedDocuments(texts: string[]): Promise<number[][]> {
|
||||||
|
return this.model.embedDocuments(texts)
|
||||||
|
}
|
||||||
|
|
||||||
|
override async embedQuery(text: string): Promise<number[]> {
|
||||||
|
return this.model.embedQuery(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@ import BaseReranker from './BaseReranker'
|
|||||||
import DefaultReranker from './DefaultReranker'
|
import DefaultReranker from './DefaultReranker'
|
||||||
import JinaReranker from './JinaReranker'
|
import JinaReranker from './JinaReranker'
|
||||||
import SiliconFlowReranker from './SiliconFlowReranker'
|
import SiliconFlowReranker from './SiliconFlowReranker'
|
||||||
|
import VoyageReranker from './VoyageReranker'
|
||||||
|
|
||||||
export default class RerankerFactory {
|
export default class RerankerFactory {
|
||||||
static create(base: KnowledgeBaseParams): BaseReranker {
|
static create(base: KnowledgeBaseParams): BaseReranker {
|
||||||
@ -11,6 +12,8 @@ export default class RerankerFactory {
|
|||||||
return new SiliconFlowReranker(base)
|
return new SiliconFlowReranker(base)
|
||||||
} else if (base.rerankModelProvider === 'jina') {
|
} else if (base.rerankModelProvider === 'jina') {
|
||||||
return new JinaReranker(base)
|
return new JinaReranker(base)
|
||||||
|
} else if (base.rerankModelProvider === 'voyageai') {
|
||||||
|
return new VoyageReranker(base)
|
||||||
}
|
}
|
||||||
return new DefaultReranker(base)
|
return new DefaultReranker(base)
|
||||||
}
|
}
|
||||||
|
|||||||
60
src/main/reranker/VoyageReranker.ts
Normal file
60
src/main/reranker/VoyageReranker.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { ExtractChunkData } from '@llm-tools/embedjs-interfaces'
|
||||||
|
import { KnowledgeBaseParams } from '@types'
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
|
import BaseReranker from './BaseReranker'
|
||||||
|
|
||||||
|
export default class VoyageReranker extends BaseReranker {
|
||||||
|
constructor(base: KnowledgeBaseParams) {
|
||||||
|
super(base)
|
||||||
|
}
|
||||||
|
|
||||||
|
public rerank = async (query: string, searchResults: ExtractChunkData[]): Promise<ExtractChunkData[]> => {
|
||||||
|
let baseURL = this.base?.rerankBaseURL?.endsWith('/')
|
||||||
|
? this.base.rerankBaseURL.slice(0, -1)
|
||||||
|
: this.base.rerankBaseURL
|
||||||
|
|
||||||
|
if (baseURL && !baseURL.endsWith('/v1')) {
|
||||||
|
baseURL = `${baseURL}/v1`
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = `${baseURL}/rerank`
|
||||||
|
|
||||||
|
const requestBody = {
|
||||||
|
model: this.base.rerankModel,
|
||||||
|
query,
|
||||||
|
documents: searchResults.map((doc) => doc.pageContent),
|
||||||
|
top_k: this.base.topN,
|
||||||
|
return_documents: false,
|
||||||
|
truncation: true
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { data } = await axios.post(url, requestBody, {
|
||||||
|
headers: {
|
||||||
|
...this.defaultHeaders()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const rerankResults = data.data
|
||||||
|
|
||||||
|
const resultMap = new Map(rerankResults.map((result: any) => [result.index, result.relevance_score || 0]))
|
||||||
|
|
||||||
|
return searchResults
|
||||||
|
.map((doc: ExtractChunkData, index: number) => {
|
||||||
|
const score = resultMap.get(index)
|
||||||
|
if (score === undefined) return undefined
|
||||||
|
|
||||||
|
return {
|
||||||
|
...doc,
|
||||||
|
score
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter((doc): doc is ExtractChunkData => doc !== undefined)
|
||||||
|
.sort((a, b) => b.score - a.score)
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error('Voyage Reranker API 错误:', error.message || error)
|
||||||
|
throw new Error(`${error} - BaseUrl: ${baseURL}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,11 +21,10 @@ import type { ExtractChunkData } from '@llm-tools/embedjs-interfaces'
|
|||||||
import { LibSqlDb } from '@llm-tools/embedjs-libsql'
|
import { LibSqlDb } from '@llm-tools/embedjs-libsql'
|
||||||
import { SitemapLoader } from '@llm-tools/embedjs-loader-sitemap'
|
import { SitemapLoader } from '@llm-tools/embedjs-loader-sitemap'
|
||||||
import { WebLoader } from '@llm-tools/embedjs-loader-web'
|
import { WebLoader } from '@llm-tools/embedjs-loader-web'
|
||||||
import { AzureOpenAiEmbeddings, OpenAiEmbeddings } from '@llm-tools/embedjs-openai'
|
import Embeddings from '@main/embeddings/Embeddings'
|
||||||
import { addFileLoader } from '@main/loader'
|
import { addFileLoader } from '@main/loader'
|
||||||
import Reranker from '@main/reranker/Reranker'
|
import Reranker from '@main/reranker/Reranker'
|
||||||
import { windowService } from '@main/services/WindowService'
|
import { windowService } from '@main/services/WindowService'
|
||||||
import { getInstanceName } from '@main/utils'
|
|
||||||
import { getAllFiles } from '@main/utils/file'
|
import { getAllFiles } from '@main/utils/file'
|
||||||
import type { LoaderReturn } from '@shared/config/types'
|
import type { LoaderReturn } from '@shared/config/types'
|
||||||
import { FileType, KnowledgeBaseParams, KnowledgeItem } from '@types'
|
import { FileType, KnowledgeBaseParams, KnowledgeItem } from '@types'
|
||||||
@ -114,29 +113,20 @@ class KnowledgeService {
|
|||||||
baseURL,
|
baseURL,
|
||||||
dimensions
|
dimensions
|
||||||
}: KnowledgeBaseParams): Promise<RAGApplication> => {
|
}: KnowledgeBaseParams): Promise<RAGApplication> => {
|
||||||
const batchSize = 10
|
let ragApplication: RAGApplication
|
||||||
return new RAGApplicationBuilder()
|
const embeddings = new Embeddings({ model, apiKey, apiVersion, baseURL, dimensions } as KnowledgeBaseParams)
|
||||||
.setModel('NO_MODEL')
|
try {
|
||||||
.setEmbeddingModel(
|
ragApplication = await new RAGApplicationBuilder()
|
||||||
apiVersion
|
.setModel('NO_MODEL')
|
||||||
? new AzureOpenAiEmbeddings({
|
.setEmbeddingModel(embeddings)
|
||||||
azureOpenAIApiKey: apiKey,
|
.setVectorDatabase(new LibSqlDb({ path: path.join(this.storageDir, id) }))
|
||||||
azureOpenAIApiVersion: apiVersion,
|
.build()
|
||||||
azureOpenAIApiDeploymentName: model,
|
} catch (e) {
|
||||||
azureOpenAIApiInstanceName: getInstanceName(baseURL),
|
Logger.error(e)
|
||||||
dimensions,
|
throw new Error(`Failed to create RAGApplication: ${e}`)
|
||||||
batchSize
|
}
|
||||||
})
|
|
||||||
: new OpenAiEmbeddings({
|
return ragApplication
|
||||||
model,
|
|
||||||
apiKey,
|
|
||||||
dimensions,
|
|
||||||
batchSize,
|
|
||||||
configuration: { baseURL }
|
|
||||||
})
|
|
||||||
)
|
|
||||||
.setVectorDatabase(new LibSqlDb({ path: path.join(this.storageDir, id) }))
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public create = async (_: Electron.IpcMainInvokeEvent, base: KnowledgeBaseParams): Promise<void> => {
|
public create = async (_: Electron.IpcMainInvokeEvent, base: KnowledgeBaseParams): Promise<void> => {
|
||||||
|
|||||||
BIN
src/renderer/src/assets/images/models/voyageai.png
Normal file
BIN
src/renderer/src/assets/images/models/voyageai.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/src/assets/images/providers/voyageai.png
Normal file
BIN
src/renderer/src/assets/images/providers/voyageai.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@ -242,6 +242,58 @@ export const EMBEDDING_MODELS = [
|
|||||||
{
|
{
|
||||||
id: 'mistral-embed',
|
id: 'mistral-embed',
|
||||||
max_context: 8000
|
max_context: 8000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-large',
|
||||||
|
max_context: 1024
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-large',
|
||||||
|
max_context: 256
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-large',
|
||||||
|
max_context: 512
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-large',
|
||||||
|
max_context: 2048
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3',
|
||||||
|
max_context: 1024
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-lite',
|
||||||
|
max_context: 512
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-3',
|
||||||
|
max_context: 1024
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-3',
|
||||||
|
max_context: 256
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-3',
|
||||||
|
max_context: 512
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-3',
|
||||||
|
max_context: 2048
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-finance-2',
|
||||||
|
max_context: 1024
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-law-2',
|
||||||
|
max_context: 1024
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-2',
|
||||||
|
max_context: 1536
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -122,6 +122,7 @@ import UpstageModelLogo from '@renderer/assets/images/models/upstage.png'
|
|||||||
import UpstageModelLogoDark from '@renderer/assets/images/models/upstage_dark.png'
|
import UpstageModelLogoDark from '@renderer/assets/images/models/upstage_dark.png'
|
||||||
import ViduModelLogo from '@renderer/assets/images/models/vidu.png'
|
import ViduModelLogo from '@renderer/assets/images/models/vidu.png'
|
||||||
import ViduModelLogoDark from '@renderer/assets/images/models/vidu_dark.png'
|
import ViduModelLogoDark from '@renderer/assets/images/models/vidu_dark.png'
|
||||||
|
import VoyageModelLogo from '@renderer/assets/images/models/voyageai.png'
|
||||||
import WenxinModelLogo from '@renderer/assets/images/models/wenxin.png'
|
import WenxinModelLogo from '@renderer/assets/images/models/wenxin.png'
|
||||||
import WenxinModelLogoDark from '@renderer/assets/images/models/wenxin_dark.png'
|
import WenxinModelLogoDark from '@renderer/assets/images/models/wenxin_dark.png'
|
||||||
import XirangModelLogo from '@renderer/assets/images/models/xirang.png'
|
import XirangModelLogo from '@renderer/assets/images/models/xirang.png'
|
||||||
@ -175,7 +176,8 @@ export const REASONING_REGEX =
|
|||||||
/^(o\d+(?:-[\w-]+)?|.*\b(?:reasoner|thinking)\b.*|.*-[rR]\d+.*|.*\bqwq(?:-[\w-]+)?\b.*|.*\bhunyuan-t1(?:-[\w-]+)?\b.*)$/i
|
/^(o\d+(?:-[\w-]+)?|.*\b(?:reasoner|thinking)\b.*|.*-[rR]\d+.*|.*\bqwq(?:-[\w-]+)?\b.*|.*\bhunyuan-t1(?:-[\w-]+)?\b.*)$/i
|
||||||
|
|
||||||
// Embedding models
|
// Embedding models
|
||||||
export const EMBEDDING_REGEX = /(?:^text-|embed|bge-|e5-|LLM2Vec|retrieval|uae-|gte-|jina-clip|jina-embeddings)/i
|
export const EMBEDDING_REGEX =
|
||||||
|
/(?:^text-|embed|bge-|e5-|LLM2Vec|retrieval|uae-|gte-|jina-clip|jina-embeddings|voyage-)/i
|
||||||
|
|
||||||
// Rerank models
|
// Rerank models
|
||||||
export const RERANKING_REGEX = /(?:rerank|re-rank|re-ranker|re-ranking|retrieval|retriever)/i
|
export const RERANKING_REGEX = /(?:rerank|re-rank|re-ranker|re-ranking|retrieval|retriever)/i
|
||||||
@ -327,7 +329,8 @@ export function getModelLogo(modelId: string) {
|
|||||||
embedding: isLight ? EmbeddingModelLogo : EmbeddingModelLogoDark,
|
embedding: isLight ? EmbeddingModelLogo : EmbeddingModelLogoDark,
|
||||||
perplexity: isLight ? PerplexityModelLogo : PerplexityModelLogoDark,
|
perplexity: isLight ? PerplexityModelLogo : PerplexityModelLogoDark,
|
||||||
sonar: isLight ? PerplexityModelLogo : PerplexityModelLogoDark,
|
sonar: isLight ? PerplexityModelLogo : PerplexityModelLogoDark,
|
||||||
'bge-': BgeModelLogo
|
'bge-': BgeModelLogo,
|
||||||
|
'voyage-': VoyageModelLogo
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const key in logoMap) {
|
for (const key in logoMap) {
|
||||||
@ -1801,7 +1804,63 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
|
|||||||
group: 'DeepSeek'
|
group: 'DeepSeek'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
gpustack: []
|
gpustack: [],
|
||||||
|
voyageai: [
|
||||||
|
{
|
||||||
|
id: 'voyage-3-large',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-3-large',
|
||||||
|
group: 'Voyage Embeddings V3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-3',
|
||||||
|
group: 'Voyage Embeddings V3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-3-lite',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-3-lite',
|
||||||
|
group: 'Voyage Embeddings V3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-3',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-code-3',
|
||||||
|
group: 'Voyage Embeddings V3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-finance-3',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-finance-3',
|
||||||
|
group: 'Voyage Embeddings V2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-law-2',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-law-2',
|
||||||
|
group: 'Voyage Embeddings V2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyage-code-2',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'voyage-code-2',
|
||||||
|
group: 'Voyage Embeddings V2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'rerank-2',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'rerank-2',
|
||||||
|
group: 'Voyage Rerank V2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'rerank-2-lite',
|
||||||
|
provider: 'voyageai',
|
||||||
|
name: 'rerank-2-lite',
|
||||||
|
group: 'Voyage Rerank V2'
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TEXT_TO_IMAGES_MODELS = [
|
export const TEXT_TO_IMAGES_MODELS = [
|
||||||
|
|||||||
@ -38,6 +38,7 @@ import StepProviderLogo from '@renderer/assets/images/providers/step.png'
|
|||||||
import TencentCloudProviderLogo from '@renderer/assets/images/providers/tencent-cloud-ti.png'
|
import TencentCloudProviderLogo from '@renderer/assets/images/providers/tencent-cloud-ti.png'
|
||||||
import TogetherProviderLogo from '@renderer/assets/images/providers/together.png'
|
import TogetherProviderLogo from '@renderer/assets/images/providers/together.png'
|
||||||
import BytedanceProviderLogo from '@renderer/assets/images/providers/volcengine.png'
|
import BytedanceProviderLogo from '@renderer/assets/images/providers/volcengine.png'
|
||||||
|
import VoyageAIProviderLogo from '@renderer/assets/images/providers/voyageai.png'
|
||||||
import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png'
|
import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png'
|
||||||
import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
||||||
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||||
@ -86,14 +87,15 @@ const PROVIDER_LOGO_MAP = {
|
|||||||
o3: O3ProviderLogo,
|
o3: O3ProviderLogo,
|
||||||
'tencent-cloud-ti': TencentCloudProviderLogo,
|
'tencent-cloud-ti': TencentCloudProviderLogo,
|
||||||
gpustack: GPUStackProviderLogo,
|
gpustack: GPUStackProviderLogo,
|
||||||
alayanew: AlayaNewProviderLogo
|
alayanew: AlayaNewProviderLogo,
|
||||||
|
voyageai: VoyageAIProviderLogo
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export function getProviderLogo(providerId: string) {
|
export function getProviderLogo(providerId: string) {
|
||||||
return PROVIDER_LOGO_MAP[providerId as keyof typeof PROVIDER_LOGO_MAP]
|
return PROVIDER_LOGO_MAP[providerId as keyof typeof PROVIDER_LOGO_MAP]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const SUPPORTED_REANK_PROVIDERS = ['silicon', 'jina']
|
export const SUPPORTED_REANK_PROVIDERS = ['silicon', 'jina', 'voyageai']
|
||||||
|
|
||||||
export const PROVIDER_CONFIG = {
|
export const PROVIDER_CONFIG = {
|
||||||
openai: {
|
openai: {
|
||||||
@ -560,5 +562,16 @@ export const PROVIDER_CONFIG = {
|
|||||||
docs: 'https://docs.gpustack.ai/latest/',
|
docs: 'https://docs.gpustack.ai/latest/',
|
||||||
models: 'https://docs.gpustack.ai/latest/overview/#supported-models'
|
models: 'https://docs.gpustack.ai/latest/overview/#supported-models'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
voyageai: {
|
||||||
|
api: {
|
||||||
|
url: 'https://api.voyageai.com'
|
||||||
|
},
|
||||||
|
websites: {
|
||||||
|
official: 'https://www.voyageai.com/',
|
||||||
|
apiKey: 'https://dashboard.voyageai.com/organization/api-keys',
|
||||||
|
docs: 'https://docs.voyageai.com/docs',
|
||||||
|
models: 'https://docs.voyageai.com/docs'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -678,7 +678,8 @@
|
|||||||
"xirang": "State Cloud Xirang",
|
"xirang": "State Cloud Xirang",
|
||||||
"yi": "Yi",
|
"yi": "Yi",
|
||||||
"zhinao": "360AI",
|
"zhinao": "360AI",
|
||||||
"zhipu": "ZHIPU AI"
|
"zhipu": "ZHIPU AI",
|
||||||
|
"voyageai": "Voyage AI"
|
||||||
},
|
},
|
||||||
"restore": {
|
"restore": {
|
||||||
"confirm": "Are you sure you want to restore data?",
|
"confirm": "Are you sure you want to restore data?",
|
||||||
|
|||||||
@ -678,7 +678,8 @@
|
|||||||
"xirang": "天翼クラウド 息壤",
|
"xirang": "天翼クラウド 息壤",
|
||||||
"yi": "零一万物",
|
"yi": "零一万物",
|
||||||
"zhinao": "360智脳",
|
"zhinao": "360智脳",
|
||||||
"zhipu": "智譜AI"
|
"zhipu": "智譜AI",
|
||||||
|
"voyageai": "Voyage AI"
|
||||||
},
|
},
|
||||||
"restore": {
|
"restore": {
|
||||||
"confirm": "データを復元しますか?",
|
"confirm": "データを復元しますか?",
|
||||||
|
|||||||
@ -678,7 +678,8 @@
|
|||||||
"xirang": "State Cloud Xirang",
|
"xirang": "State Cloud Xirang",
|
||||||
"yi": "Yi",
|
"yi": "Yi",
|
||||||
"zhinao": "360AI",
|
"zhinao": "360AI",
|
||||||
"zhipu": "ZHIPU AI"
|
"zhipu": "ZHIPU AI",
|
||||||
|
"voyageai": "Voyage AI"
|
||||||
},
|
},
|
||||||
"restore": {
|
"restore": {
|
||||||
"confirm": "Вы уверены, что хотите восстановить данные?",
|
"confirm": "Вы уверены, что хотите восстановить данные?",
|
||||||
|
|||||||
@ -678,7 +678,8 @@
|
|||||||
"xirang": "天翼云息壤",
|
"xirang": "天翼云息壤",
|
||||||
"yi": "零一万物",
|
"yi": "零一万物",
|
||||||
"zhinao": "360智脑",
|
"zhinao": "360智脑",
|
||||||
"zhipu": "智谱AI"
|
"zhipu": "智谱AI",
|
||||||
|
"voyageai":"Voyage AI"
|
||||||
},
|
},
|
||||||
"restore": {
|
"restore": {
|
||||||
"confirm": "确定要恢复数据吗?",
|
"confirm": "确定要恢复数据吗?",
|
||||||
|
|||||||
@ -678,7 +678,8 @@
|
|||||||
"xirang": "天翼雲息壤",
|
"xirang": "天翼雲息壤",
|
||||||
"yi": "零一萬物",
|
"yi": "零一萬物",
|
||||||
"zhinao": "360 智腦",
|
"zhinao": "360 智腦",
|
||||||
"zhipu": "智譜 AI"
|
"zhipu": "智譜 AI",
|
||||||
|
"voyageai": "Voyage AI"
|
||||||
},
|
},
|
||||||
"restore": {
|
"restore": {
|
||||||
"confirm": "確定要復原資料嗎?",
|
"confirm": "確定要復原資料嗎?",
|
||||||
|
|||||||
@ -257,6 +257,7 @@ const ModelList: React.FC<ModelListProps> = ({ provider: _provider, modelStatuse
|
|||||||
{sortedModelGroups[group].map((model) => {
|
{sortedModelGroups[group].map((model) => {
|
||||||
const modelStatus = modelStatuses.find((status) => status.model.id === model.id)
|
const modelStatus = modelStatuses.find((status) => status.model.id === model.id)
|
||||||
const isChecking = modelStatus?.checking === true
|
const isChecking = modelStatus?.checking === true
|
||||||
|
console.log('model', model.id, getModelLogo(model.id))
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ModelListItem key={model.id}>
|
<ModelListItem key={model.id}>
|
||||||
|
|||||||
@ -40,7 +40,7 @@ const persistedReducer = persistReducer(
|
|||||||
{
|
{
|
||||||
key: 'cherry-studio',
|
key: 'cherry-studio',
|
||||||
storage,
|
storage,
|
||||||
version: 83,
|
version: 84,
|
||||||
blacklist: ['runtime', 'messages'],
|
blacklist: ['runtime', 'messages'],
|
||||||
migrate
|
migrate
|
||||||
},
|
},
|
||||||
|
|||||||
@ -456,6 +456,16 @@ export const INITIAL_PROVIDERS: Provider[] = [
|
|||||||
models: SYSTEM_MODELS.gpustack,
|
models: SYSTEM_MODELS.gpustack,
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
enabled: false
|
enabled: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voyageai',
|
||||||
|
name: 'VoyageAI',
|
||||||
|
type: 'openai',
|
||||||
|
apiKey: '',
|
||||||
|
apiHost: 'https://api.voyageai.com',
|
||||||
|
models: SYSTEM_MODELS.voyageai,
|
||||||
|
isSystem: true,
|
||||||
|
enabled: false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -795,6 +795,10 @@ const migrateConfig = {
|
|||||||
state.settings.launchToTray = false
|
state.settings.launchToTray = false
|
||||||
state.settings.trayOnClose = true
|
state.settings.trayOnClose = true
|
||||||
return state
|
return state
|
||||||
|
},
|
||||||
|
'84': (state: RootState) => {
|
||||||
|
addProvider(state, 'voyageai')
|
||||||
|
return state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
455
yarn.lock
455
yarn.lock
@ -1590,6 +1590,396 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@langchain/community@npm:^0.3.36":
|
||||||
|
version: 0.3.36
|
||||||
|
resolution: "@langchain/community@npm:0.3.36"
|
||||||
|
dependencies:
|
||||||
|
"@langchain/openai": "npm:>=0.2.0 <0.5.0"
|
||||||
|
binary-extensions: "npm:^2.2.0"
|
||||||
|
expr-eval: "npm:^2.0.2"
|
||||||
|
flat: "npm:^5.0.2"
|
||||||
|
js-yaml: "npm:^4.1.0"
|
||||||
|
langchain: "npm:>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0"
|
||||||
|
langsmith: "npm:>=0.2.8 <0.4.0"
|
||||||
|
uuid: "npm:^10.0.0"
|
||||||
|
zod: "npm:^3.22.3"
|
||||||
|
zod-to-json-schema: "npm:^3.22.5"
|
||||||
|
peerDependencies:
|
||||||
|
"@arcjet/redact": ^v1.0.0-alpha.23
|
||||||
|
"@aws-crypto/sha256-js": ^5.0.0
|
||||||
|
"@aws-sdk/client-bedrock-agent-runtime": ^3.749.0
|
||||||
|
"@aws-sdk/client-bedrock-runtime": ^3.749.0
|
||||||
|
"@aws-sdk/client-dynamodb": ^3.749.0
|
||||||
|
"@aws-sdk/client-kendra": ^3.749.0
|
||||||
|
"@aws-sdk/client-lambda": ^3.749.0
|
||||||
|
"@aws-sdk/client-s3": ^3.749.0
|
||||||
|
"@aws-sdk/client-sagemaker-runtime": ^3.749.0
|
||||||
|
"@aws-sdk/client-sfn": ^3.749.0
|
||||||
|
"@aws-sdk/credential-provider-node": ^3.388.0
|
||||||
|
"@azure/search-documents": ^12.0.0
|
||||||
|
"@azure/storage-blob": ^12.15.0
|
||||||
|
"@browserbasehq/sdk": "*"
|
||||||
|
"@browserbasehq/stagehand": ^1.0.0
|
||||||
|
"@clickhouse/client": ^0.2.5
|
||||||
|
"@cloudflare/ai": "*"
|
||||||
|
"@datastax/astra-db-ts": ^1.0.0
|
||||||
|
"@elastic/elasticsearch": ^8.4.0
|
||||||
|
"@getmetal/metal-sdk": "*"
|
||||||
|
"@getzep/zep-cloud": ^1.0.6
|
||||||
|
"@getzep/zep-js": ^0.9.0
|
||||||
|
"@gomomento/sdk": ^1.51.1
|
||||||
|
"@gomomento/sdk-core": ^1.51.1
|
||||||
|
"@google-ai/generativelanguage": "*"
|
||||||
|
"@google-cloud/storage": ^6.10.1 || ^7.7.0
|
||||||
|
"@gradientai/nodejs-sdk": ^1.2.0
|
||||||
|
"@huggingface/inference": ^2.6.4
|
||||||
|
"@huggingface/transformers": ^3.2.3
|
||||||
|
"@ibm-cloud/watsonx-ai": "*"
|
||||||
|
"@lancedb/lancedb": ^0.12.0
|
||||||
|
"@langchain/core": ">=0.2.21 <0.4.0"
|
||||||
|
"@layerup/layerup-security": ^1.5.12
|
||||||
|
"@libsql/client": ^0.14.0
|
||||||
|
"@mendable/firecrawl-js": ^1.4.3
|
||||||
|
"@mlc-ai/web-llm": "*"
|
||||||
|
"@mozilla/readability": "*"
|
||||||
|
"@neondatabase/serverless": "*"
|
||||||
|
"@notionhq/client": ^2.2.10
|
||||||
|
"@opensearch-project/opensearch": "*"
|
||||||
|
"@pinecone-database/pinecone": "*"
|
||||||
|
"@planetscale/database": ^1.8.0
|
||||||
|
"@premai/prem-sdk": ^0.3.25
|
||||||
|
"@qdrant/js-client-rest": ^1.8.2
|
||||||
|
"@raycast/api": ^1.55.2
|
||||||
|
"@rockset/client": ^0.9.1
|
||||||
|
"@smithy/eventstream-codec": ^2.0.5
|
||||||
|
"@smithy/protocol-http": ^3.0.6
|
||||||
|
"@smithy/signature-v4": ^2.0.10
|
||||||
|
"@smithy/util-utf8": ^2.0.0
|
||||||
|
"@spider-cloud/spider-client": ^0.0.21
|
||||||
|
"@supabase/supabase-js": ^2.45.0
|
||||||
|
"@tensorflow-models/universal-sentence-encoder": "*"
|
||||||
|
"@tensorflow/tfjs-converter": "*"
|
||||||
|
"@tensorflow/tfjs-core": "*"
|
||||||
|
"@upstash/ratelimit": ^1.1.3 || ^2.0.3
|
||||||
|
"@upstash/redis": ^1.20.6
|
||||||
|
"@upstash/vector": ^1.1.1
|
||||||
|
"@vercel/kv": "*"
|
||||||
|
"@vercel/postgres": "*"
|
||||||
|
"@writerai/writer-sdk": ^0.40.2
|
||||||
|
"@xata.io/client": ^0.28.0
|
||||||
|
"@zilliz/milvus2-sdk-node": ">=2.3.5"
|
||||||
|
apify-client: ^2.7.1
|
||||||
|
assemblyai: ^4.6.0
|
||||||
|
better-sqlite3: ">=9.4.0 <12.0.0"
|
||||||
|
cassandra-driver: ^4.7.2
|
||||||
|
cborg: ^4.1.1
|
||||||
|
cheerio: ^1.0.0-rc.12
|
||||||
|
chromadb: "*"
|
||||||
|
closevector-common: 0.1.3
|
||||||
|
closevector-node: 0.1.6
|
||||||
|
closevector-web: 0.1.6
|
||||||
|
cohere-ai: "*"
|
||||||
|
convex: ^1.3.1
|
||||||
|
crypto-js: ^4.2.0
|
||||||
|
d3-dsv: ^2.0.0
|
||||||
|
discord.js: ^14.14.1
|
||||||
|
dria: ^0.0.3
|
||||||
|
duck-duck-scrape: ^2.2.5
|
||||||
|
epub2: ^3.0.1
|
||||||
|
fast-xml-parser: "*"
|
||||||
|
firebase-admin: ^11.9.0 || ^12.0.0
|
||||||
|
google-auth-library: "*"
|
||||||
|
googleapis: "*"
|
||||||
|
hnswlib-node: ^3.0.0
|
||||||
|
html-to-text: ^9.0.5
|
||||||
|
ibm-cloud-sdk-core: "*"
|
||||||
|
ignore: ^5.2.0
|
||||||
|
interface-datastore: ^8.2.11
|
||||||
|
ioredis: ^5.3.2
|
||||||
|
it-all: ^3.0.4
|
||||||
|
jsdom: "*"
|
||||||
|
jsonwebtoken: ^9.0.2
|
||||||
|
llmonitor: ^0.5.9
|
||||||
|
lodash: ^4.17.21
|
||||||
|
lunary: ^0.7.10
|
||||||
|
mammoth: ^1.6.0
|
||||||
|
mariadb: ^3.4.0
|
||||||
|
mongodb: ">=5.2.0"
|
||||||
|
mysql2: ^3.9.8
|
||||||
|
neo4j-driver: "*"
|
||||||
|
notion-to-md: ^3.1.0
|
||||||
|
officeparser: ^4.0.4
|
||||||
|
openai: "*"
|
||||||
|
pdf-parse: 1.1.1
|
||||||
|
pg: ^8.11.0
|
||||||
|
pg-copy-streams: ^6.0.5
|
||||||
|
pickleparser: ^0.2.1
|
||||||
|
playwright: ^1.32.1
|
||||||
|
portkey-ai: ^0.1.11
|
||||||
|
puppeteer: "*"
|
||||||
|
pyodide: ">=0.24.1 <0.27.0"
|
||||||
|
redis: "*"
|
||||||
|
replicate: "*"
|
||||||
|
sonix-speech-recognition: ^2.1.1
|
||||||
|
srt-parser-2: ^1.2.3
|
||||||
|
typeorm: ^0.3.20
|
||||||
|
typesense: ^1.5.3
|
||||||
|
usearch: ^1.1.1
|
||||||
|
voy-search: 0.6.2
|
||||||
|
weaviate-ts-client: "*"
|
||||||
|
web-auth-library: ^1.0.3
|
||||||
|
word-extractor: "*"
|
||||||
|
ws: ^8.14.2
|
||||||
|
youtubei.js: "*"
|
||||||
|
peerDependenciesMeta:
|
||||||
|
"@arcjet/redact":
|
||||||
|
optional: true
|
||||||
|
"@aws-crypto/sha256-js":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-bedrock-agent-runtime":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-bedrock-runtime":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-dynamodb":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-kendra":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-lambda":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-s3":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-sagemaker-runtime":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/client-sfn":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/credential-provider-node":
|
||||||
|
optional: true
|
||||||
|
"@aws-sdk/dsql-signer":
|
||||||
|
optional: true
|
||||||
|
"@azure/search-documents":
|
||||||
|
optional: true
|
||||||
|
"@azure/storage-blob":
|
||||||
|
optional: true
|
||||||
|
"@browserbasehq/sdk":
|
||||||
|
optional: true
|
||||||
|
"@clickhouse/client":
|
||||||
|
optional: true
|
||||||
|
"@cloudflare/ai":
|
||||||
|
optional: true
|
||||||
|
"@datastax/astra-db-ts":
|
||||||
|
optional: true
|
||||||
|
"@elastic/elasticsearch":
|
||||||
|
optional: true
|
||||||
|
"@getmetal/metal-sdk":
|
||||||
|
optional: true
|
||||||
|
"@getzep/zep-cloud":
|
||||||
|
optional: true
|
||||||
|
"@getzep/zep-js":
|
||||||
|
optional: true
|
||||||
|
"@gomomento/sdk":
|
||||||
|
optional: true
|
||||||
|
"@gomomento/sdk-core":
|
||||||
|
optional: true
|
||||||
|
"@google-ai/generativelanguage":
|
||||||
|
optional: true
|
||||||
|
"@google-cloud/storage":
|
||||||
|
optional: true
|
||||||
|
"@gradientai/nodejs-sdk":
|
||||||
|
optional: true
|
||||||
|
"@huggingface/inference":
|
||||||
|
optional: true
|
||||||
|
"@huggingface/transformers":
|
||||||
|
optional: true
|
||||||
|
"@lancedb/lancedb":
|
||||||
|
optional: true
|
||||||
|
"@layerup/layerup-security":
|
||||||
|
optional: true
|
||||||
|
"@libsql/client":
|
||||||
|
optional: true
|
||||||
|
"@mendable/firecrawl-js":
|
||||||
|
optional: true
|
||||||
|
"@mlc-ai/web-llm":
|
||||||
|
optional: true
|
||||||
|
"@mozilla/readability":
|
||||||
|
optional: true
|
||||||
|
"@neondatabase/serverless":
|
||||||
|
optional: true
|
||||||
|
"@notionhq/client":
|
||||||
|
optional: true
|
||||||
|
"@opensearch-project/opensearch":
|
||||||
|
optional: true
|
||||||
|
"@pinecone-database/pinecone":
|
||||||
|
optional: true
|
||||||
|
"@planetscale/database":
|
||||||
|
optional: true
|
||||||
|
"@premai/prem-sdk":
|
||||||
|
optional: true
|
||||||
|
"@qdrant/js-client-rest":
|
||||||
|
optional: true
|
||||||
|
"@raycast/api":
|
||||||
|
optional: true
|
||||||
|
"@rockset/client":
|
||||||
|
optional: true
|
||||||
|
"@smithy/eventstream-codec":
|
||||||
|
optional: true
|
||||||
|
"@smithy/protocol-http":
|
||||||
|
optional: true
|
||||||
|
"@smithy/signature-v4":
|
||||||
|
optional: true
|
||||||
|
"@smithy/util-utf8":
|
||||||
|
optional: true
|
||||||
|
"@spider-cloud/spider-client":
|
||||||
|
optional: true
|
||||||
|
"@supabase/supabase-js":
|
||||||
|
optional: true
|
||||||
|
"@tensorflow-models/universal-sentence-encoder":
|
||||||
|
optional: true
|
||||||
|
"@tensorflow/tfjs-converter":
|
||||||
|
optional: true
|
||||||
|
"@tensorflow/tfjs-core":
|
||||||
|
optional: true
|
||||||
|
"@upstash/ratelimit":
|
||||||
|
optional: true
|
||||||
|
"@upstash/redis":
|
||||||
|
optional: true
|
||||||
|
"@upstash/vector":
|
||||||
|
optional: true
|
||||||
|
"@vercel/kv":
|
||||||
|
optional: true
|
||||||
|
"@vercel/postgres":
|
||||||
|
optional: true
|
||||||
|
"@writerai/writer-sdk":
|
||||||
|
optional: true
|
||||||
|
"@xata.io/client":
|
||||||
|
optional: true
|
||||||
|
"@zilliz/milvus2-sdk-node":
|
||||||
|
optional: true
|
||||||
|
apify-client:
|
||||||
|
optional: true
|
||||||
|
assemblyai:
|
||||||
|
optional: true
|
||||||
|
better-sqlite3:
|
||||||
|
optional: true
|
||||||
|
cassandra-driver:
|
||||||
|
optional: true
|
||||||
|
cborg:
|
||||||
|
optional: true
|
||||||
|
cheerio:
|
||||||
|
optional: true
|
||||||
|
chromadb:
|
||||||
|
optional: true
|
||||||
|
closevector-common:
|
||||||
|
optional: true
|
||||||
|
closevector-node:
|
||||||
|
optional: true
|
||||||
|
closevector-web:
|
||||||
|
optional: true
|
||||||
|
cohere-ai:
|
||||||
|
optional: true
|
||||||
|
convex:
|
||||||
|
optional: true
|
||||||
|
crypto-js:
|
||||||
|
optional: true
|
||||||
|
d3-dsv:
|
||||||
|
optional: true
|
||||||
|
discord.js:
|
||||||
|
optional: true
|
||||||
|
dria:
|
||||||
|
optional: true
|
||||||
|
duck-duck-scrape:
|
||||||
|
optional: true
|
||||||
|
epub2:
|
||||||
|
optional: true
|
||||||
|
fast-xml-parser:
|
||||||
|
optional: true
|
||||||
|
firebase-admin:
|
||||||
|
optional: true
|
||||||
|
google-auth-library:
|
||||||
|
optional: true
|
||||||
|
googleapis:
|
||||||
|
optional: true
|
||||||
|
hnswlib-node:
|
||||||
|
optional: true
|
||||||
|
html-to-text:
|
||||||
|
optional: true
|
||||||
|
ignore:
|
||||||
|
optional: true
|
||||||
|
interface-datastore:
|
||||||
|
optional: true
|
||||||
|
ioredis:
|
||||||
|
optional: true
|
||||||
|
it-all:
|
||||||
|
optional: true
|
||||||
|
jsdom:
|
||||||
|
optional: true
|
||||||
|
jsonwebtoken:
|
||||||
|
optional: true
|
||||||
|
llmonitor:
|
||||||
|
optional: true
|
||||||
|
lodash:
|
||||||
|
optional: true
|
||||||
|
lunary:
|
||||||
|
optional: true
|
||||||
|
mammoth:
|
||||||
|
optional: true
|
||||||
|
mariadb:
|
||||||
|
optional: true
|
||||||
|
mongodb:
|
||||||
|
optional: true
|
||||||
|
mysql2:
|
||||||
|
optional: true
|
||||||
|
neo4j-driver:
|
||||||
|
optional: true
|
||||||
|
notion-to-md:
|
||||||
|
optional: true
|
||||||
|
officeparser:
|
||||||
|
optional: true
|
||||||
|
pdf-parse:
|
||||||
|
optional: true
|
||||||
|
pg:
|
||||||
|
optional: true
|
||||||
|
pg-copy-streams:
|
||||||
|
optional: true
|
||||||
|
pickleparser:
|
||||||
|
optional: true
|
||||||
|
playwright:
|
||||||
|
optional: true
|
||||||
|
portkey-ai:
|
||||||
|
optional: true
|
||||||
|
puppeteer:
|
||||||
|
optional: true
|
||||||
|
pyodide:
|
||||||
|
optional: true
|
||||||
|
redis:
|
||||||
|
optional: true
|
||||||
|
replicate:
|
||||||
|
optional: true
|
||||||
|
sonix-speech-recognition:
|
||||||
|
optional: true
|
||||||
|
srt-parser-2:
|
||||||
|
optional: true
|
||||||
|
typeorm:
|
||||||
|
optional: true
|
||||||
|
typesense:
|
||||||
|
optional: true
|
||||||
|
usearch:
|
||||||
|
optional: true
|
||||||
|
voy-search:
|
||||||
|
optional: true
|
||||||
|
weaviate-ts-client:
|
||||||
|
optional: true
|
||||||
|
web-auth-library:
|
||||||
|
optional: true
|
||||||
|
word-extractor:
|
||||||
|
optional: true
|
||||||
|
ws:
|
||||||
|
optional: true
|
||||||
|
youtubei.js:
|
||||||
|
optional: true
|
||||||
|
checksum: 10c0/7945ba936c1b18506ca8ca70449d41208c627cadf52782a9d41e54e395fdc86a4421c01fa4977b582f7eddf5458dd7c418f932016c558a058abea3442828b8dd
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@langchain/core@npm:^0.3.26":
|
"@langchain/core@npm:^0.3.26":
|
||||||
version: 0.3.42
|
version: 0.3.42
|
||||||
resolution: "@langchain/core@npm:0.3.42"
|
resolution: "@langchain/core@npm:0.3.42"
|
||||||
@ -1638,6 +2028,20 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@langchain/openai@npm:>=0.2.0 <0.5.0":
|
||||||
|
version: 0.4.7
|
||||||
|
resolution: "@langchain/openai@npm:0.4.7"
|
||||||
|
dependencies:
|
||||||
|
js-tiktoken: "npm:^1.0.12"
|
||||||
|
openai: "npm:^4.87.3"
|
||||||
|
zod: "npm:^3.22.4"
|
||||||
|
zod-to-json-schema: "npm:^3.22.3"
|
||||||
|
peerDependencies:
|
||||||
|
"@langchain/core": ">=0.3.39 <0.4.0"
|
||||||
|
checksum: 10c0/4c809100c1e039c8c786141f097764cc399699ca9b149861396b2339147ad8b7fec5c97e5365a546bb7c123c4ec1943cfe3ef2eb5f056d6ab5a3fd1dc35940bc
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@langchain/openai@patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch":
|
"@langchain/openai@patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch":
|
||||||
version: 0.3.16
|
version: 0.3.16
|
||||||
resolution: "@langchain/openai@patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch::version=0.3.16&hash=642f39"
|
resolution: "@langchain/openai@patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch::version=0.3.16&hash=642f39"
|
||||||
@ -2798,20 +3202,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/command-line-args@npm:^5.2.3":
|
|
||||||
version: 5.2.3
|
|
||||||
resolution: "@types/command-line-args@npm:5.2.3"
|
|
||||||
checksum: 10c0/3a9bc58fd26e546391f6369dd28c03d59349dc4ac39eada1a5c39cc3578e02e4aac222615170e0db79b198ffba2af84fdbdda46e08c6edc4da42bc17ea85200f
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@types/command-line-usage@npm:^5.0.4":
|
|
||||||
version: 5.0.4
|
|
||||||
resolution: "@types/command-line-usage@npm:5.0.4"
|
|
||||||
checksum: 10c0/67840ebf4bcfee200c07d978669ad596fe2adc350fd5c19d44ec2248623575d96ec917f513d1d59453f8f57e879133861a4cc41c20045c07f6c959f1fcaac7ad
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@types/d3-color@npm:*":
|
"@types/d3-color@npm:*":
|
||||||
version: 3.1.3
|
version: 3.1.3
|
||||||
resolution: "@types/d3-color@npm:3.1.3"
|
resolution: "@types/d3-color@npm:3.1.3"
|
||||||
@ -3421,6 +3811,7 @@ __metadata:
|
|||||||
"@google/generative-ai": "npm:^0.21.0"
|
"@google/generative-ai": "npm:^0.21.0"
|
||||||
"@hello-pangea/dnd": "npm:^16.6.0"
|
"@hello-pangea/dnd": "npm:^16.6.0"
|
||||||
"@kangfenmao/keyv-storage": "npm:^0.1.0"
|
"@kangfenmao/keyv-storage": "npm:^0.1.0"
|
||||||
|
"@langchain/community": "npm:^0.3.36"
|
||||||
"@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch"
|
"@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch"
|
||||||
"@llm-tools/embedjs-libsql": "npm:^0.1.28"
|
"@llm-tools/embedjs-libsql": "npm:^0.1.28"
|
||||||
"@llm-tools/embedjs-loader-csv": "npm:^0.1.28"
|
"@llm-tools/embedjs-loader-csv": "npm:^0.1.28"
|
||||||
@ -4091,6 +4482,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"binary-extensions@npm:^2.2.0":
|
||||||
|
version: 2.3.0
|
||||||
|
resolution: "binary-extensions@npm:2.3.0"
|
||||||
|
checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"bindings@npm:^1.5.0":
|
"bindings@npm:^1.5.0":
|
||||||
version: 1.5.0
|
version: 1.5.0
|
||||||
resolution: "bindings@npm:1.5.0"
|
resolution: "bindings@npm:1.5.0"
|
||||||
@ -6742,6 +7140,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"expr-eval@npm:^2.0.2":
|
||||||
|
version: 2.0.2
|
||||||
|
resolution: "expr-eval@npm:2.0.2"
|
||||||
|
checksum: 10c0/642f112ff28ea34574c595c3ad73ccd8e638498879a4dd28620c4dabebab2e11987a851266ba81883dae85a5800e0c93b3d06f81718b71a215f831534646e4f2
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"express-rate-limit@npm:^7.5.0":
|
"express-rate-limit@npm:^7.5.0":
|
||||||
version: 7.5.0
|
version: 7.5.0
|
||||||
resolution: "express-rate-limit@npm:7.5.0"
|
resolution: "express-rate-limit@npm:7.5.0"
|
||||||
@ -7095,6 +7500,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"flat@npm:^5.0.2":
|
||||||
|
version: 5.0.2
|
||||||
|
resolution: "flat@npm:5.0.2"
|
||||||
|
bin:
|
||||||
|
flat: cli.js
|
||||||
|
checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"flatted@npm:^3.2.9":
|
"flatted@npm:^3.2.9":
|
||||||
version: 3.3.3
|
version: 3.3.3
|
||||||
resolution: "flatted@npm:3.3.3"
|
resolution: "flatted@npm:3.3.3"
|
||||||
@ -9067,7 +9481,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"langchain@npm:^0.3.8":
|
"langchain@npm:>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0, langchain@npm:^0.3.8":
|
||||||
version: 0.3.19
|
version: 0.3.19
|
||||||
resolution: "langchain@npm:0.3.19"
|
resolution: "langchain@npm:0.3.19"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16029,6 +16443,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"zod-to-json-schema@npm:^3.22.5":
|
||||||
|
version: 3.24.5
|
||||||
|
resolution: "zod-to-json-schema@npm:3.24.5"
|
||||||
|
peerDependencies:
|
||||||
|
zod: ^3.24.1
|
||||||
|
checksum: 10c0/0745b94ba53e652d39f262641cdeb2f75d24339fb6076a38ce55bcf53d82dfaea63adf524ebc5f658681005401687f8e9551c4feca7c4c882e123e66091dfb90
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"zod-validation-error@npm:^3.4.0":
|
"zod-validation-error@npm:^3.4.0":
|
||||||
version: 3.4.0
|
version: 3.4.0
|
||||||
resolution: "zod-validation-error@npm:3.4.0"
|
resolution: "zod-validation-error@npm:3.4.0"
|
||||||
@ -16038,7 +16461,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"zod@npm:^3.22.4, zod@npm:^3.23.8":
|
"zod@npm:^3.22.3, zod@npm:^3.22.4, zod@npm:^3.23.8":
|
||||||
version: 3.24.2
|
version: 3.24.2
|
||||||
resolution: "zod@npm:3.24.2"
|
resolution: "zod@npm:3.24.2"
|
||||||
checksum: 10c0/c638c7220150847f13ad90635b3e7d0321b36cce36f3fc6050ed960689594c949c326dfe2c6fa87c14b126ee5d370ccdebd6efb304f41ef5557a4aaca2824565
|
checksum: 10c0/c638c7220150847f13ad90635b3e7d0321b36cce36f3fc6050ed960689594c949c326dfe2c6fa87c14b126ee5d370ccdebd6efb304f41ef5557a4aaca2824565
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user