refactor: knowledge base database engine

This commit is contained in:
kangfenmao 2024-12-25 17:31:11 +08:00
parent b85765915e
commit 34ebab0af8
31 changed files with 614 additions and 383 deletions

View File

@ -49,7 +49,7 @@ jobs:
- name: Build Linux - name: Build Linux
if: matrix.os == 'ubuntu-latest' if: matrix.os == 'ubuntu-latest'
run: | run: |
yarn download:npm linux yarn build:npm linux
yarn build:linux yarn build:linux
env: env:
@ -58,7 +58,7 @@ jobs:
- name: Build Mac - name: Build Mac
if: matrix.os == 'macos-latest' if: matrix.os == 'macos-latest'
run: | run: |
yarn download:npm darwin yarn build:npm mac
yarn build:mac yarn build:mac
env: env:
CSC_LINK: ${{ secrets.CSC_LINK }} CSC_LINK: ${{ secrets.CSC_LINK }}

View File

@ -1,25 +0,0 @@
diff --git a/src/libsql-db.js b/src/libsql-db.js
index 58c42e4910bd0e53bc497ff9b9702b1f7a961266..c02351dc95ba36fc4db97ddfb69206539fb4de1c 100644
--- a/src/libsql-db.js
+++ b/src/libsql-db.js
@@ -41,9 +41,9 @@ export class LibSqlDb {
}
async similaritySearch(query, k) {
const statement = `SELECT id, pageContent, uniqueLoaderId, source, metadata,
- vector_distance_cos(vector, vector32('[${query.join(',')}]'))
+ vector_distance_cos(vector, vector32('[${query.join(',')}]')) as distance
FROM ${this.tableName}
- ORDER BY vector_distance_cos(vector, vector32('[${query.join(',')}]')) ASC
+ ORDER BY distance DESC
LIMIT ${k};`;
this.debug(`Executing statement - ${truncateCenterString(statement, 700)}`);
const results = await this.client.execute(statement);
@@ -52,7 +52,7 @@ export class LibSqlDb {
return {
metadata,
pageContent: result.pageContent.toString(),
- score: 1,
+ score: 1 - result.distance,
};
});
}

View File

@ -0,0 +1,17 @@
diff --git a/src/core/rag-embedding.js b/src/core/rag-embedding.js
index 50c3c4064af17bc4c7c46554d8f2419b3afceb0e..632c9b2e04d2e0e3bb09ef1cd8f29d2560e6afc1 100644
--- a/src/core/rag-embedding.js
+++ b/src/core/rag-embedding.js
@@ -1,10 +1,8 @@
export class RAGEmbedding {
static singleton;
static async init(embeddingModel) {
- if (!this.singleton) {
- await embeddingModel.init();
- this.singleton = new RAGEmbedding(embeddingModel);
- }
+ await embeddingModel.init();
+ this.singleton = new RAGEmbedding(embeddingModel);
}
static getInstance() {
return RAGEmbedding.singleton;

View File

@ -20,7 +20,7 @@ export default defineConfig({
'@llm-tools/embedjs-loader-xml', '@llm-tools/embedjs-loader-xml',
'@llm-tools/embedjs-loader-pdf', '@llm-tools/embedjs-loader-pdf',
'@llm-tools/embedjs-loader-sitemap', '@llm-tools/embedjs-loader-sitemap',
'@llm-tools/embedjs-libsql' '@llm-tools/embedjs-lancedb'
] ]
}), }),
...visualizerPlugin('main') ...visualizerPlugin('main')
@ -34,9 +34,8 @@ export default defineConfig({
}, },
build: { build: {
rollupOptions: { rollupOptions: {
external: ['@libsql/client'] external: ['@lancedb/lancedb']
}, }
minify: true
} }
}, },
preload: { preload: {
@ -51,10 +50,7 @@ export default defineConfig({
} }
}, },
optimizeDeps: { optimizeDeps: {
exclude: ['chunk-7UIZINC5.js', 'chunk-7OJJKI46.js'] exclude: []
},
build: {
minify: true
} }
} }
}) })

View File

@ -25,7 +25,6 @@
"typecheck": "npm run typecheck:node && npm run typecheck:web", "typecheck": "npm run typecheck:node && npm run typecheck:web",
"start": "electron-vite preview", "start": "electron-vite preview",
"dev": "electron-vite dev", "dev": "electron-vite dev",
"download:npm": "node scripts/download-npm.js",
"build": "npm run typecheck && electron-vite build", "build": "npm run typecheck && electron-vite build",
"postinstall": "electron-builder install-app-deps", "postinstall": "electron-builder install-app-deps",
"build:unpack": "dotenv npm run build && electron-builder --dir", "build:unpack": "dotenv npm run build && electron-builder --dir",
@ -37,6 +36,7 @@
"build:linux": "dotenv electron-vite build && electron-builder --linux", "build:linux": "dotenv electron-vite build && electron-builder --linux",
"build:linux:arm64": "dotenv electron-vite build && electron-builder --linux --arm64", "build:linux:arm64": "dotenv electron-vite build && electron-builder --linux --arm64",
"build:linux:x64": "dotenv electron-vite build && electron-builder --linux --x64", "build:linux:x64": "dotenv electron-vite build && electron-builder --linux --x64",
"build:npm": "node scripts/build-npm.js",
"release": "node scripts/version.js", "release": "node scripts/version.js",
"publish": "yarn release patch push", "publish": "yarn release patch push",
"pulish:artifacts": "cd packages/artifacts && npm publish && cd -", "pulish:artifacts": "cd packages/artifacts && npm publish && cd -",
@ -49,8 +49,8 @@
"@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/utils": "^3.0.0", "@electron-toolkit/utils": "^3.0.0",
"@electron/notarize": "^2.5.0", "@electron/notarize": "^2.5.0",
"@llm-tools/embedjs": "^0.1.25", "@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.25#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.25-ec5645cf36.patch",
"@llm-tools/embedjs-libsql": "patch:@llm-tools/embedjs-libsql@npm%3A0.1.25#~/.yarn/patches/@llm-tools-embedjs-libsql-npm-0.1.25-fad000d74c.patch", "@llm-tools/embedjs-lancedb": "^0.1.25",
"@llm-tools/embedjs-loader-csv": "^0.1.25", "@llm-tools/embedjs-loader-csv": "^0.1.25",
"@llm-tools/embedjs-loader-markdown": "^0.1.25", "@llm-tools/embedjs-loader-markdown": "^0.1.25",
"@llm-tools/embedjs-loader-msoffice": "^0.1.25", "@llm-tools/embedjs-loader-msoffice": "^0.1.25",
@ -61,6 +61,7 @@
"@llm-tools/embedjs-openai": "^0.1.25", "@llm-tools/embedjs-openai": "^0.1.25",
"@types/react-infinite-scroll-component": "^5.0.0", "@types/react-infinite-scroll-component": "^5.0.0",
"adm-zip": "^0.5.16", "adm-zip": "^0.5.16",
"apache-arrow": "^18.1.0",
"docx": "^9.0.2", "docx": "^9.0.2",
"electron-log": "^5.1.5", "electron-log": "^5.1.5",
"electron-store": "^8.2.0", "electron-store": "^8.2.0",

View File

