feat(knowledge): support Voyage AI (#3810)

* feat(knowledge): support Voyage AI

* chore
This commit is contained in:
Chen Tao 2025-03-23 19:22:39 +08:00 committed by kangfenmao
parent 32b8fa7e63
commit ae8869e1b6
22 changed files with 765 additions and 52 deletions

View File

@ -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",

View 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)
}
}

View 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 }
})
}
}

View 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)
}
}

View File

@ -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)
} }

View 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}`)
}
}
}

View File

@ -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> => {

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -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
} }
] ]

View File

@ -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 = [

View File

@ -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'
}
} }
} }

View File

@ -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?",

View File

@ -678,7 +678,8 @@
"xirang": "天翼クラウド 息壤", "xirang": "天翼クラウド 息壤",
"yi": "零一万物", "yi": "零一万物",
"zhinao": "360智脳", "zhinao": "360智脳",
"zhipu": "智譜AI" "zhipu": "智譜AI",
"voyageai": "Voyage AI"
}, },
"restore": { "restore": {
"confirm": "データを復元しますか?", "confirm": "データを復元しますか?",

View File

@ -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": "Вы уверены, что хотите восстановить данные?",

View File

@ -678,7 +678,8 @@
"xirang": "天翼云息壤", "xirang": "天翼云息壤",
"yi": "零一万物", "yi": "零一万物",
"zhinao": "360智脑", "zhinao": "360智脑",
"zhipu": "智谱AI" "zhipu": "智谱AI",
"voyageai":"Voyage AI"
}, },
"restore": { "restore": {
"confirm": "确定要恢复数据吗?", "confirm": "确定要恢复数据吗?",

View File

@ -678,7 +678,8 @@
"xirang": "天翼雲息壤", "xirang": "天翼雲息壤",
"yi": "零一萬物", "yi": "零一萬物",
"zhinao": "360 智腦", "zhinao": "360 智腦",
"zhipu": "智譜 AI" "zhipu": "智譜 AI",
"voyageai": "Voyage AI"
}, },
"restore": { "restore": {
"confirm": "確定要復原資料嗎?", "confirm": "確定要復原資料嗎?",

View File

@ -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}>

View File

@ -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
}, },

View File

@ -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
} }
] ]

View File

@ -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
View File

@ -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