@ -9,29 +9,34 @@ exports.default = async function (context) {
const arch = context.arch const arch = context.arch
if (platform === 'mac') { if (platform === 'mac') {
const nodeModulesPath = path.join( const node_modules_path = path.join(
context.appOutDir, context.appOutDir,
'Cherry Studio.app', 'Cherry Studio.app',
'Contents', 'Contents',
'Resources', 'Resources',
'app.asar.unpacked', 'app.asar.unpacked',
'node_modules', 'node_modules'
'@libsql'
) )
keepLibsqlNodeModules(nodeModulesPath, arch === Arch.arm64 ? ['darwin-arm64'] : ['darwin-x64']) removeDifferentArchNodeFiles(
node_modules_path,
'@lancedb',
arch === Arch.arm64 ? ['lancedb-darwin-arm64'] : ['lancedb-darwin-x64']
)
} }
if (platform === 'linux') { if (platform === 'linux') {
const nodeModulesPath = path.join(context.appOutDir, 'resources', 'app.asar.unpacked', 'node_modules', '@libsql') const node_modules_path = path.join(context.appOutDir, 'resources', 'app.asar.unpacked', 'node_modules')
keepLibsqlNodeModules( const _arch =
nodeModulesPath, arch === Arch.arm64
arch === Arch.arm64 ? ['linux-arm64-gnu', 'linux-arm64-musl'] : ['linux-x64-gnu', 'linux-x64-musl'] ? ['lancedb-linux-arm64-gnu', 'lancedb-linux-arm64-musl']
) : ['lancedb-linux-x64-gnu', 'lancedb-linux-x64-musl']
removeDifferentArchNodeFiles(node_modules_path, '@lancedb', _arch)
} }
} }
function keepLibsqlNodeModules(modulePath, arch) { function removeDifferentArchNodeFiles(nodeModulesPath, packageName, arch) {
const modulePath = path.join(nodeModulesPath, packageName)
const dirs = fs.readdirSync(modulePath) const dirs = fs.readdirSync(modulePath)
dirs dirs
.filter((dir) => !arch.includes(dir)) .filter((dir) => !arch.includes(dir))

28
scripts/build-npm.js Normal file
View File

@ -0,0 +1,28 @@
const { downloadNpmPackage } = require('./utils')
async function downloadNpm(platform) {
if (!platform || platform === 'mac') {
downloadNpmPackage(
'@lancedb/lancedb-darwin-arm64',
'https://registry.npmjs.org/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.14.0.tgz'
)
downloadNpmPackage(
'@lancedb/lancedb-darwin-x64',
'https://registry.npmjs.org/@lancedb/lancedb-darwin-x64/-/lancedb-darwin-x64-0.14.0.tgz'
)
}
if (!platform || platform === 'linux') {
downloadNpmPackage(
'@lancedb/lancedb-linux-arm64-gnu',
'https://registry.npmjs.org/@lancedb/lancedb-linux-arm64-gnu/-/lancedb-linux-arm64-gnu-0.14.0.tgz'
)
downloadNpmPackage(
'@lancedb/lancedb-linux-x64-gnu',
'https://registry.npmjs.org/@lancedb/lancedb-linux-x64-gnu/-/lancedb-linux-x64-gnu-0.14.0.tgz'
)
}
}
const platformArg = process.argv[2]
downloadNpm(platformArg)

View File

@ -1,14 +0,0 @@
const { downloadNpmPackage } = require('./utils')
async function downloadNpm(platform) {
if (!platform || platform === 'darwin') {
downloadNpmPackage('@libsql', '0.4.7', 'darwin', ['arm64', 'x64'])
}
if (!platform || platform === 'linux') {
downloadNpmPackage('@libsql', '0.4.7', 'linux', ['arm64-gnu', 'x64-gnu'])
}
}
const platformArg = process.argv[2]
downloadNpm(platformArg)

View File

@ -2,23 +2,20 @@ const fs = require('fs')
const path = require('path') const path = require('path')
const os = require('os') const os = require('os')
function downloadNpmPackage(package, version, platform, architectures = ['x64', 'arm64']) { function downloadNpmPackage(packageName, url) {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'npm-download-')) const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'npm-download-'))
for (const arch of architectures) { const targetDir = path.join('./node_modules/', packageName)
const targetDir = path.join('./node_modules/', package, `${platform}-${arch}`) const filename = packageName.replace('/', '-') + '.tgz'
// Skip if directory already exists // Skip if directory already exists
if (fs.existsSync(targetDir)) { if (fs.existsSync(targetDir)) {
console.log(`${targetDir} already exists, skipping download...`) console.log(`${targetDir} already exists, skipping download...`)
continue return
} }
const filename = path.join(tempDir, `${platform}-${arch}-${version}.tgz`)
const url = `https://registry.npmjs.org/${package}/${platform}-${arch}/-/${platform}-${arch}-${version}.tgz`
try { try {
console.log(`Downloading ${filename}...`, url) console.log(`Downloading ${packageName}...`, url)
const { execSync } = require('child_process') const { execSync } = require('child_process')
execSync(`curl --fail -o ${filename} ${url}`) execSync(`curl --fail -o ${filename} ${url}`)
@ -27,13 +24,12 @@ function downloadNpmPackage(package, version, platform, architectures = ['x64',
execSync(`rm -rf ${filename}`) execSync(`rm -rf ${filename}`)
execSync(`mv package ${targetDir}`) execSync(`mv package ${targetDir}`)
} catch (error) { } catch (error) {
console.error(`Error processing ${filename}: ${error.message}`) console.error(`Error processing ${packageName}: ${error.message}`)
if (fs.existsSync(filename)) { if (fs.existsSync(filename)) {
fs.unlinkSync(filename) fs.unlinkSync(filename)
} }
throw error throw error
} }
}
fs.rmSync(tempDir, { recursive: true, force: true }) fs.rmSync(tempDir, { recursive: true, force: true })
} }

View File

@ -56,8 +56,6 @@ class FileStorage {
const storedFilePath = path.join(this.storageDir, file) const storedFilePath = path.join(this.storageDir, file)
const storedStats = fs.statSync(storedFilePath) const storedStats = fs.statSync(storedFilePath)
console.debug('storedFilePath', storedFilePath)
if (storedStats.size === fileSize) { if (storedStats.size === fileSize) {
const [originalHash, storedHash] = await Promise.all([ const [originalHash, storedHash] = await Promise.all([
this.getFileHash(filePath), this.getFileHash(filePath),

View File

@ -3,7 +3,7 @@ import path from 'node:path'
import { LocalPathLoader, RAGApplication, RAGApplicationBuilder, TextLoader } from '@llm-tools/embedjs' import { LocalPathLoader, RAGApplication, RAGApplicationBuilder, TextLoader } from '@llm-tools/embedjs'
import { AddLoaderReturn, ExtractChunkData } from '@llm-tools/embedjs-interfaces' import { AddLoaderReturn, ExtractChunkData } from '@llm-tools/embedjs-interfaces'
import { LibSqlDb } from '@llm-tools/embedjs-libsql' import { LanceDb } from '@llm-tools/embedjs-lancedb'
import { MarkdownLoader } from '@llm-tools/embedjs-loader-markdown' import { MarkdownLoader } from '@llm-tools/embedjs-loader-markdown'
import { DocxLoader, ExcelLoader, PptLoader } from '@llm-tools/embedjs-loader-msoffice' import { DocxLoader, ExcelLoader, PptLoader } from '@llm-tools/embedjs-loader-msoffice'
import { PdfLoader } from '@llm-tools/embedjs-loader-pdf' import { PdfLoader } from '@llm-tools/embedjs-loader-pdf'
@ -26,8 +26,13 @@ class KnowledgeService {
} }
} }
private getRagApplication = async ({ id, model, apiKey, baseURL }: KnowledgeBaseParams): Promise<RAGApplication> => { private getRagApplication = async ({
console.debug('getRagApplication', path.join(this.storageDir, id)) id,
model,
apiKey,
baseURL,
dimensions
}: KnowledgeBaseParams): Promise<RAGApplication> => {
return new RAGApplicationBuilder() return new RAGApplicationBuilder()
.setModel('NO_MODEL') .setModel('NO_MODEL')
.setEmbeddingModel( .setEmbeddingModel(
@ -35,19 +40,16 @@ class KnowledgeService {
model, model,
apiKey, apiKey,
configuration: { baseURL }, configuration: { baseURL },
dimensions: 1024, dimensions,
batchSize: 10 batchSize: 20
}) })
) )
.setVectorDatabase(new LibSqlDb({ path: path.join(this.storageDir, id) })) .setVectorDatabase(new LanceDb({ path: path.join(this.storageDir, id) }))
.build() .build()
} }
public create = async ( public create = async (_: Electron.IpcMainInvokeEvent, base: KnowledgeBaseParams): Promise<void> => {
_: Electron.IpcMainInvokeEvent, this.getRagApplication(base)
{ id, model, apiKey, baseURL }: KnowledgeBaseParams
): Promise<void> => {
this.getRagApplication({ id, model, apiKey, baseURL })
} }
public reset = async (_: Electron.IpcMainInvokeEvent, { base }: { base: KnowledgeBaseParams }): Promise<void> => { public reset = async (_: Electron.IpcMainInvokeEvent, { base }: { base: KnowledgeBaseParams }): Promise<void> => {

View File

@ -5,15 +5,20 @@ interface ListItemProps {
active?: boolean active?: boolean
icon?: ReactNode icon?: ReactNode
title: string title: string
subtitle?: string
onClick?: () => void onClick?: () => void
} }
const ListItem = ({ active, icon, title, onClick }: ListItemProps) => { const ListItem = ({ active, icon, title, subtitle, onClick }: ListItemProps) => {
const borderRadius = subtitle ? '10px' : '16px'
return ( return (
<ListItemContainer className={active ? 'active' : ''} onClick={onClick}> <ListItemContainer className={active ? 'active' : ''} onClick={onClick} style={{ borderRadius }}>
<ListItemContent> <ListItemContent>
{icon && <span style={{ marginRight: '8px' }}>{icon}</span>} {icon && <IconWrapper>{icon}</IconWrapper>}
{title} <TextContainer>
<TitleText>{title}</TitleText>
{subtitle && <SubtitleText>{subtitle}</SubtitleText>}
</TextContainer>
</ListItemContent> </ListItemContent>
</ListItemContainer> </ListItemContainer>
) )
@ -42,11 +47,38 @@ const ListItemContainer = styled.div`
` `
const ListItemContent = styled.div` const ListItemContent = styled.div`
display: -webkit-box; display: flex;
-webkit-line-clamp: 1; align-items: center;
-webkit-box-orient: vertical; gap: 8px;
overflow: hidden; overflow: hidden;
font-size: 13px; font-size: 13px;
` `
const IconWrapper = styled.span`
margin-right: 8px;
`
const TextContainer = styled.div`
display: flex;
flex-direction: column;
overflow: hidden;
`
const TitleText = styled.div`
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
`
const SubtitleText = styled.div`
font-size: 10px;
color: var(--color-text-soft);
margin-top: 2px;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
color: var(--color-text-3);
`
export default ListItem export default ListItem

View File

@ -14,7 +14,7 @@ interface PromptPopupShowParams {
} }
interface Props extends PromptPopupShowParams { interface Props extends PromptPopupShowParams {
resolve: (value: string) => void resolve: (value: any) => void
} }
const PromptPopupContainer: React.FC<Props> = ({ const PromptPopupContainer: React.FC<Props> = ({
@ -30,18 +30,21 @@ const PromptPopupContainer: React.FC<Props> = ({
const onOk = () => { const onOk = () => {
setOpen(false) setOpen(false)
resolve(value)
} }
const handleCancel = () => { const onCancel = () => {
setOpen(false) setOpen(false)
} }
const onClose = () => { const onClose = () => {
resolve(value) resolve(null)
} }
PromptPopup.hide = onCancel
return ( return (
<Modal title={title} open={open} onOk={onOk} onCancel={handleCancel} afterClose={onClose} centered> <Modal title={title} open={open} onOk={onOk} onCancel={onCancel} afterClose={onClose} centered>
<Box mb={8}>{message}</Box> <Box mb={8}>{message}</Box>
<Input.TextArea <Input.TextArea
placeholder={inputPlaceholder} placeholder={inputPlaceholder}
@ -57,10 +60,12 @@ const PromptPopupContainer: React.FC<Props> = ({
) )
} }
const TopViewKey = 'PromptPopup'
export default class PromptPopup { export default class PromptPopup {
static topviewId = 0 static topviewId = 0
static hide() { static hide() {
TopView.hide('PromptPopup') TopView.hide(TopViewKey)
} }
static show(props: PromptPopupShowParams) { static show(props: PromptPopupShowParams) {
return new Promise<string>((resolve) => { return new Promise<string>((resolve) => {
@ -69,7 +74,7 @@ export default class PromptPopup {
{...props} {...props}
resolve={(v) => { resolve={(v) => {
resolve(v) resolve(v)
this.hide() TopView.hide(TopViewKey)
}} }}
/>, />,
'PromptPopup' 'PromptPopup'

View File

@ -50,23 +50,12 @@ export const SUMMARIZE_PROMPT =
export const TRANSLATE_PROMPT = export const TRANSLATE_PROMPT =
'You are a translation expert. Translate from input language to {{target_language}}, provide the translation result directly without any explanation and keep original format. Do not translate if the target language is the same as the source language.' 'You are a translation expert. Translate from input language to {{target_language}}, provide the translation result directly without any explanation and keep original format. Do not translate if the target language is the same as the source language.'
export const REFERENCE_PROMPT = `请根据参考资料回答问题,并使用脚注格式引用数据来源。参考资料可能和问题无关,请忽略无关的参考资料。 export const REFERENCE_PROMPT = `请根据参考资料回答问题,并使用脚注格式引用数据来源。请忽略无关的参考资料。
## ##
1. ****使 [^] [^1] 1. ****使 [^] [^1]
2. ****使 [^]: 2. ****使 [^]:
##
1. type file [^1]: [__name__](http://file/__url__)
2. type directory [^1]: [__name__](http://file/__url__)
3. type url,sitemap [^1]: [__name__](__url__)
4. type note [^1]: __note__
__url__ url
__name__ url
__note__ content
## ##

View File

@ -248,7 +248,8 @@
"upgrade.success.content": "Please restart the application to complete the upgrade", "upgrade.success.content": "Please restart the application to complete the upgrade",
"upgrade.success.title": "Upgrade successfully", "upgrade.success.title": "Upgrade successfully",
"regenerate.confirm": "Regenerating will replace current message", "regenerate.confirm": "Regenerating will replace current message",
"copy.success": "Copied!" "copy.success": "Copied!",
"get_embedding_dimensions": "Failed to get embedding dimensions"
}, },
"minapp": { "minapp": {
"title": "MinApp" "title": "MinApp"
@ -559,7 +560,9 @@
"sitemap_placeholder": "Enter Website Map URL", "sitemap_placeholder": "Enter Website Map URL",
"directories": "Directories", "directories": "Directories",
"add_directory": "Add Directory", "add_directory": "Add Directory",
"directory_placeholder": "Enter Directory Path" "directory_placeholder": "Enter Directory Path",
"model_info": "Model Info",
"not_support": "Knowledge base database engine updated, the knowledge base will no longer be supported, please create a new knowledge base"
}, },
"models": { "models": {
"pinned": "Pinned", "pinned": "Pinned",
@ -577,7 +580,8 @@
"free": "Free", "free": "Free",
"embedding": "Embedding", "embedding": "Embedding",
"embedding_model": "Embedding Model", "embedding_model": "Embedding Model",
"embedding_model_tooltip": "Add in Settings->Model Provider->Manage" "embedding_model_tooltip": "Add in Settings->Model Provider->Manage",
"dimensions": "Dimensions {{dimensions}}"
} }
} }
} }

View File

@ -248,7 +248,8 @@
"upgrade.success.content": "Пожалуйста, перезапустите приложение для завершения обновления", "upgrade.success.content": "Пожалуйста, перезапустите приложение для завершения обновления",
"upgrade.success.title": "Обновление успешно", "upgrade.success.title": "Обновление успешно",
"regenerate.confirm": "Перегенерация заменит текущее сообщение", "regenerate.confirm": "Перегенерация заменит текущее сообщение",
"copy.success": "Скопировано!" "copy.success": "Скопировано!",
"get_embedding_dimensions": "Не удалось получить размерность встраивания"
}, },
"minapp": { "minapp": {
"title": "Встроенные приложения" "title": "Встроенные приложения"
@ -559,7 +560,9 @@
"sitemap_placeholder": "Введите URL карты сайта", "sitemap_placeholder": "Введите URL карты сайта",
"directories": "Директории", "directories": "Директории",
"add_directory": "Добавить директорию", "add_directory": "Добавить директорию",
"directory_placeholder": "Введите путь к директории" "directory_placeholder": "Введите путь к директории",
"model_info": "Модель информации",
"not_support": "База знаний базы данных движок обновлен, база знаний больше не поддерживается, пожалуйста, создайте новую базу знаний"
}, },
"models": { "models": {
"pinned": "Закреплено", "pinned": "Закреплено",
@ -577,7 +580,8 @@
"free": "Бесплатные модели", "free": "Бесплатные модели",
"embedding": "Встраиваемые модели", "embedding": "Встраиваемые модели",
"embedding_model": "Встраиваемые модели", "embedding_model": "Встраиваемые модели",
"embedding_model_tooltip": "Добавьте в настройки->модель сервиса->управление" "embedding_model_tooltip": "Добавьте в настройки->модель сервиса->управление",
"dimensions": "{{dimensions}} мер"
} }
} }
} }

View File

@ -249,7 +249,8 @@
"upgrade.success.content": "重启用以完成升级", "upgrade.success.content": "重启用以完成升级",
"upgrade.success.title": "升级成功", "upgrade.success.title": "升级成功",
"regenerate.confirm": "重新生成会覆盖当前消息", "regenerate.confirm": "重新生成会覆盖当前消息",
"copy.success": "复制成功" "copy.success": "复制成功",
"get_embedding_dimensions": "获取嵌入维度失败"
}, },
"minapp": { "minapp": {
"title": "小程序" "title": "小程序"
@ -548,7 +549,9 @@
"sitemap_placeholder": "请输入站点地图 URL", "sitemap_placeholder": "请输入站点地图 URL",
"directories": "目录", "directories": "目录",
"add_directory": "添加目录", "add_directory": "添加目录",
"directory_placeholder": "请输入目录路径" "directory_placeholder": "请输入目录路径",
"model_info": "模型信息",
"not_support": "知识库数据库引擎已更新,该知识库将不再支持,请重新创建知识库"
}, },
"models": { "models": {
"pinned": "已固定", "pinned": "已固定",
@ -566,7 +569,8 @@
"free": "免费模型", "free": "免费模型",
"embedding": "嵌入模型", "embedding": "嵌入模型",
"embedding_model": "嵌入模型", "embedding_model": "嵌入模型",
"embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加" "embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加",
"dimensions": "{{dimensions}} 维"
} }
} }
} }

View File

@ -248,7 +248,8 @@
"upgrade.success.content": "請重新啟動應用以完成升級", "upgrade.success.content": "請重新啟動應用以完成升級",
"upgrade.success.title": "升級成功", "upgrade.success.title": "升級成功",
"regenerate.confirm": "重新生成會覆蓋當前訊息", "regenerate.confirm": "重新生成會覆蓋當前訊息",
"copy.success": "複製成功" "copy.success": "複製成功",
"get_embedding_dimensions": "獲取嵌入維度失敗"
}, },
"minapp": { "minapp": {
"title": "小程序" "title": "小程序"
@ -547,7 +548,9 @@
"sitemap_placeholder": "請輸入網站地圖 URL", "sitemap_placeholder": "請輸入網站地圖 URL",
"directories": "目錄", "directories": "目錄",
"add_directory": "添加目錄", "add_directory": "添加目錄",
"directory_placeholder": "請輸入目錄路徑" "directory_placeholder": "請輸入目錄路徑",
"model_info": "模型信息",
"not_support": "知識庫數據庫引擎已更新,該知識庫將不再支持,請重新創建知識庫"
}, },
"models": { "models": {
"pinned": "已固定", "pinned": "已固定",
@ -565,7 +568,8 @@
"free": "免費模型", "free": "免費模型",
"embedding": "嵌入模型", "embedding": "嵌入模型",
"embedding_model": "嵌入模型", "embedding_model": "嵌入模型",
"embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加" "embedding_model_tooltip": "在设置->模型服务中点击管理按钮添加",
"dimensions": "{{dimensions}} 維"
} }
} }
} }

View File

@ -14,7 +14,7 @@ import Scrollbar from '@renderer/components/Scrollbar'
import { useKnowledge } from '@renderer/hooks/useKnowledge' import { useKnowledge } from '@renderer/hooks/useKnowledge'
import FileManager from '@renderer/services/FileManager' import FileManager from '@renderer/services/FileManager'
import { FileType, FileTypes, KnowledgeBase } from '@renderer/types' import { FileType, FileTypes, KnowledgeBase } from '@renderer/types'
import { Button, Card, message, Typography, Upload } from 'antd' import { Alert, Button, Card, Divider, message, Tag, Typography, Upload } from 'antd'
import { FC } from 'react' import { FC } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
@ -177,6 +177,9 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
return ( return (
<MainContent> <MainContent>
{!base.dimensions && (
<Alert message={t('knowledge_base.not_support')} type="error" style={{ marginBottom: 20 }} showIcon />
)}
<FileSection> <FileSection>
<TitleWrapper> <TitleWrapper>
<Title level={5}>{t('files.title')}</Title> <Title level={5}>{t('files.title')}</Title>
@ -323,6 +326,15 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
</FlexColumn> </FlexColumn>
</ContentSection> </ContentSection>
<Divider style={{ margin: '10px 0' }} />
<ModelInfo>
<label htmlFor="model-info">{t('knowledge_base.model_info')}</label>
<Tag color="blue">{base.model.name}</Tag>
<Tag color="cyan">{t('models.dimensions', { dimensions: base.dimensions || 0 })}</Tag>
<Tag color="purple">{base.model.provider}</Tag>
</ModelInfo>
<IndexSection> <IndexSection>
<Button type="primary" onClick={() => KnowledgeSearchPopup.show({ base })} icon={<SearchOutlined />}> <Button type="primary" onClick={() => KnowledgeSearchPopup.show({ base })} icon={<SearchOutlined />}>
{t('knowledge_base.search')} {t('knowledge_base.search')}
@ -340,6 +352,7 @@ const MainContent = styled(Scrollbar)`
flex-direction: column; flex-direction: column;
padding-bottom: 50px; padding-bottom: 50px;
padding: 15px; padding: 15px;
position: relative;
` `
const FileSection = styled.div` const FileSection = styled.div`
@ -416,4 +429,15 @@ const IndexSection = styled.div`
justify-content: center; justify-content: center;
` `
const ModelInfo = styled.div`
display: flex;
align-items: center;
padding: 5px;
color: var(--color-text-3);
label {
margin-right: 8px;
color: var(--color-text-2);
}
`
export default KnowledgeContent export default KnowledgeContent

View File

@ -7,7 +7,7 @@ import Scrollbar from '@renderer/components/Scrollbar'
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge' import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
import { KnowledgeBase } from '@renderer/types' import { KnowledgeBase } from '@renderer/types'
import { Dropdown, Empty, MenuProps } from 'antd' import { Dropdown, Empty, MenuProps } from 'antd'
import { FC, useCallback, useEffect, useState } from 'react' import { FC, useCallback, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
@ -19,6 +19,7 @@ const KnowledgePage: FC = () => {
const { bases, renameKnowledgeBase, deleteKnowledgeBase, updateKnowledgeBases } = useKnowledgeBases() const { bases, renameKnowledgeBase, deleteKnowledgeBase, updateKnowledgeBases } = useKnowledgeBases()
const [selectedBase, setSelectedBase] = useState<KnowledgeBase>() const [selectedBase, setSelectedBase] = useState<KnowledgeBase>()
const [isDragging, setIsDragging] = useState(false) const [isDragging, setIsDragging] = useState(false)
const prevLength = useRef(0)
const handleAddKnowledge = async () => { const handleAddKnowledge = async () => {
await AddKnowledgePopup.show({ title: t('knowledge_base.add.title') }) await AddKnowledgePopup.show({ title: t('knowledge_base.add.title') })
@ -35,6 +36,14 @@ const KnowledgePage: FC = () => {
} }
}, [bases, selectedBase]) }, [bases, selectedBase])
useEffect(() => {
const currentLength = bases.length
if (currentLength > 0 && currentLength > prevLength.current) {
setSelectedBase(bases[currentLength - 1])
}
prevLength.current = currentLength
}, [bases])
const getMenuItems = useCallback( const getMenuItems = useCallback(
(base: KnowledgeBase) => { (base: KnowledgeBase) => {
const menus: MenuProps['items'] = [ const menus: MenuProps['items'] = [
@ -90,7 +99,7 @@ const KnowledgePage: FC = () => {
style={{ marginBottom: 0, paddingBottom: isDragging ? 50 : 0 }} style={{ marginBottom: 0, paddingBottom: isDragging ? 50 : 0 }}
onDragStart={() => setIsDragging(true)} onDragStart={() => setIsDragging(true)}
onDragEnd={() => setIsDragging(false)}> onDragEnd={() => setIsDragging(false)}>
{(base) => ( {(base: KnowledgeBase) => (
<Dropdown menu={{ items: getMenuItems(base) }} trigger={['contextMenu']} key={base.id}> <Dropdown menu={{ items: getMenuItems(base) }} trigger={['contextMenu']} key={base.id}>
<div> <div>
<ListItem <ListItem

View File

@ -2,6 +2,7 @@ import { TopView } from '@renderer/components/TopView'
import { isEmbeddingModel } from '@renderer/config/models' import { isEmbeddingModel } from '@renderer/config/models'
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge' import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
import { useProviders } from '@renderer/hooks/useProvider' import { useProviders } from '@renderer/hooks/useProvider'
import AiProvider from '@renderer/providers/AiProvider'
import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService' import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService'
import { getModelUniqId } from '@renderer/services/ModelService' import { getModelUniqId } from '@renderer/services/ModelService'
import { Model } from '@renderer/types' import { Model } from '@renderer/types'
@ -30,6 +31,7 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const { t } = useTranslation() const { t } = useTranslation()
const { providers } = useProviders() const { providers } = useProviders()
const { addKnowledgeBase } = useKnowledgeBases() const { addKnowledgeBase } = useKnowledgeBases()
const [loading, setLoading] = useState(false)
const allModels = providers const allModels = providers
.map((p) => p.models) .map((p) => p.models)
.flat() .flat()
@ -55,10 +57,29 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const selectedModel = find(allModels, JSON.parse(values.model)) as Model const selectedModel = find(allModels, JSON.parse(values.model)) as Model
if (selectedModel) { if (selectedModel) {
setLoading(true)
const provider = providers.find((p) => p.id === selectedModel.provider)
if (!provider) {
return
}
const aiProvider = new AiProvider(provider)
let dimensions = 0
try {
dimensions = await aiProvider.getEmbeddingDimensions(selectedModel)
} catch (error) {
console.error('Error getting embedding dimensions:', error)
window.message.error(t('message.error.get_embedding_dimensions'))
return
}
const newBase = { const newBase = {
id: nanoid(), id: nanoid(),
name: values.name, name: values.name,
model: selectedModel, model: selectedModel,
dimensions,
items: [], items: [],
created_at: Date.now(), created_at: Date.now(),
updated_at: Date.now() updated_at: Date.now()
@ -84,7 +105,15 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
} }
return ( return (
<Modal title={title} open={open} onOk={onOk} onCancel={onCancel} afterClose={onClose} destroyOnClose centered> <Modal
title={title}
open={open}
onOk={onOk}
onCancel={onCancel}
afterClose={onClose}
destroyOnClose
centered
okButtonProps={{ loading }}>
<Form form={form} layout="vertical"> <Form form={form} layout="vertical">
<Form.Item <Form.Item
name="name" name="name"

View File

@ -1,6 +1,6 @@
import BaseProvider from '@renderer/providers/BaseProvider' import BaseProvider from '@renderer/providers/BaseProvider'
import ProviderFactory from '@renderer/providers/ProviderFactory' import ProviderFactory from '@renderer/providers/ProviderFactory'
import { Assistant, Message, Provider, Suggestion } from '@renderer/types' import { Assistant, Message, Model, Provider, Suggestion } from '@renderer/types'
import OpenAI from 'openai' import OpenAI from 'openai'
import { CompletionsParams } from '.' import { CompletionsParams } from '.'
@ -60,4 +60,12 @@ export default class AiProvider {
}): Promise<string[]> { }): Promise<string[]> {
return this.sdk.generateImage(params) return this.sdk.generateImage(params)
} }
public async getEmbeddingDimensions(model: Model): Promise<number> {
return this.sdk.getEmbeddingDimensions(model)
}
public getBaseURL(): string {
return this.sdk.getBaseURL()
}
} }

View File

@ -265,4 +265,8 @@ export default class AnthropicProvider extends BaseProvider {
public async models(): Promise<OpenAI.Models.Model[]> { public async models(): Promise<OpenAI.Models.Model[]> {
return [] return []
} }
public async getEmbeddingDimensions(): Promise<number> {
return 0
}
} }

View File

@ -2,7 +2,7 @@ import { REFERENCE_PROMPT } from '@renderer/config/prompts'
import { getOllamaKeepAliveTime } from '@renderer/hooks/useOllama' import { getOllamaKeepAliveTime } from '@renderer/hooks/useOllama'
import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService' import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService'
import store from '@renderer/store' import store from '@renderer/store'
import { Assistant, Message, Provider, Suggestion } from '@renderer/types' import { Assistant, Message, Model, Provider, Suggestion } from '@renderer/types'
import { delay } from '@renderer/utils' import { delay } from '@renderer/utils'
import { take } from 'lodash' import { take } from 'lodash'
import OpenAI from 'openai' import OpenAI from 'openai'
@ -37,6 +37,7 @@ export default abstract class BaseProvider {
guidanceScale: number guidanceScale: number
signal?: AbortSignal signal?: AbortSignal
}): Promise<string[]> }): Promise<string[]>
abstract getEmbeddingDimensions(model: Model): Promise<number>
public getBaseURL(): string { public getBaseURL(): string {
const host = this.provider.apiHost const host = this.provider.apiHost
@ -106,12 +107,12 @@ export default abstract class BaseProvider {
return { return {
id: index, id: index,
content: item.pageContent, content: item.pageContent,
url: encodeURIComponent(sourceUrl), sourceUrl: sourceUrl.startsWith('http') ? sourceUrl : encodeURIComponent(sourceUrl),
type: baseItem?.type type: baseItem?.type
} }
}) })
const referencesContent = JSON.stringify(references, null, 2) const referencesContent = `\`\`\`json\n${JSON.stringify(references, null, 2)}\n\`\`\``
return REFERENCE_PROMPT.replace('{question}', message.content).replace('{references}', referencesContent) return REFERENCE_PROMPT.replace('{question}', message.content).replace('{references}', referencesContent)
} }

View File

@ -13,7 +13,7 @@ import { SUMMARIZE_PROMPT } from '@renderer/config/prompts'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService' import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
import { EVENT_NAMES } from '@renderer/services/EventService' import { EVENT_NAMES } from '@renderer/services/EventService'
import { filterContextMessages } from '@renderer/services/MessagesService' import { filterContextMessages } from '@renderer/services/MessagesService'
import { Assistant, FileTypes, Message, Provider, Suggestion } from '@renderer/types' import { Assistant, FileTypes, Message, Model, Provider, Suggestion } from '@renderer/types'
import axios from 'axios' import axios from 'axios'
import { first, isEmpty, last, takeRight } from 'lodash' import { first, isEmpty, last, takeRight } from 'lodash'
import OpenAI from 'openai' import OpenAI from 'openai'
@ -29,10 +29,14 @@ export default class GeminiProvider extends BaseProvider {
super(provider) super(provider)
this.sdk = new GoogleGenerativeAI(this.apiKey) this.sdk = new GoogleGenerativeAI(this.apiKey)
this.requestOptions = { this.requestOptions = {
baseUrl: this.provider.apiHost baseUrl: this.getBaseURL()
} }
} }
public getBaseURL(): string {
return this.provider.apiHost
}
private async getMessageContents(message: Message): Promise<Content> { private async getMessageContents(message: Message): Promise<Content> {
const role = message.role === 'user' ? 'user' : 'model' const role = message.role === 'user' ? 'user' : 'model'
@ -288,4 +292,9 @@ export default class GeminiProvider extends BaseProvider {
return [] return []
} }
} }
public async getEmbeddingDimensions(model: Model): Promise<number> {
const data = await this.sdk.getGenerativeModel({ model: model.id }, this.requestOptions).embedContent('hi')
return data.embedding.values.length
}
} }

View File

@ -378,4 +378,12 @@ export default class OpenAIProvider extends BaseProvider {
return response.data.map((item) => item.url) return response.data.map((item) => item.url)
} }
public async getEmbeddingDimensions(model: Model): Promise<number> {
const data = await this.sdk.embeddings.create({
model: model.id,
input: 'hi'
})
return data.data[0].embedding.length
}
} }

View File

@ -9,7 +9,7 @@ class KnowledgeQueue {
private processing: Map<string, boolean> = new Map() private processing: Map<string, boolean> = new Map()
private pollingInterval: NodeJS.Timeout | null = null private pollingInterval: NodeJS.Timeout | null = null
// private readonly POLLING_INTERVAL = 5000 // private readonly POLLING_INTERVAL = 5000
private readonly MAX_RETRIES = 3 private readonly MAX_RETRIES = 2
constructor() { constructor() {
this.checkAllBases().catch(console.error) this.checkAllBases().catch(console.error)

View File

@ -67,7 +67,7 @@ export function getAssistantProvider(assistant: Assistant): Provider {
return provider || getDefaultProvider() return provider || getDefaultProvider()
} }
export function getProviderByModel(model?: Model) { export function getProviderByModel(model?: Model): Provider {
const providers = store.getState().llm.providers const providers = store.getState().llm.providers
const providerId = model ? model.provider : getDefaultProvider().id const providerId = model ? model.provider : getDefaultProvider().id
return providers.find((p) => p.id === providerId) as Provider return providers.find((p) => p.id === providerId) as Provider

View File

@ -12,10 +12,17 @@ export const getKnowledgeBaseParams = (base: KnowledgeBase): KnowledgeBaseParams
provider.apiKey = 'empty' provider.apiKey = 'empty'
} }
let host = aiProvider.getBaseURL()
if (host.includes('generativelanguage.googleapis.com')) {
host = host + '/v1beta/openai/'
}
return { return {
id: base.id, id: base.id,
model: base.model.name, model: base.model.id,
dimensions: base.dimensions,
apiKey: aiProvider.getApiKey(), apiKey: aiProvider.getApiKey(),
baseURL: provider.apiHost + '/v1' baseURL: host
} }
} }

View File

@ -203,6 +203,7 @@ export interface KnowledgeBase {
id: string id: string
name: string name: string
model: Model model: Model
dimensions: number
description?: string description?: string
items: KnowledgeItem[] items: KnowledgeItem[]
created_at: number created_at: number
@ -212,6 +213,7 @@ export interface KnowledgeBase {
export type KnowledgeBaseParams = { export type KnowledgeBaseParams = {
id: string id: string
model: string model: string
dimensions: number
apiKey: string apiKey: string
baseURL: string baseURL: string
} }

542
yarn.lock
View File

@ -1342,6 +1342,98 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@lancedb/lancedb-darwin-arm64@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-darwin-arm64@npm:0.14.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@lancedb/lancedb-darwin-x64@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-darwin-x64@npm:0.14.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@lancedb/lancedb-linux-arm64-gnu@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-linux-arm64-gnu@npm:0.14.0"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@lancedb/lancedb-linux-arm64-musl@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-linux-arm64-musl@npm:0.14.0"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@lancedb/lancedb-linux-x64-gnu@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-linux-x64-gnu@npm:0.14.0"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@lancedb/lancedb-linux-x64-musl@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-linux-x64-musl@npm:0.14.0"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@lancedb/lancedb-win32-arm64-msvc@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-win32-arm64-msvc@npm:0.14.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@lancedb/lancedb-win32-x64-msvc@npm:0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb-win32-x64-msvc@npm:0.14.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@lancedb/lancedb@npm:^0.14.0":
version: 0.14.0
resolution: "@lancedb/lancedb@npm:0.14.0"
dependencies:
"@lancedb/lancedb-darwin-arm64": "npm:0.14.0"
"@lancedb/lancedb-darwin-x64": "npm:0.14.0"
"@lancedb/lancedb-linux-arm64-gnu": "npm:0.14.0"
"@lancedb/lancedb-linux-arm64-musl": "npm:0.14.0"
"@lancedb/lancedb-linux-x64-gnu": "npm:0.14.0"
"@lancedb/lancedb-linux-x64-musl": "npm:0.14.0"
"@lancedb/lancedb-win32-arm64-msvc": "npm:0.14.0"
"@lancedb/lancedb-win32-x64-msvc": "npm:0.14.0"
reflect-metadata: "npm:^0.2.2"
peerDependencies:
apache-arrow: ">=13.0.0 <=17.0.0"
dependenciesMeta:
"@lancedb/lancedb-darwin-arm64":
optional: true
"@lancedb/lancedb-darwin-x64":
optional: true
"@lancedb/lancedb-linux-arm64-gnu":
optional: true
"@lancedb/lancedb-linux-arm64-musl":
optional: true
"@lancedb/lancedb-linux-x64-gnu":
optional: true
"@lancedb/lancedb-linux-x64-musl":
optional: true
"@lancedb/lancedb-win32-arm64-msvc":
optional: true
"@lancedb/lancedb-win32-x64-msvc":
optional: true
conditions: (os=darwin | os=linux | os=win32) & (cpu=x64 | cpu=arm64)
languageName: node
linkType: hard
"@langchain/core@npm:^0.3.25": "@langchain/core@npm:^0.3.25":
version: 0.3.26 version: 0.3.26
resolution: "@langchain/core@npm:0.3.26" resolution: "@langchain/core@npm:0.3.26"
@ -1401,106 +1493,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@libsql/client@npm:^0.14.0":
version: 0.14.0
resolution: "@libsql/client@npm:0.14.0"
dependencies:
"@libsql/core": "npm:^0.14.0"
"@libsql/hrana-client": "npm:^0.7.0"
js-base64: "npm:^3.7.5"
libsql: "npm:^0.4.4"
promise-limit: "npm:^2.7.0"
checksum: 10c0/9c6bab468453df765f647422c772af3578f1e108b663a80b99063f47ed3542db26ae0fcdba2e153d72e6d5089c5caeba947a167a6c065b0191a0832621539335
languageName: node
linkType: hard
"@libsql/core@npm:^0.14.0":
version: 0.14.0
resolution: "@libsql/core@npm:0.14.0"
dependencies:
js-base64: "npm:^3.7.5"
checksum: 10c0/327bb991cf191d5a9a9fc0cc1a17123f7ca88f222187a3bde845fbad8ceaeaa1f139882080e4b2969da57b83e576c52702572e2838d1743c6bff75f95e6f774a
languageName: node
linkType: hard
"@libsql/darwin-arm64@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/darwin-arm64@npm:0.4.7"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@libsql/darwin-x64@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/darwin-x64@npm:0.4.7"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@libsql/hrana-client@npm:^0.7.0":
version: 0.7.0
resolution: "@libsql/hrana-client@npm:0.7.0"
dependencies:
"@libsql/isomorphic-fetch": "npm:^0.3.1"
"@libsql/isomorphic-ws": "npm:^0.1.5"
js-base64: "npm:^3.7.5"
node-fetch: "npm:^3.3.2"
checksum: 10c0/85bbe3074e3efcc56fbc33a741afd06c1211f5d7772ea46155ce6fe6578e31ed517c7017510c5bfea3dc28031e95c0e284096154f28cbbab06751fd7d9437e28
languageName: node
linkType: hard
"@libsql/isomorphic-fetch@npm:^0.3.1":
version: 0.3.1
resolution: "@libsql/isomorphic-fetch@npm:0.3.1"
checksum: 10c0/f415f23f0c9921d6aae5133f91194d85a70e555b6c931fb4ff272af94335a46f5893433fbbb8fa24ee45bab8acce8ba5f060a22567ff3fb0577883bfcd1dec9e
languageName: node
linkType: hard
"@libsql/isomorphic-ws@npm:^0.1.5":
version: 0.1.5
resolution: "@libsql/isomorphic-ws@npm:0.1.5"
dependencies:
"@types/ws": "npm:^8.5.4"
ws: "npm:^8.13.0"
checksum: 10c0/7028bbc50dd094cdcbe56714dbf52fb646812d1b042c1973e61293f4a1cb5b81d5af670530a2463a2ba485f84f7728daf3eb75d40a7f55316ee4f7015dcc99ae
languageName: node
linkType: hard
"@libsql/linux-arm64-gnu@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/linux-arm64-gnu@npm:0.4.7"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@libsql/linux-arm64-musl@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/linux-arm64-musl@npm:0.4.7"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@libsql/linux-x64-gnu@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/linux-x64-gnu@npm:0.4.7"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@libsql/linux-x64-musl@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/linux-x64-musl@npm:0.4.7"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@libsql/win32-x64-msvc@npm:0.4.7":
version: 0.4.7
resolution: "@libsql/win32-x64-msvc@npm:0.4.7"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@llm-tools/embedjs-interfaces@npm:0.1.25": "@llm-tools/embedjs-interfaces@npm:0.1.25":
version: 0.1.25 version: 0.1.25
resolution: "@llm-tools/embedjs-interfaces@npm:0.1.25" resolution: "@llm-tools/embedjs-interfaces@npm:0.1.25"
@ -1513,27 +1505,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@llm-tools/embedjs-libsql@npm:0.1.25": "@llm-tools/embedjs-lancedb@npm:^0.1.25":
version: 0.1.25 version: 0.1.25
resolution: "@llm-tools/embedjs-libsql@npm:0.1.25" resolution: "@llm-tools/embedjs-lancedb@npm:0.1.25"
dependencies: dependencies:
"@libsql/client": "npm:^0.14.0" "@lancedb/lancedb": "npm:^0.14.0"
"@llm-tools/embedjs-interfaces": "npm:0.1.25" "@llm-tools/embedjs-interfaces": "npm:0.1.25"
"@llm-tools/embedjs-utils": "npm:0.1.25" compute-cosine-similarity: "npm:^1.1.0"
debug: "npm:^4.4.0" debug: "npm:^4.4.0"
checksum: 10c0/7a21019ed4d7cb1f8eb21ae9015c31b2e9d5ee517e741b88d5660fb322fc0d6bc163070034036c58e0fc67437dd39aeb3aa30b9874ef1dd553a3c5a2c5bbbe55 checksum: 10c0/9a05b8deda9b817ebf19d6da9e204424ff5c95b70a07d15f8d8832dd246afa9be571696cee643fb5af0fd26aa6bd0c939aa186f0634c9f442456adc1e02dd2bc
languageName: node
linkType: hard
"@llm-tools/embedjs-libsql@patch:@llm-tools/embedjs-libsql@npm%3A0.1.25#~/.yarn/patches/@llm-tools-embedjs-libsql-npm-0.1.25-fad000d74c.patch":
version: 0.1.25
resolution: "@llm-tools/embedjs-libsql@patch:@llm-tools/embedjs-libsql@npm%3A0.1.25#~/.yarn/patches/@llm-tools-embedjs-libsql-npm-0.1.25-fad000d74c.patch::version=0.1.25&hash=7eafdc"
dependencies:
"@libsql/client": "npm:^0.14.0"
"@llm-tools/embedjs-interfaces": "npm:0.1.25"
"@llm-tools/embedjs-utils": "npm:0.1.25"
debug: "npm:^4.4.0"
checksum: 10c0/e7793caaf71fb977409d6ba97cb831d68fe5eff5c2ba8502d112fd0294ff004417c7685f86b1d45993f2722b6007976335413f9966b6b7e4676751ba41272041
languageName: node languageName: node
linkType: hard linkType: hard
@ -1697,13 +1677,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@neon-rs/load@npm:^0.0.4":
version: 0.0.4
resolution: "@neon-rs/load@npm:0.0.4"
checksum: 10c0/546fa4e48aa9cdb402f0a3524b591b1cac863bcfdd0217432323dba42ad37ece24b736019e6196e34326201db6b6deb410d7a983ac3c54f322619c9b6bd568bb
languageName: node
linkType: hard
"@nodelib/fs.scandir@npm:2.1.5": "@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5 version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5" resolution: "@nodelib/fs.scandir@npm:2.1.5"
@ -2123,6 +2096,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@swc/helpers@npm:^0.5.11":
version: 0.5.15
resolution: "@swc/helpers@npm:0.5.15"
dependencies:
tslib: "npm:^2.8.0"
checksum: 10c0/33002f74f6f885f04c132960835fdfc474186983ea567606db62e86acd0680ca82f34647e8e610f4e1e422d1c16fce729dde22cd3b797ab1fd9061a825dabca4
languageName: node
linkType: hard
"@szmarczak/http-timer@npm:^4.0.5": "@szmarczak/http-timer@npm:^4.0.5":
version: 4.0.6 version: 4.0.6
resolution: "@szmarczak/http-timer@npm:4.0.6" resolution: "@szmarczak/http-timer@npm:4.0.6"
@ -2233,6 +2215,20 @@ __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/debug@npm:^4.0.0, @types/debug@npm:^4.1.6": "@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.6":
version: 4.1.12 version: 4.1.12
resolution: "@types/debug@npm:4.1.12" resolution: "@types/debug@npm:4.1.12"
@ -2441,7 +2437,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:^20.9.0": "@types/node@npm:^20.13.0, @types/node@npm:^20.9.0":
version: 20.17.10 version: 20.17.10
resolution: "@types/node@npm:20.17.10" resolution: "@types/node@npm:20.17.10"
dependencies: dependencies:
@ -2576,15 +2572,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/ws@npm:^8.5.4":
version: 8.5.13
resolution: "@types/ws@npm:8.5.13"
dependencies:
"@types/node": "npm:*"
checksum: 10c0/a5430aa479bde588e69cb9175518d72f9338b6999e3b2ae16fc03d3bdcff8347e486dc031e4ed14601260463c07e1f9a0d7511dfc653712b047c439c680b0b34
languageName: node
linkType: hard
"@types/yauzl@npm:^2.9.1": "@types/yauzl@npm:^2.9.1":
version: 2.10.3 version: 2.10.3
resolution: "@types/yauzl@npm:2.10.3" resolution: "@types/yauzl@npm:2.10.3"
@ -2761,7 +2748,7 @@ __metadata:
"@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"
"@llm-tools/embedjs": "npm:^0.1.25" "@llm-tools/embedjs": "npm:^0.1.25"
"@llm-tools/embedjs-libsql": "patch:@llm-tools/embedjs-libsql@npm%3A0.1.25#~/.yarn/patches/@llm-tools-embedjs-libsql-npm-0.1.25-fad000d74c.patch" "@llm-tools/embedjs-lancedb": "npm:^0.1.25"
"@llm-tools/embedjs-loader-csv": "npm:^0.1.25" "@llm-tools/embedjs-loader-csv": "npm:^0.1.25"
"@llm-tools/embedjs-loader-markdown": "npm:^0.1.25" "@llm-tools/embedjs-loader-markdown": "npm:^0.1.25"
"@llm-tools/embedjs-loader-msoffice": "npm:^0.1.25" "@llm-tools/embedjs-loader-msoffice": "npm:^0.1.25"
@ -2783,6 +2770,7 @@ __metadata:
"@vitejs/plugin-react": "npm:^4.2.1" "@vitejs/plugin-react": "npm:^4.2.1"
adm-zip: "npm:^0.5.16" adm-zip: "npm:^0.5.16"
antd: "npm:^5.18.3" antd: "npm:^5.18.3"
apache-arrow: "npm:^18.1.0"
axios: "npm:^1.7.3" axios: "npm:^1.7.3"
browser-image-compression: "npm:^2.0.2" browser-image-compression: "npm:^2.0.2"
dayjs: "npm:^1.11.11" dayjs: "npm:^1.11.11"
@ -3110,6 +3098,25 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"apache-arrow@npm:^18.1.0":
version: 18.1.0
resolution: "apache-arrow@npm:18.1.0"
dependencies:
"@swc/helpers": "npm:^0.5.11"
"@types/command-line-args": "npm:^5.2.3"
"@types/command-line-usage": "npm:^5.0.4"
"@types/node": "npm:^20.13.0"
command-line-args: "npm:^5.2.1"
command-line-usage: "npm:^7.0.1"
flatbuffers: "npm:^24.3.25"
json-bignum: "npm:^0.0.3"
tslib: "npm:^2.6.2"
bin:
arrow2csv: bin/arrow2csv.js
checksum: 10c0/2bb43c19e8e29b5cba8eb5a3a76f7e4e93ecb25658e49de2c3997be12a461a72e2a4ddd2f90e6806e9725bb28e391ffedc9e6e0ab1f613eb70cfb5438d2c4d21
languageName: node
linkType: hard
"app-builder-bin@npm:4.0.0": "app-builder-bin@npm:4.0.0":
version: 4.0.0 version: 4.0.0
resolution: "app-builder-bin@npm:4.0.0" resolution: "app-builder-bin@npm:4.0.0"
@ -3200,6 +3207,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"array-back@npm:^3.0.1, array-back@npm:^3.1.0":
version: 3.1.0
resolution: "array-back@npm:3.1.0"
checksum: 10c0/bb1fe86aa8b39c21e73c68c7abf8b05ed939b8951a3b17527217f6a2a84e00e4cfa4fdec823081689c5e216709bf1f214a4f5feeee6726eaff83897fa1a7b8ee
languageName: node
linkType: hard
"array-back@npm:^6.2.2":
version: 6.2.2
resolution: "array-back@npm:6.2.2"
checksum: 10c0/c98a6e43b669400f58e2fba478336d5d02aac970566ffae3af0cb9b5585ec3811a1e010c76e34fb809a9762e6822a43a9c9a1b99f2a35f43b11a9e198e782818
languageName: node
linkType: hard
"array-buffer-byte-length@npm:^1.0.1": "array-buffer-byte-length@npm:^1.0.1":
version: 1.0.1 version: 1.0.1
resolution: "array-buffer-byte-length@npm:1.0.1" resolution: "array-buffer-byte-length@npm:1.0.1"
@ -3873,6 +3894,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"chalk-template@npm:^0.4.0":
version: 0.4.0
resolution: "chalk-template@npm:0.4.0"
dependencies:
chalk: "npm:^4.1.2"
checksum: 10c0/6a4cb4252966475f0bd3ee1cd8780146e1ba69f445e59c565cab891ac18708c8143515d23e2b0fb7e192574fb7608d429ea5b28f3b7b9507770ad6fccd3467e3
languageName: node
linkType: hard
"chalk@npm:2.4.2, chalk@npm:^2.4.2": "chalk@npm:2.4.2, chalk@npm:^2.4.2":
version: 2.4.2 version: 2.4.2
resolution: "chalk@npm:2.4.2" resolution: "chalk@npm:2.4.2"
@ -4095,6 +4125,30 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"command-line-args@npm:^5.2.1":
version: 5.2.1
resolution: "command-line-args@npm:5.2.1"
dependencies:
array-back: "npm:^3.1.0"
find-replace: "npm:^3.0.0"
lodash.camelcase: "npm:^4.3.0"
typical: "npm:^4.0.0"
checksum: 10c0/a4f6a23a1e420441bd1e44dee24efd12d2e49af7efe6e21eb32fca4e843ca3d5501ddebad86a4e9d99aa626dd6dcb64c04a43695388be54e3a803dbc326cc89f
languageName: node
linkType: hard
"command-line-usage@npm:^7.0.1":
version: 7.0.3
resolution: "command-line-usage@npm:7.0.3"
dependencies:
array-back: "npm:^6.2.2"
chalk-template: "npm:^0.4.0"
table-layout: "npm:^4.1.0"
typical: "npm:^7.1.1"
checksum: 10c0/444a3e3c6fcbdcb5802de0fd2864ea5aef83eeeb3a825fd24846b996503d4b4140e75aeb2939b3430a06407f3acc02b76b3e08dafb3a3092d22fdcced0ecb0b0
languageName: node
linkType: hard
"commander@npm:9.2.0": "commander@npm:9.2.0":
version: 9.2.0 version: 9.2.0
resolution: "commander@npm:9.2.0" resolution: "commander@npm:9.2.0"
@ -4144,6 +4198,38 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"compute-cosine-similarity@npm:^1.1.0":
version: 1.1.0
resolution: "compute-cosine-similarity@npm:1.1.0"
dependencies:
compute-dot: "npm:^1.1.0"
compute-l2norm: "npm:^1.1.0"
validate.io-array: "npm:^1.0.5"
validate.io-function: "npm:^1.0.2"
checksum: 10c0/82c5df828f0c3af2cf74e400916e904560fdbe61d740cb91f03b191f372408c439ab0afce8c053f6ca3fcf74d2f04bf0083e5b8b07fafceaaf50a6e35d191cb3
languageName: node
linkType: hard
"compute-dot@npm:^1.1.0":
version: 1.1.0
resolution: "compute-dot@npm:1.1.0"
dependencies:
validate.io-array: "npm:^1.0.3"
validate.io-function: "npm:^1.0.2"
checksum: 10c0/1e81ab6a18d9fd0fae9265e501d00fe303d1305c7370db531d38ca35e09f9ceba66bec27c42992abd2f271f104f084db93a56e7f49424f4a4aea5c8265881d93
languageName: node
linkType: hard
"compute-l2norm@npm:^1.1.0":
version: 1.1.0
resolution: "compute-l2norm@npm:1.1.0"
dependencies:
validate.io-array: "npm:^1.0.3"
validate.io-function: "npm:^1.0.2"
checksum: 10c0/af37fca05e662f221d73f41004972d95998c6927c666b95b9279466f34a06e374ae817194cbadd5c28d0e99a84526022b66f7d16e6e8e5cf9f909629ae381a93
languageName: node
linkType: hard
"compute-scroll-into-view@npm:^3.0.2": "compute-scroll-into-view@npm:^3.0.2":
version: 3.1.0 version: 3.1.0
resolution: "compute-scroll-into-view@npm:3.1.0" resolution: "compute-scroll-into-view@npm:3.1.0"
@ -4351,13 +4437,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"data-uri-to-buffer@npm:^4.0.0":
version: 4.0.1
resolution: "data-uri-to-buffer@npm:4.0.1"
checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b
languageName: node
linkType: hard
"data-urls@npm:^5.0.0": "data-urls@npm:^5.0.0":
version: 5.0.0 version: 5.0.0
resolution: "data-urls@npm:5.0.0" resolution: "data-urls@npm:5.0.0"
@ -4648,13 +4727,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"detect-libc@npm:2.0.2":
version: 2.0.2
resolution: "detect-libc@npm:2.0.2"
checksum: 10c0/a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11
languageName: node
linkType: hard
"detect-libc@npm:^2.0.0": "detect-libc@npm:^2.0.0":
version: 2.0.3 version: 2.0.3
resolution: "detect-libc@npm:2.0.3" resolution: "detect-libc@npm:2.0.3"
@ -5797,16 +5869,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4":
version: 3.2.0
resolution: "fetch-blob@npm:3.2.0"
dependencies:
node-domexception: "npm:^1.0.0"
web-streams-polyfill: "npm:^3.0.3"
checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69
languageName: node
linkType: hard
"fflate@npm:0.8.1": "fflate@npm:0.8.1":
version: 0.8.1 version: 0.8.1
resolution: "fflate@npm:0.8.1" resolution: "fflate@npm:0.8.1"
@ -5909,6 +5971,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"find-replace@npm:^3.0.0":
version: 3.0.0
resolution: "find-replace@npm:3.0.0"
dependencies:
array-back: "npm:^3.0.1"
checksum: 10c0/fcd1bf7960388c8193c2861bcdc760c18ac14edb4bde062a961915d9a25727b2e8aabf0229e90cc09c753fd557e5a3e5ae61e49cadbe727be89a9e8e49ce7668
languageName: node
linkType: hard
"find-up@npm:^1.0.0": "find-up@npm:^1.0.0":
version: 1.1.2 version: 1.1.2
resolution: "find-up@npm:1.1.2" resolution: "find-up@npm:1.1.2"
@ -5949,6 +6020,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"flatbuffers@npm:^24.3.25":
version: 24.12.23
resolution: "flatbuffers@npm:24.12.23"
checksum: 10c0/f6c7e4440c724ee337dac54db1d6ae428e84b2bf6618c542d095956e77b521bdd8a0e4d87dc93b15ae6ed4d07a8b269b5c99fd766e5acbe67546ef81034b1e05
languageName: node
linkType: hard
"flatted@npm:^3.2.9": "flatted@npm:^3.2.9":
version: 3.3.1 version: 3.3.1
resolution: "flatted@npm:3.3.1" resolution: "flatted@npm:3.3.1"
@ -6038,15 +6116,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"formdata-polyfill@npm:^4.0.10":
version: 4.0.10
resolution: "formdata-polyfill@npm:4.0.10"
dependencies:
fetch-blob: "npm:^3.1.2"
checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6
languageName: node
linkType: hard
"fs-constants@npm:^1.0.0": "fs-constants@npm:^1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "fs-constants@npm:1.0.0" resolution: "fs-constants@npm:1.0.0"
@ -7647,13 +7716,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"js-base64@npm:^3.7.5":
version: 3.7.7
resolution: "js-base64@npm:3.7.7"
checksum: 10c0/3c905a7e78b601e4751b5e710edd0d6d045ce2d23eb84c9df03515371e1b291edc72808dc91e081cb9855aef6758292a2407006f4608ec3705373dd8baf2f80f
languageName: node
linkType: hard
"js-tiktoken@npm:^1.0.12": "js-tiktoken@npm:^1.0.12":
version: 1.0.15 version: 1.0.15
resolution: "js-tiktoken@npm:1.0.15" resolution: "js-tiktoken@npm:1.0.15"
@ -7738,6 +7800,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"json-bignum@npm:^0.0.3":
version: 0.0.3
resolution: "json-bignum@npm:0.0.3"
checksum: 10c0/f9f9312d57a68f72676802fa087da4ed60241d73b6cc0e3fb9f587ca0de7364efb62612a14414ccfbedc0b77ce3c320adca21834a5673c99eb3375aef9f561db
languageName: node
linkType: hard
"json-buffer@npm:3.0.1": "json-buffer@npm:3.0.1":
version: 3.0.1 version: 3.0.1
resolution: "json-buffer@npm:3.0.1" resolution: "json-buffer@npm:3.0.1"
@ -8052,39 +8121,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"libsql@npm:^0.4.4":
version: 0.4.7
resolution: "libsql@npm:0.4.7"
dependencies:
"@libsql/darwin-arm64": "npm:0.4.7"
"@libsql/darwin-x64": "npm:0.4.7"
"@libsql/linux-arm64-gnu": "npm:0.4.7"
"@libsql/linux-arm64-musl": "npm:0.4.7"
"@libsql/linux-x64-gnu": "npm:0.4.7"
"@libsql/linux-x64-musl": "npm:0.4.7"
"@libsql/win32-x64-msvc": "npm:0.4.7"
"@neon-rs/load": "npm:^0.0.4"
detect-libc: "npm:2.0.2"
dependenciesMeta:
"@libsql/darwin-arm64":
optional: true
"@libsql/darwin-x64":
optional: true
"@libsql/linux-arm64-gnu":
optional: true
"@libsql/linux-arm64-musl":
optional: true
"@libsql/linux-x64-gnu":
optional: true
"@libsql/linux-x64-musl":
optional: true
"@libsql/win32-x64-msvc":
optional: true
checksum: 10c0/351952440e6bad3477e5f1bb1b9d6570d16e403b894f4a13c5c7e183a1307b2fb04a2fa902728cb8594a259e1726c51c61b822d545bbc88319b126ad15468a87
conditions: (os=darwin | os=linux | os=win32) & (cpu=x64 | cpu=arm64 | cpu=wasm32)
languageName: node
linkType: hard
"lie@npm:~3.3.0": "lie@npm:~3.3.0":
version: 3.3.0 version: 3.3.0
resolution: "lie@npm:3.3.0" resolution: "lie@npm:3.3.0"
@ -8151,6 +8187,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"lodash.camelcase@npm:^4.3.0":
version: 4.3.0
resolution: "lodash.camelcase@npm:4.3.0"
checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432
languageName: node
linkType: hard
"lodash.escaperegexp@npm:^4.1.2": "lodash.escaperegexp@npm:^4.1.2":
version: 4.1.2 version: 4.1.2
resolution: "lodash.escaperegexp@npm:4.1.2" resolution: "lodash.escaperegexp@npm:4.1.2"
@ -9472,7 +9515,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"node-domexception@npm:1.0.0, node-domexception@npm:^1.0.0": "node-domexception@npm:1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "node-domexception@npm:1.0.0" resolution: "node-domexception@npm:1.0.0"
checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b
@ -9500,17 +9543,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"node-fetch@npm:^3.3.2":
version: 3.3.2
resolution: "node-fetch@npm:3.3.2"
dependencies:
data-uri-to-buffer: "npm:^4.0.0"
fetch-blob: "npm:^3.1.4"
formdata-polyfill: "npm:^4.0.10"
checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538
languageName: node
linkType: hard
"node-gyp@npm:8.x": "node-gyp@npm:8.x":
version: 8.4.1 version: 8.4.1
resolution: "node-gyp@npm:8.4.1" resolution: "node-gyp@npm:8.4.1"
@ -10498,13 +10530,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"promise-limit@npm:^2.7.0":
version: 2.7.0
resolution: "promise-limit@npm:2.7.0"
checksum: 10c0/ce220a7e11c8d0541940a3d99cc424bd16a18451b295a263f6dbaa998585d2d1afa71fcb7bb29078a61e214d2f13d96e9b082e96e8e357fbe5c5936ef2459cba
languageName: node
linkType: hard
"promise-retry@npm:^2.0.1": "promise-retry@npm:^2.0.1":
version: 2.0.1 version: 2.0.1
resolution: "promise-retry@npm:2.0.1" resolution: "promise-retry@npm:2.0.1"
@ -11454,6 +11479,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"reflect-metadata@npm:^0.2.2":
version: 0.2.2
resolution: "reflect-metadata@npm:0.2.2"
checksum: 10c0/1cd93a15ea291e420204955544637c264c216e7aac527470e393d54b4bb075f10a17e60d8168ec96600c7e0b9fcc0cb0bb6e91c3fbf5b0d8c9056f04e6ac1ec2
languageName: node
linkType: hard
"reflect.getprototypeof@npm:^1.0.4": "reflect.getprototypeof@npm:^1.0.4":
version: 1.0.6 version: 1.0.6
resolution: "reflect.getprototypeof@npm:1.0.6" resolution: "reflect.getprototypeof@npm:1.0.6"
@ -12806,6 +12838,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"table-layout@npm:^4.1.0":
version: 4.1.1
resolution: "table-layout@npm:4.1.1"
dependencies:
array-back: "npm:^6.2.2"
wordwrapjs: "npm:^5.1.0"
checksum: 10c0/26d8e54a55ddb4de447c8f02a8d7fcbb66a9580375e406a3bc7717ab223a413f6dfbded6710f288b3dfd277991813a0bd5a17419a0dc6db54d9a36d883d868dc
languageName: node
linkType: hard
"tar-fs@npm:^2.0.0": "tar-fs@npm:^2.0.0":
version: 2.1.1 version: 2.1.1
resolution: "tar-fs@npm:2.1.1" resolution: "tar-fs@npm:2.1.1"
@ -13115,6 +13157,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tslib@npm:^2.8.0":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
languageName: node
linkType: hard
"tunnel-agent@npm:^0.6.0": "tunnel-agent@npm:^0.6.0":
version: 0.6.0 version: 0.6.0
resolution: "tunnel-agent@npm:0.6.0" resolution: "tunnel-agent@npm:0.6.0"
@ -13240,6 +13289,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typical@npm:^4.0.0":
version: 4.0.0
resolution: "typical@npm:4.0.0"
checksum: 10c0/f300b198fb9fe743859b75ec761d53c382723dc178bbce4957d9cb754f2878a44ce17dc0b6a5156c52be1065449271f63754ba594dac225b80ce3aa39f9241ed
languageName: node
linkType: hard
"typical@npm:^7.1.1":
version: 7.3.0
resolution: "typical@npm:7.3.0"
checksum: 10c0/bee697a88e1dd0447bc1cf7f6e875eaa2b0fb2cccb338b7b261e315f7df84a66402864bfc326d6b3117c50475afd1d49eda03d846a6299ad25f211035bfab3b1
languageName: node
linkType: hard
"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": "uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0":
version: 2.1.0 version: 2.1.0
resolution: "uc.micro@npm:2.1.0" resolution: "uc.micro@npm:2.1.0"
@ -13593,6 +13656,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"validate.io-array@npm:^1.0.3, validate.io-array@npm:^1.0.5":
version: 1.0.6
resolution: "validate.io-array@npm:1.0.6"
checksum: 10c0/ece1e93d24fe1c92f5ec5983e186f7890021c9144c2ad0e45d76695267861e9ad0362474a038a240caf3ab30f7b7595738c7f6efe9f6f0f9ae94290d23c39ef6
languageName: node
linkType: hard
"validate.io-function@npm:^1.0.2":
version: 1.0.2
resolution: "validate.io-function@npm:1.0.2"
checksum: 10c0/210b4bbf8c71c7863df122beae76387406eb960a6540b003568dcde2bbb4baac17a2c8f0eda014f0c5d2440396e87141e62028cc8758ddc61589e3425bd26c27
languageName: node
linkType: hard
"verror@npm:1.10.0": "verror@npm:1.10.0":
version: 1.10.0 version: 1.10.0
resolution: "verror@npm:1.10.0" resolution: "verror@npm:1.10.0"
@ -13718,7 +13795,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.1": "web-streams-polyfill@npm:^3.2.1":
version: 3.3.3 version: 3.3.3
resolution: "web-streams-polyfill@npm:3.3.3" resolution: "web-streams-polyfill@npm:3.3.3"
checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f
@ -13917,6 +13994,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"wordwrapjs@npm:^5.1.0":
version: 5.1.0
resolution: "wordwrapjs@npm:5.1.0"
checksum: 10c0/e147162f139eb8c05257729fde586f5422a2d242aa8f027b5fa5adead1b571b455d0690a15c73aeaa31c93ba96864caa06d84ebdb2c32a0890602ab86a7568d1
languageName: node
linkType: hard
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
version: 7.0.0 version: 7.0.0
resolution: "wrap-ansi@npm:7.0.0" resolution: "wrap-ansi@npm:7.0.0"
@ -13956,7 +14040,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ws@npm:^8.13.0, ws@npm:^8.16.0": "ws@npm:^8.16.0":
version: 8.18.0 version: 8.18.0
resolution: "ws@npm:8.18.0" resolution: "ws@npm:8.18.0"
peerDependencies: peerDependencies: