totem-llm 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +81 -0
- package/bin/totem-llm.js +80 -0
- package/collector/.env +9 -0
- package/collector/.env.example +9 -0
- package/collector/.nvmrc +1 -0
- package/collector/extensions/index.js +239 -0
- package/collector/extensions/resync/index.js +197 -0
- package/collector/hotdir/__HOTDIR__.md +3 -0
- package/collector/index.js +202 -0
- package/collector/middleware/httpLogger.js +29 -0
- package/collector/middleware/setDataSigner.js +44 -0
- package/collector/middleware/verifyIntegrity.js +32 -0
- package/collector/package.json +67 -0
- package/collector/processLink/convert/generic.js +240 -0
- package/collector/processLink/helpers/index.js +190 -0
- package/collector/processLink/index.js +47 -0
- package/collector/processRawText/index.js +83 -0
- package/collector/processSingleFile/convert/asAudio.js +79 -0
- package/collector/processSingleFile/convert/asDocx.js +63 -0
- package/collector/processSingleFile/convert/asEPub.js +61 -0
- package/collector/processSingleFile/convert/asImage.js +56 -0
- package/collector/processSingleFile/convert/asMbox.js +83 -0
- package/collector/processSingleFile/convert/asOfficeMime.js +59 -0
- package/collector/processSingleFile/convert/asPDF/PDFLoader/index.js +97 -0
- package/collector/processSingleFile/convert/asPDF/index.js +86 -0
- package/collector/processSingleFile/convert/asTxt.js +59 -0
- package/collector/processSingleFile/convert/asXlsx.js +193 -0
- package/collector/processSingleFile/index.js +95 -0
- package/collector/utils/EncryptionWorker/index.js +77 -0
- package/collector/utils/OCRLoader/index.js +355 -0
- package/collector/utils/OCRLoader/validLangs.js +155 -0
- package/collector/utils/WhisperProviders/OpenAiWhisper.js +49 -0
- package/collector/utils/WhisperProviders/ffmpeg/index.js +114 -0
- package/collector/utils/WhisperProviders/localWhisper.js +197 -0
- package/collector/utils/comKey/index.js +54 -0
- package/collector/utils/constants.js +92 -0
- package/collector/utils/downloadURIToFile/index.js +90 -0
- package/collector/utils/extensions/Confluence/ConfluenceLoader/index.js +154 -0
- package/collector/utils/extensions/Confluence/index.js +292 -0
- package/collector/utils/extensions/DrupalWiki/DrupalWiki/index.js +338 -0
- package/collector/utils/extensions/DrupalWiki/index.js +102 -0
- package/collector/utils/extensions/ObsidianVault/index.js +95 -0
- package/collector/utils/extensions/PaperlessNgx/PaperlessNgxLoader/index.js +157 -0
- package/collector/utils/extensions/PaperlessNgx/index.js +128 -0
- package/collector/utils/extensions/RepoLoader/GithubRepo/RepoLoader/index.js +265 -0
- package/collector/utils/extensions/RepoLoader/GithubRepo/index.js +159 -0
- package/collector/utils/extensions/RepoLoader/GitlabRepo/RepoLoader/index.js +447 -0
- package/collector/utils/extensions/RepoLoader/GitlabRepo/index.js +261 -0
- package/collector/utils/extensions/RepoLoader/index.js +41 -0
- package/collector/utils/extensions/WebsiteDepth/index.js +211 -0
- package/collector/utils/extensions/YoutubeTranscript/YoutubeLoader/index.js +99 -0
- package/collector/utils/extensions/YoutubeTranscript/YoutubeLoader/youtube-transcript.js +246 -0
- package/collector/utils/extensions/YoutubeTranscript/index.js +219 -0
- package/collector/utils/files/index.js +240 -0
- package/collector/utils/files/mime.js +64 -0
- package/collector/utils/http/index.js +54 -0
- package/collector/utils/logger/index.js +68 -0
- package/collector/utils/runtimeSettings/index.js +97 -0
- package/collector/utils/shell.js +25 -0
- package/collector/utils/tokenizer/index.js +66 -0
- package/collector/utils/url/index.js +137 -0
- package/collector/yarn.lock +4413 -0
- package/lib/config.js +79 -0
- package/lib/launcher.js +116 -0
- package/lib/setup.js +143 -0
- package/package.json +64 -0
- package/scripts/postinstall.mjs +117 -0
- package/server/.env +489 -0
- package/server/.env.example +496 -0
- package/server/.flowconfig +30 -0
- package/server/.nvmrc +1 -0
- package/server/endpoints/admin.js +566 -0
- package/server/endpoints/agentFileServer.js +174 -0
- package/server/endpoints/agentFlows.js +192 -0
- package/server/endpoints/agentSkillWhitelist.js +82 -0
- package/server/endpoints/agentWebsocket.js +62 -0
- package/server/endpoints/api/admin/index.js +775 -0
- package/server/endpoints/api/auth/index.js +33 -0
- package/server/endpoints/api/document/index.js +1210 -0
- package/server/endpoints/api/embed/index.js +409 -0
- package/server/endpoints/api/index.js +29 -0
- package/server/endpoints/api/openai/compatibility-test-script.cjs +79 -0
- package/server/endpoints/api/openai/helpers.js +50 -0
- package/server/endpoints/api/openai/index.js +321 -0
- package/server/endpoints/api/system/index.js +275 -0
- package/server/endpoints/api/userManagement/index.js +124 -0
- package/server/endpoints/api/workspace/index.js +1008 -0
- package/server/endpoints/api/workspaceThread/index.js +627 -0
- package/server/endpoints/browserExtension.js +221 -0
- package/server/endpoints/chat.js +193 -0
- package/server/endpoints/communityHub.js +214 -0
- package/server/endpoints/document.js +111 -0
- package/server/endpoints/embed/index.js +103 -0
- package/server/endpoints/embedManagement.js +131 -0
- package/server/endpoints/experimental/imported-agent-plugins.js +65 -0
- package/server/endpoints/experimental/index.js +12 -0
- package/server/endpoints/experimental/liveSync.js +110 -0
- package/server/endpoints/extensions/index.js +175 -0
- package/server/endpoints/invite.js +81 -0
- package/server/endpoints/mcpServers.js +127 -0
- package/server/endpoints/memory.js +196 -0
- package/server/endpoints/mobile/index.js +160 -0
- package/server/endpoints/mobile/middleware/index.js +97 -0
- package/server/endpoints/mobile/utils/index.js +195 -0
- package/server/endpoints/modelRouter.js +205 -0
- package/server/endpoints/scheduledJobs.js +374 -0
- package/server/endpoints/system.js +1490 -0
- package/server/endpoints/telegram.js +333 -0
- package/server/endpoints/utils/dockerModelRunnerUtils.js +94 -0
- package/server/endpoints/utils/googleAgentSkillEndpoints.js +70 -0
- package/server/endpoints/utils/lemonadeUtilsEndpoints.js +170 -0
- package/server/endpoints/utils/outlookAgentUtils.js +190 -0
- package/server/endpoints/utils.js +220 -0
- package/server/endpoints/webPush.js +27 -0
- package/server/endpoints/workspaceThreads.js +245 -0
- package/server/endpoints/workspaces.js +1159 -0
- package/server/endpoints/workspacesParsedFiles.js +208 -0
- package/server/index.js +178 -0
- package/server/jobs/cleanup-generated-files.js +160 -0
- package/server/jobs/cleanup-orphan-documents.js +79 -0
- package/server/jobs/embedding-worker.js +197 -0
- package/server/jobs/extract-memories.js +192 -0
- package/server/jobs/handle-telegram-chat.js +67 -0
- package/server/jobs/helpers/index.js +54 -0
- package/server/jobs/helpers/memory-extraction-utils.js +366 -0
- package/server/jobs/helpers/scheduled-job-helper.js +111 -0
- package/server/jobs/run-scheduled-job.js +157 -0
- package/server/jobs/sync-watched-documents.js +209 -0
- package/server/jsconfig.json +14 -0
- package/server/middleware/httpLogger.js +23 -0
- package/server/models/agentSkillWhitelist.js +100 -0
- package/server/models/apiKeys.js +99 -0
- package/server/models/browserExtensionApiKey.js +190 -0
- package/server/models/cacheData.js +69 -0
- package/server/models/communityHub.js +213 -0
- package/server/models/documentSyncQueue.js +252 -0
- package/server/models/documentSyncRun.js +88 -0
- package/server/models/documents.js +356 -0
- package/server/models/embedChats.js +199 -0
- package/server/models/embedConfig.js +251 -0
- package/server/models/eventLogs.js +129 -0
- package/server/models/externalCommunicationConnector.js +110 -0
- package/server/models/invite.js +144 -0
- package/server/models/memory.js +451 -0
- package/server/models/mobileDevice.js +251 -0
- package/server/models/modelRouter.js +259 -0
- package/server/models/modelRouterRule.js +336 -0
- package/server/models/passwordRecovery.js +115 -0
- package/server/models/promptHistory.js +107 -0
- package/server/models/scheduledJob.js +499 -0
- package/server/models/scheduledJobRun.js +362 -0
- package/server/models/slashCommandsPresets.js +143 -0
- package/server/models/systemPromptVariables.js +361 -0
- package/server/models/systemSettings.js +1183 -0
- package/server/models/temporaryAuthToken.js +104 -0
- package/server/models/user.js +381 -0
- package/server/models/vectors.js +79 -0
- package/server/models/workspace.js +720 -0
- package/server/models/workspaceAgentInvocation.js +97 -0
- package/server/models/workspaceChats.js +386 -0
- package/server/models/workspaceParsedFiles.js +246 -0
- package/server/models/workspaceThread.js +151 -0
- package/server/models/workspaceUsers.js +103 -0
- package/server/models/workspacesSuggestedMessages.js +83 -0
- package/server/package.json +130 -0
- package/server/prisma/migrations/20230921191814_init/migration.sql +125 -0
- package/server/prisma/migrations/20231101001441_init/migration.sql +2 -0
- package/server/prisma/migrations/20231101195421_init/migration.sql +11 -0
- package/server/prisma/migrations/20231129012019_add/migration.sql +2 -0
- package/server/prisma/migrations/20240113013409_init/migration.sql +2 -0
- package/server/prisma/migrations/20240118201333_init/migration.sql +2 -0
- package/server/prisma/migrations/20240202002020_init/migration.sql +37 -0
- package/server/prisma/migrations/20240206181106_init/migration.sql +13 -0
- package/server/prisma/migrations/20240206211916_init/migration.sql +11 -0
- package/server/prisma/migrations/20240208224848_init/migration.sql +24 -0
- package/server/prisma/migrations/20240210004405_init/migration.sql +2 -0
- package/server/prisma/migrations/20240216214639_init/migration.sql +2 -0
- package/server/prisma/migrations/20240219211018_init/migration.sql +2 -0
- package/server/prisma/migrations/20240301002308_init/migration.sql +2 -0
- package/server/prisma/migrations/20240326231053_init/migration.sql +2 -0
- package/server/prisma/migrations/20240405015034_init/migration.sql +2 -0
- package/server/prisma/migrations/20240412183346_init/migration.sql +24 -0
- package/server/prisma/migrations/20240425004220_init/migration.sql +30 -0
- package/server/prisma/migrations/20240430230707_init/migration.sql +2 -0
- package/server/prisma/migrations/20240510032311_init/migration.sql +15 -0
- package/server/prisma/migrations/20240618224346_init/migration.sql +26 -0
- package/server/prisma/migrations/20240821215625_init/migration.sql +2 -0
- package/server/prisma/migrations/20240824005054_init/migration.sql +15 -0
- package/server/prisma/migrations/20241003192954_init/migration.sql +2 -0
- package/server/prisma/migrations/20241029203722_init/migration.sql +12 -0
- package/server/prisma/migrations/20241029233509_init/migration.sql +5 -0
- package/server/prisma/migrations/20250102204948_init/migration.sql +2 -0
- package/server/prisma/migrations/20250226005538_init/migration.sql +2 -0
- package/server/prisma/migrations/20250318154720_init/migration.sql +18 -0
- package/server/prisma/migrations/20250506214129_init/migration.sql +13 -0
- package/server/prisma/migrations/20250709230835_init/migration.sql +2 -0
- package/server/prisma/migrations/20250725194841_init/migration.sql +17 -0
- package/server/prisma/migrations/20250808171557_init/migration.sql +23 -0
- package/server/prisma/migrations/20260130040204_init/migration.sql +2 -0
- package/server/prisma/migrations/20260313192859_init/migration.sql +10 -0
- package/server/prisma/migrations/20260319202916_init/migration.sql +12 -0
- package/server/prisma/migrations/20260406120000_init/migration.sql +2 -0
- package/server/prisma/migrations/20260423191158_init/migration.sql +29 -0
- package/server/prisma/migrations/20260424013043_init/migration.sql +22 -0
- package/server/prisma/migrations/20260520160208_init/migration.sql +46 -0
- package/server/prisma/migrations/migration_lock.toml +3 -0
- package/server/prisma/schema.prisma +484 -0
- package/server/prisma/seed.js +31 -0
- package/server/public/KaTeX_AMS-Regular.eot +0 -0
- package/server/public/KaTeX_AMS-Regular.ttf +0 -0
- package/server/public/KaTeX_AMS-Regular.woff +0 -0
- package/server/public/KaTeX_AMS-Regular.woff2 +0 -0
- package/server/public/KaTeX_Caligraphic-Bold.eot +0 -0
- package/server/public/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/server/public/KaTeX_Caligraphic-Bold.woff +0 -0
- package/server/public/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/server/public/KaTeX_Caligraphic-Regular.eot +0 -0
- package/server/public/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/server/public/KaTeX_Caligraphic-Regular.woff +0 -0
- package/server/public/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/server/public/KaTeX_Fraktur-Bold.eot +0 -0
- package/server/public/KaTeX_Fraktur-Bold.ttf +0 -0
- package/server/public/KaTeX_Fraktur-Bold.woff +0 -0
- package/server/public/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/server/public/KaTeX_Fraktur-Regular.eot +0 -0
- package/server/public/KaTeX_Fraktur-Regular.ttf +0 -0
- package/server/public/KaTeX_Fraktur-Regular.woff +0 -0
- package/server/public/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/server/public/KaTeX_Main-Bold.eot +0 -0
- package/server/public/KaTeX_Main-Bold.ttf +0 -0
- package/server/public/KaTeX_Main-Bold.woff +0 -0
- package/server/public/KaTeX_Main-Bold.woff2 +0 -0
- package/server/public/KaTeX_Main-Italic.eot +0 -0
- package/server/public/KaTeX_Main-Italic.ttf +0 -0
- package/server/public/KaTeX_Main-Italic.woff +0 -0
- package/server/public/KaTeX_Main-Italic.woff2 +0 -0
- package/server/public/KaTeX_Main-Regular.eot +0 -0
- package/server/public/KaTeX_Main-Regular.ttf +0 -0
- package/server/public/KaTeX_Main-Regular.woff +0 -0
- package/server/public/KaTeX_Main-Regular.woff2 +0 -0
- package/server/public/KaTeX_Math-Italic.eot +0 -0
- package/server/public/KaTeX_Math-Italic.ttf +0 -0
- package/server/public/KaTeX_Math-Italic.woff +0 -0
- package/server/public/KaTeX_Math-Italic.woff2 +0 -0
- package/server/public/KaTeX_SansSerif-Regular.eot +0 -0
- package/server/public/KaTeX_SansSerif-Regular.ttf +0 -0
- package/server/public/KaTeX_SansSerif-Regular.woff +0 -0
- package/server/public/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/server/public/KaTeX_Script-Regular.eot +0 -0
- package/server/public/KaTeX_Script-Regular.ttf +0 -0
- package/server/public/KaTeX_Script-Regular.woff +0 -0
- package/server/public/KaTeX_Script-Regular.woff2 +0 -0
- package/server/public/KaTeX_Size1-Regular.eot +0 -0
- package/server/public/KaTeX_Size1-Regular.ttf +0 -0
- package/server/public/KaTeX_Size1-Regular.woff +0 -0
- package/server/public/KaTeX_Size1-Regular.woff2 +0 -0
- package/server/public/KaTeX_Size2-Regular.eot +0 -0
- package/server/public/KaTeX_Size2-Regular.ttf +0 -0
- package/server/public/KaTeX_Size2-Regular.woff +0 -0
- package/server/public/KaTeX_Size2-Regular.woff2 +0 -0
- package/server/public/KaTeX_Size3-Regular.eot +0 -0
- package/server/public/KaTeX_Size3-Regular.ttf +0 -0
- package/server/public/KaTeX_Size3-Regular.woff +0 -0
- package/server/public/KaTeX_Size4-Regular.eot +0 -0
- package/server/public/KaTeX_Size4-Regular.ttf +0 -0
- package/server/public/KaTeX_Size4-Regular.woff +0 -0
- package/server/public/KaTeX_Size4-Regular.woff2 +0 -0
- package/server/public/KaTeX_Typewriter-Regular.eot +0 -0
- package/server/public/KaTeX_Typewriter-Regular.ttf +0 -0
- package/server/public/KaTeX_Typewriter-Regular.woff +0 -0
- package/server/public/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/server/public/PlusJakartaSans.ttf +0 -0
- package/server/public/_index.html +45 -0
- package/server/public/agent-animation.webm +0 -0
- package/server/public/agent-static.png +0 -0
- package/server/public/anthropic.png +0 -0
- package/server/public/anything-llm-dark.png +0 -0
- package/server/public/anything-llm-light.png +0 -0
- package/server/public/anything-llm.png +0 -0
- package/server/public/apipie.png +0 -0
- package/server/public/assets/404-aca8e9d6.js +1 -0
- package/server/public/assets/Brain-24e386d5.js +1 -0
- package/server/public/assets/Browser-1820fad0.js +1 -0
- package/server/public/assets/ChatText-35275002.js +1 -0
- package/server/public/assets/Check-7e83fb0d.js +1 -0
- package/server/public/assets/Copy-d323e545.js +1 -0
- package/server/public/assets/Database-f1a76329.js +1 -0
- package/server/public/assets/Eye-9f033dc0.js +1 -0
- package/server/public/assets/File-b92df2f3.js +1 -0
- package/server/public/assets/Gauge-e6762f4d.js +1 -0
- package/server/public/assets/Hammer-05b5ccc7.js +1 -0
- package/server/public/assets/Plug-7d951c7d.js +1 -0
- package/server/public/assets/PlusCircle-31c6a8d8.js +1 -0
- package/server/public/assets/RunDetailPage-edfdbd4d.js +1 -0
- package/server/public/assets/RunHistoryPage-732dae26.js +1 -0
- package/server/public/assets/Stop-4b47ae05.js +1 -0
- package/server/public/assets/Trans-36b04c7b.js +1 -0
- package/server/public/assets/WarningCircle-27467274.js +1 -0
- package/server/public/assets/XCircle-edfe554c.js +1 -0
- package/server/public/assets/admin-04b020fe.js +1 -0
- package/server/public/assets/agentFlows-e4124dd3.js +1 -0
- package/server/public/assets/anything-llm-infinity-0d7244a1.js +1 -0
- package/server/public/assets/communityHub-aba61686.js +1 -0
- package/server/public/assets/cron-2ad9194f.js +1 -0
- package/server/public/assets/files-493643b0.js +23 -0
- package/server/public/assets/github-dark-57c241de.js +1 -0
- package/server/public/assets/index-08cd0bc2.js +9 -0
- package/server/public/assets/index-0bf8ea25.js +1 -0
- package/server/public/assets/index-25b2660c.js +1 -0
- package/server/public/assets/index-2a7c0b04.js +1 -0
- package/server/public/assets/index-3643e990.js +1 -0
- package/server/public/assets/index-3761d55d.js +1 -0
- package/server/public/assets/index-4b5e1c76.js +5 -0
- package/server/public/assets/index-4fb4d421.js +2 -0
- package/server/public/assets/index-56bb11a0.js +1 -0
- package/server/public/assets/index-5c320a5d.js +1 -0
- package/server/public/assets/index-62160652.js +3 -0
- package/server/public/assets/index-62fee0f9.js +4 -0
- package/server/public/assets/index-65801ac6.js +1 -0
- package/server/public/assets/index-71027183.js +1 -0
- package/server/public/assets/index-72832304.js +18 -0
- package/server/public/assets/index-7b0ea06b.js +14 -0
- package/server/public/assets/index-8132c765.js +1 -0
- package/server/public/assets/index-837868b3.js +1 -0
- package/server/public/assets/index-86e8a6b4.js +1 -0
- package/server/public/assets/index-8ba96f42.js +1 -0
- package/server/public/assets/index-8e43159f.js +1 -0
- package/server/public/assets/index-92574f3a.js +1 -0
- package/server/public/assets/index-925792fe.js +2 -0
- package/server/public/assets/index-92d3b7bc.js +1 -0
- package/server/public/assets/index-994c849a.js +1 -0
- package/server/public/assets/index-9f71774b.js +1 -0
- package/server/public/assets/index-9f7dabd6.js +1 -0
- package/server/public/assets/index-a0e2be61.js +1 -0
- package/server/public/assets/index-a6ac5511.js +1 -0
- package/server/public/assets/index-a6c0d98a.js +1 -0
- package/server/public/assets/index-aa687cfe.js +3 -0
- package/server/public/assets/index-ab35fb74.js +1 -0
- package/server/public/assets/index-ab72b353.js +4 -0
- package/server/public/assets/index-ad8e77d2.js +5 -0
- package/server/public/assets/index-c07cc087.js +110 -0
- package/server/public/assets/index-c22f7da1.js +1 -0
- package/server/public/assets/index-c9b59c35.js +1 -0
- package/server/public/assets/index-d59c6d7f.js +1 -0
- package/server/public/assets/index-d69f2e09.js +1 -0
- package/server/public/assets/index-e5b911ea.js +1 -0
- package/server/public/assets/index-e6c540e1.js +1 -0
- package/server/public/assets/index-f86e167c.js +4 -0
- package/server/public/assets/index-f984ef26.js +1 -0
- package/server/public/assets/index-fb26b60a.js +1 -0
- package/server/public/assets/index-fd922432.js +1 -0
- package/server/public/assets/main-8ad4162f.js +1 -0
- package/server/public/assets/mcpServers-957b1f1c.js +1 -0
- package/server/public/assets/moment-3ad2e1a6.js +10 -0
- package/server/public/assets/ort.min-faca3c2b.js +1827 -0
- package/server/public/assets/piper-o91UDS6e-0c78e94e.js +4 -0
- package/server/public/assets/purify-6b86d6dc.js +26 -0
- package/server/public/assets/react-beautiful-dnd.esm-86e87aba.js +68 -0
- package/server/public/assets/truncate-352eb33b.js +1 -0
- package/server/public/assets/types-e90e1137.js +1 -0
- package/server/public/assets/usePolling-417bb099.js +1 -0
- package/server/public/assets/voices_static-D_OtJDHM-5cdb0950.js +1 -0
- package/server/public/assets/worker-8f433525.js +1 -0
- package/server/public/azure.png +0 -0
- package/server/public/baidu.png +0 -0
- package/server/public/bedrock.png +0 -0
- package/server/public/bg.png +0 -0
- package/server/public/bing.png +0 -0
- package/server/public/cerebras.png +0 -0
- package/server/public/cohere.png +0 -0
- package/server/public/cometapi.png +0 -0
- package/server/public/community-hub.png +0 -0
- package/server/public/confluence.jpeg +0 -0
- package/server/public/deepseek.png +0 -0
- package/server/public/docker-model-runner.png +0 -0
- package/server/public/dpais.png +0 -0
- package/server/public/drupalwiki.jpg +0 -0
- package/server/public/duckduckgo.png +0 -0
- package/server/public/elevenlabs.png +0 -0
- package/server/public/embed/anythingllm-chat-widget.min.css +1 -0
- package/server/public/embed/anythingllm-chat-widget.min.js +37 -0
- package/server/public/exa.png +0 -0
- package/server/public/favicon.ico +0 -0
- package/server/public/favicon.png +0 -0
- package/server/public/file-system.png +0 -0
- package/server/public/files.css +1 -0
- package/server/public/fonts/PlusJakartaSans.ttf +0 -0
- package/server/public/foundry-local.png +0 -0
- package/server/public/gemini.png +0 -0
- package/server/public/generate-charts.png +0 -0
- package/server/public/generate-save-files.png +0 -0
- package/server/public/generic-openai.png +0 -0
- package/server/public/giteeai.png +0 -0
- package/server/public/github-dark.css +10 -0
- package/server/public/github.css +19 -0
- package/server/public/github.svg +4 -0
- package/server/public/gitlab.svg +7 -0
- package/server/public/gmail.png +0 -0
- package/server/public/google-calendar.png +0 -0
- package/server/public/gplay-badge.svg +55 -0
- package/server/public/huggingface.png +0 -0
- package/server/public/index.css +1 -0
- package/server/public/index.js +1739 -0
- package/server/public/koboldcpp.png +0 -0
- package/server/public/lancedb.png +0 -0
- package/server/public/lemonade.png +0 -0
- package/server/public/link.svg +1 -0
- package/server/public/litellm.png +0 -0
- package/server/public/lmstudio.png +0 -0
- package/server/public/localai.png +0 -0
- package/server/public/login-logo-light.svg +45 -0
- package/server/public/login-logo.svg +45 -0
- package/server/public/manifest.json +13 -0
- package/server/public/mcp-logo.svg +1 -0
- package/server/public/milvus.png +0 -0
- package/server/public/minimax.png +0 -0
- package/server/public/mistral.jpeg +0 -0
- package/server/public/moonshotai.png +0 -0
- package/server/public/mssql.png +0 -0
- package/server/public/mysql.png +0 -0
- package/server/public/nvidia-nim.png +0 -0
- package/server/public/obsidian.png +0 -0
- package/server/public/ollama.png +0 -0
- package/server/public/openai.png +0 -0
- package/server/public/openrouter.jpeg +0 -0
- package/server/public/outlook.png +0 -0
- package/server/public/paperless-ngx.jpeg +0 -0
- package/server/public/perplexity.png +0 -0
- package/server/public/pgvector.png +0 -0
- package/server/public/piper.png +0 -0
- package/server/public/privatemode.png +0 -0
- package/server/public/qdrant.png +0 -0
- package/server/public/rag-memory.png +0 -0
- package/server/public/robots.txt +2 -0
- package/server/public/router-animation.webm +0 -0
- package/server/public/sambanova.png +0 -0
- package/server/public/scrape-websites.png +0 -0
- package/server/public/searchapi.png +0 -0
- package/server/public/searxng.png +0 -0
- package/server/public/serpapi.png +0 -0
- package/server/public/serper.png +0 -0
- package/server/public/serply.png +0 -0
- package/server/public/service-workers/push-notifications.js +26 -0
- package/server/public/sql-agent.png +0 -0
- package/server/public/tavily.svg +1 -0
- package/server/public/text-generation-webui.png +0 -0
- package/server/public/thinking-animation.webm +0 -0
- package/server/public/thinking-static.png +0 -0
- package/server/public/togetherai.png +0 -0
- package/server/public/view-summarize.png +0 -0
- package/server/public/voyageai.png +0 -0
- package/server/public/weaviate.png +0 -0
- package/server/public/xai.png +0 -0
- package/server/public/youtube.svg +10 -0
- package/server/public/zai.png +0 -0
- package/server/public/zilliz.png +0 -0
- package/server/utils/AiProviders/anthropic/index.js +372 -0
- package/server/utils/AiProviders/apipie/index.js +386 -0
- package/server/utils/AiProviders/azureOpenAi/index.js +232 -0
- package/server/utils/AiProviders/bedrock/index.js +787 -0
- package/server/utils/AiProviders/bedrock/utils.js +166 -0
- package/server/utils/AiProviders/cerebras/index.js +314 -0
- package/server/utils/AiProviders/cohere/index.js +251 -0
- package/server/utils/AiProviders/cometapi/constants.js +39 -0
- package/server/utils/AiProviders/cometapi/index.js +445 -0
- package/server/utils/AiProviders/deepseek/index.js +180 -0
- package/server/utils/AiProviders/dellProAiStudio/index.js +217 -0
- package/server/utils/AiProviders/dockerModelRunner/index.js +520 -0
- package/server/utils/AiProviders/fireworksAi/index.js +273 -0
- package/server/utils/AiProviders/foundry/index.js +475 -0
- package/server/utils/AiProviders/gemini/defaultModels.js +74 -0
- package/server/utils/AiProviders/gemini/index.js +457 -0
- package/server/utils/AiProviders/gemini/syncStaticLists.mjs +48 -0
- package/server/utils/AiProviders/genericOpenAi/index.js +485 -0
- package/server/utils/AiProviders/giteeai/index.js +245 -0
- package/server/utils/AiProviders/groq/index.js +257 -0
- package/server/utils/AiProviders/huggingface/index.js +165 -0
- package/server/utils/AiProviders/koboldCPP/index.js +264 -0
- package/server/utils/AiProviders/lemonade/index.js +463 -0
- package/server/utils/AiProviders/liteLLM/index.js +201 -0
- package/server/utils/AiProviders/lmStudio/index.js +383 -0
- package/server/utils/AiProviders/localAi/index.js +198 -0
- package/server/utils/AiProviders/minimax/index.js +165 -0
- package/server/utils/AiProviders/mistral/index.js +191 -0
- package/server/utils/AiProviders/modelMap/index.js +212 -0
- package/server/utils/AiProviders/modelMap/legacy.js +162 -0
- package/server/utils/AiProviders/modelRouter/index.js +170 -0
- package/server/utils/AiProviders/moonshotAi/index.js +176 -0
- package/server/utils/AiProviders/novita/index.js +460 -0
- package/server/utils/AiProviders/nvidiaNim/index.js +253 -0
- package/server/utils/AiProviders/ollama/index.js +516 -0
- package/server/utils/AiProviders/openAi/index.js +301 -0
- package/server/utils/AiProviders/openRouter/index.js +567 -0
- package/server/utils/AiProviders/perplexity/index.js +304 -0
- package/server/utils/AiProviders/perplexity/models.js +24 -0
- package/server/utils/AiProviders/perplexity/scripts/chat_models.txt +6 -0
- package/server/utils/AiProviders/perplexity/scripts/parse.mjs +49 -0
- package/server/utils/AiProviders/ppio/index.js +274 -0
- package/server/utils/AiProviders/privatemode/index.js +220 -0
- package/server/utils/AiProviders/sambanova/index.js +273 -0
- package/server/utils/AiProviders/textGenWebUI/index.js +197 -0
- package/server/utils/AiProviders/togetherAi/index.js +263 -0
- package/server/utils/AiProviders/xai/index.js +200 -0
- package/server/utils/AiProviders/zai/index.js +184 -0
- package/server/utils/BackgroundWorkers/index.js +432 -0
- package/server/utils/DocumentManager/index.js +72 -0
- package/server/utils/EmbeddingEngines/azureOpenAi/index.js +115 -0
- package/server/utils/EmbeddingEngines/cohere/index.js +91 -0
- package/server/utils/EmbeddingEngines/gemini/index.js +136 -0
- package/server/utils/EmbeddingEngines/genericOpenAi/index.js +128 -0
- package/server/utils/EmbeddingEngines/lemonade/index.js +99 -0
- package/server/utils/EmbeddingEngines/liteLLM/index.js +102 -0
- package/server/utils/EmbeddingEngines/lmstudio/index.js +122 -0
- package/server/utils/EmbeddingEngines/localAi/index.js +122 -0
- package/server/utils/EmbeddingEngines/mistral/index.js +40 -0
- package/server/utils/EmbeddingEngines/native/constants.js +63 -0
- package/server/utils/EmbeddingEngines/native/index.js +290 -0
- package/server/utils/EmbeddingEngines/ollama/index.js +136 -0
- package/server/utils/EmbeddingEngines/openAi/index.js +102 -0
- package/server/utils/EmbeddingEngines/openRouter/index.js +131 -0
- package/server/utils/EmbeddingEngines/voyageAi/index.js +71 -0
- package/server/utils/EmbeddingRerankers/native/index.js +257 -0
- package/server/utils/EmbeddingWorkerManager.js +202 -0
- package/server/utils/EncryptionManager/index.js +85 -0
- package/server/utils/MCP/hypervisor/index.js +554 -0
- package/server/utils/MCP/index.js +269 -0
- package/server/utils/PasswordRecovery/index.js +103 -0
- package/server/utils/PushNotifications/index.js +228 -0
- package/server/utils/TextSplitter/index.js +206 -0
- package/server/utils/TextToSpeech/elevenLabs/index.js +54 -0
- package/server/utils/TextToSpeech/index.js +18 -0
- package/server/utils/TextToSpeech/openAi/index.js +29 -0
- package/server/utils/TextToSpeech/openAiGeneric/index.js +58 -0
- package/server/utils/agentFlows/executor.js +233 -0
- package/server/utils/agentFlows/executors/api-call.js +60 -0
- package/server/utils/agentFlows/executors/llm-instruction.js +47 -0
- package/server/utils/agentFlows/executors/web-scraping.js +110 -0
- package/server/utils/agentFlows/flowTypes.js +85 -0
- package/server/utils/agentFlows/index.js +288 -0
- package/server/utils/agents/aibitat/error.js +18 -0
- package/server/utils/agents/aibitat/example/beginner-chat.js +56 -0
- package/server/utils/agents/aibitat/example/blog-post-coding.js +55 -0
- package/server/utils/agents/aibitat/example/websocket/index.html +67 -0
- package/server/utils/agents/aibitat/example/websocket/websock-branding-collab.js +100 -0
- package/server/utils/agents/aibitat/example/websocket/websock-multi-turn-chat.js +91 -0
- package/server/utils/agents/aibitat/index.js +1437 -0
- package/server/utils/agents/aibitat/plugins/chat-history.js +210 -0
- package/server/utils/agents/aibitat/plugins/cli.js +134 -0
- package/server/utils/agents/aibitat/plugins/create-files/assets/anything-llm-invert.png +0 -0
- package/server/utils/agents/aibitat/plugins/create-files/assets/anything-llm.png +0 -0
- package/server/utils/agents/aibitat/plugins/create-files/docx/create-docx-file.js +301 -0
- package/server/utils/agents/aibitat/plugins/create-files/docx/test-themes.js +298 -0
- package/server/utils/agents/aibitat/plugins/create-files/docx/utils.js +1095 -0
- package/server/utils/agents/aibitat/plugins/create-files/index.js +23 -0
- package/server/utils/agents/aibitat/plugins/create-files/lib.js +300 -0
- package/server/utils/agents/aibitat/plugins/create-files/pdf/create-pdf-file.js +138 -0
- package/server/utils/agents/aibitat/plugins/create-files/pdf/utils.js +70 -0
- package/server/utils/agents/aibitat/plugins/create-files/pptx/create-presentation.js +342 -0
- package/server/utils/agents/aibitat/plugins/create-files/pptx/section-agent.js +257 -0
- package/server/utils/agents/aibitat/plugins/create-files/pptx/test-themes.js +143 -0
- package/server/utils/agents/aibitat/plugins/create-files/pptx/themes.js +181 -0
- package/server/utils/agents/aibitat/plugins/create-files/pptx/utils.js +378 -0
- package/server/utils/agents/aibitat/plugins/create-files/text/create-text-file.js +158 -0
- package/server/utils/agents/aibitat/plugins/create-files/xlsx/create-excel-file.js +362 -0
- package/server/utils/agents/aibitat/plugins/create-files/xlsx/utils.js +333 -0
- package/server/utils/agents/aibitat/plugins/file-history.js +37 -0
- package/server/utils/agents/aibitat/plugins/filesystem/copy-file.js +127 -0
- package/server/utils/agents/aibitat/plugins/filesystem/create-directory.js +84 -0
- package/server/utils/agents/aibitat/plugins/filesystem/edit-file.js +133 -0
- package/server/utils/agents/aibitat/plugins/filesystem/get-file-info.js +75 -0
- package/server/utils/agents/aibitat/plugins/filesystem/index.js +33 -0
- package/server/utils/agents/aibitat/plugins/filesystem/lib.js +787 -0
- package/server/utils/agents/aibitat/plugins/filesystem/list-directory.js +175 -0
- package/server/utils/agents/aibitat/plugins/filesystem/move-file.js +95 -0
- package/server/utils/agents/aibitat/plugins/filesystem/read-multiple-files.js +157 -0
- package/server/utils/agents/aibitat/plugins/filesystem/read-text-file.js +142 -0
- package/server/utils/agents/aibitat/plugins/filesystem/search-files.js +469 -0
- package/server/utils/agents/aibitat/plugins/filesystem/write-text-file.js +90 -0
- package/server/utils/agents/aibitat/plugins/gmail/account/gmail-get-mailbox-stats.js +75 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-create-draft-reply.js +220 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-create-draft.js +217 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-delete-draft.js +87 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-get-draft.js +84 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-list-drafts.js +96 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-send-draft.js +94 -0
- package/server/utils/agents/aibitat/plugins/gmail/drafts/gmail-update-draft.js +217 -0
- package/server/utils/agents/aibitat/plugins/gmail/index.js +73 -0
- package/server/utils/agents/aibitat/plugins/gmail/lib.js +573 -0
- package/server/utils/agents/aibitat/plugins/gmail/search/gmail-get-inbox.js +104 -0
- package/server/utils/agents/aibitat/plugins/gmail/search/gmail-read-thread.js +122 -0
- package/server/utils/agents/aibitat/plugins/gmail/search/gmail-search.js +121 -0
- package/server/utils/agents/aibitat/plugins/gmail/send/gmail-reply-to-thread.js +238 -0
- package/server/utils/agents/aibitat/plugins/gmail/send/gmail-send-email.js +242 -0
- package/server/utils/agents/aibitat/plugins/gmail/threads/gmail-mark-read.js +87 -0
- package/server/utils/agents/aibitat/plugins/gmail/threads/gmail-mark-unread.js +87 -0
- package/server/utils/agents/aibitat/plugins/gmail/threads/gmail-move-to-archive.js +89 -0
- package/server/utils/agents/aibitat/plugins/gmail/threads/gmail-move-to-inbox.js +89 -0
- package/server/utils/agents/aibitat/plugins/gmail/threads/gmail-move-to-trash.js +89 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/calendars/gcal-get-calendar.js +79 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/calendars/gcal-list-calendars.js +82 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-create-event.js +233 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-get-event.js +116 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-get-events-for-day.js +117 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-get-events.js +159 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-get-upcoming-events.js +249 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-quick-add.js +114 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-set-my-status.js +125 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/events/gcal-update-event.js +173 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/index.js +40 -0
- package/server/utils/agents/aibitat/plugins/google-calendar/lib.js +288 -0
- package/server/utils/agents/aibitat/plugins/http-socket.js +249 -0
- package/server/utils/agents/aibitat/plugins/index.js +47 -0
- package/server/utils/agents/aibitat/plugins/memory.js +167 -0
- package/server/utils/agents/aibitat/plugins/outlook/account/outlook-get-mailbox-stats.js +78 -0
- package/server/utils/agents/aibitat/plugins/outlook/drafts/outlook-create-draft.js +232 -0
- package/server/utils/agents/aibitat/plugins/outlook/drafts/outlook-delete-draft.js +86 -0
- package/server/utils/agents/aibitat/plugins/outlook/drafts/outlook-list-drafts.js +80 -0
- package/server/utils/agents/aibitat/plugins/outlook/drafts/outlook-send-draft.js +82 -0
- package/server/utils/agents/aibitat/plugins/outlook/drafts/outlook-update-draft.js +132 -0
- package/server/utils/agents/aibitat/plugins/outlook/index.js +45 -0
- package/server/utils/agents/aibitat/plugins/outlook/lib.js +1413 -0
- package/server/utils/agents/aibitat/plugins/outlook/search/outlook-get-inbox.js +75 -0
- package/server/utils/agents/aibitat/plugins/outlook/search/outlook-read-thread.js +131 -0
- package/server/utils/agents/aibitat/plugins/outlook/search/outlook-search.js +101 -0
- package/server/utils/agents/aibitat/plugins/outlook/send/outlook-send-email.js +222 -0
- package/server/utils/agents/aibitat/plugins/rechart.js +114 -0
- package/server/utils/agents/aibitat/plugins/request-user-input.js +265 -0
- package/server/utils/agents/aibitat/plugins/router-classifier.js +122 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MSSQL.js +114 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MySQL.js +83 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/Postgresql.js +75 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/index.js +80 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/utils.js +182 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/get-table-schema.js +115 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/index.js +21 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/list-database.js +49 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/list-table.js +105 -0
- package/server/utils/agents/aibitat/plugins/sql-agent/query.js +101 -0
- package/server/utils/agents/aibitat/plugins/summarize.js +189 -0
- package/server/utils/agents/aibitat/plugins/web-browsing.js +1182 -0
- package/server/utils/agents/aibitat/plugins/web-scraping.js +158 -0
- package/server/utils/agents/aibitat/plugins/websocket.js +361 -0
- package/server/utils/agents/aibitat/providers/ai-provider.js +706 -0
- package/server/utils/agents/aibitat/providers/anthropic.js +490 -0
- package/server/utils/agents/aibitat/providers/apipie.js +99 -0
- package/server/utils/agents/aibitat/providers/azure.js +122 -0
- package/server/utils/agents/aibitat/providers/bedrock.js +456 -0
- package/server/utils/agents/aibitat/providers/cerebras.js +208 -0
- package/server/utils/agents/aibitat/providers/cohere.js +269 -0
- package/server/utils/agents/aibitat/providers/cometapi.js +104 -0
- package/server/utils/agents/aibitat/providers/deepseek.js +223 -0
- package/server/utils/agents/aibitat/providers/dellProAiStudio.js +106 -0
- package/server/utils/agents/aibitat/providers/dockerModelRunner.js +189 -0
- package/server/utils/agents/aibitat/providers/fireworksai.js +101 -0
- package/server/utils/agents/aibitat/providers/foundry.js +112 -0
- package/server/utils/agents/aibitat/providers/gemini.js +450 -0
- package/server/utils/agents/aibitat/providers/genericOpenAi.js +206 -0
- package/server/utils/agents/aibitat/providers/giteeai.js +94 -0
- package/server/utils/agents/aibitat/providers/groq.js +184 -0
- package/server/utils/agents/aibitat/providers/helpers/classes.js +16 -0
- package/server/utils/agents/aibitat/providers/helpers/tooled.js +384 -0
- package/server/utils/agents/aibitat/providers/helpers/untooled.js +437 -0
- package/server/utils/agents/aibitat/providers/index.js +77 -0
- package/server/utils/agents/aibitat/providers/koboldcpp.js +103 -0
- package/server/utils/agents/aibitat/providers/lemonade.js +213 -0
- package/server/utils/agents/aibitat/providers/litellm.js +186 -0
- package/server/utils/agents/aibitat/providers/lmstudio.js +195 -0
- package/server/utils/agents/aibitat/providers/localai.js +190 -0
- package/server/utils/agents/aibitat/providers/minimax.js +194 -0
- package/server/utils/agents/aibitat/providers/mistral.js +103 -0
- package/server/utils/agents/aibitat/providers/moonshotAi.js +97 -0
- package/server/utils/agents/aibitat/providers/novita.js +188 -0
- package/server/utils/agents/aibitat/providers/nvidiaNim.js +101 -0
- package/server/utils/agents/aibitat/providers/ollama.js +606 -0
- package/server/utils/agents/aibitat/providers/openai.js +345 -0
- package/server/utils/agents/aibitat/providers/openrouter.js +195 -0
- package/server/utils/agents/aibitat/providers/perplexity.js +99 -0
- package/server/utils/agents/aibitat/providers/ppio.js +104 -0
- package/server/utils/agents/aibitat/providers/privatemode.js +107 -0
- package/server/utils/agents/aibitat/providers/sambanova.js +94 -0
- package/server/utils/agents/aibitat/providers/textgenwebui.js +99 -0
- package/server/utils/agents/aibitat/providers/togetherai.js +100 -0
- package/server/utils/agents/aibitat/providers/xai.js +99 -0
- package/server/utils/agents/aibitat/providers/zai.js +97 -0
- package/server/utils/agents/aibitat/utils/dedupe.js +152 -0
- package/server/utils/agents/aibitat/utils/summarize.js +63 -0
- package/server/utils/agents/aibitat/utils/toolReranker.js +225 -0
- package/server/utils/agents/defaults.js +196 -0
- package/server/utils/agents/ephemeral.js +790 -0
- package/server/utils/agents/imported-manifest.schema.json +158 -0
- package/server/utils/agents/imported.js +317 -0
- package/server/utils/agents/index.js +883 -0
- package/server/utils/boot/MetaGenerator.js +376 -0
- package/server/utils/boot/eagerLoadContextWindows.js +40 -0
- package/server/utils/boot/index.js +90 -0
- package/server/utils/boot/markOnboarded.js +52 -0
- package/server/utils/chats/agents.js +111 -0
- package/server/utils/chats/apiChatHandler.js +864 -0
- package/server/utils/chats/commands/reset.js +37 -0
- package/server/utils/chats/embed.js +301 -0
- package/server/utils/chats/index.js +128 -0
- package/server/utils/chats/openaiCompatible.js +537 -0
- package/server/utils/chats/stream.js +376 -0
- package/server/utils/collectorApi/index.js +319 -0
- package/server/utils/comKey/index.js +86 -0
- package/server/utils/database/index.js +83 -0
- package/server/utils/files/index.js +519 -0
- package/server/utils/files/logo.js +117 -0
- package/server/utils/files/multer.js +178 -0
- package/server/utils/files/pfp.js +63 -0
- package/server/utils/files/purgeDocument.js +91 -0
- package/server/utils/helpers/admin/index.js +56 -0
- package/server/utils/helpers/agents.js +35 -0
- package/server/utils/helpers/camelcase.js +143 -0
- package/server/utils/helpers/chat/LLMPerformanceMonitor.js +113 -0
- package/server/utils/helpers/chat/convertTo.js +256 -0
- package/server/utils/helpers/chat/index.js +448 -0
- package/server/utils/helpers/chat/responses.js +383 -0
- package/server/utils/helpers/customModels.js +1142 -0
- package/server/utils/helpers/index.js +716 -0
- package/server/utils/helpers/portAvailabilityChecker.js +46 -0
- package/server/utils/helpers/search.js +94 -0
- package/server/utils/helpers/shell.js +25 -0
- package/server/utils/helpers/tiktoken.js +107 -0
- package/server/utils/helpers/updateENV.js +1399 -0
- package/server/utils/http/index.js +141 -0
- package/server/utils/logger/index.js +66 -0
- package/server/utils/memories/index.js +139 -0
- package/server/utils/middleware/chatHistoryViewable.js +18 -0
- package/server/utils/middleware/communityHubDownloadsEnabled.js +77 -0
- package/server/utils/middleware/embedMiddleware.js +178 -0
- package/server/utils/middleware/featureFlagEnabled.js +24 -0
- package/server/utils/middleware/isSupportedRepoProviders.js +12 -0
- package/server/utils/middleware/multiUserProtected.js +107 -0
- package/server/utils/middleware/requireFeature.js +46 -0
- package/server/utils/middleware/simpleSSOEnabled.js +84 -0
- package/server/utils/middleware/validApiKey.js +29 -0
- package/server/utils/middleware/validBrowserExtensionApiKey.js +51 -0
- package/server/utils/middleware/validWorkspace.js +52 -0
- package/server/utils/middleware/validatedRequest.js +111 -0
- package/server/utils/middleware/workspaceDeletionProtection.js +18 -0
- package/server/utils/prisma/PRISMA.md +47 -0
- package/server/utils/prisma/index.js +13 -0
- package/server/utils/router/index.js +653 -0
- package/server/utils/telegramBot/chat/agent.js +425 -0
- package/server/utils/telegramBot/chat/stream.js +471 -0
- package/server/utils/telegramBot/constants.js +23 -0
- package/server/utils/telegramBot/index.js +844 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleAbort.js +15 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleHelp.js +15 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleHistory.js +80 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleNewThread.js +35 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleProof.js +202 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleReset.js +32 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleStart.js +19 -0
- package/server/utils/telegramBot/utils/commands/handlers/handleStatus.js +80 -0
- package/server/utils/telegramBot/utils/commands/handlers/showModelMenu.js +98 -0
- package/server/utils/telegramBot/utils/commands/handlers/showThreadMenu.js +120 -0
- package/server/utils/telegramBot/utils/commands/handlers/showWorkspaceMenu.js +84 -0
- package/server/utils/telegramBot/utils/commands/index.js +125 -0
- package/server/utils/telegramBot/utils/format.js +225 -0
- package/server/utils/telegramBot/utils/index.js +203 -0
- package/server/utils/telegramBot/utils/media.js +163 -0
- package/server/utils/telegramBot/utils/messageQueue.js +53 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleBackSources.js +16 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleBackWorkspaces.js +18 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleModelCancel.js +14 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleModelPagination.js +24 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleModelSelect.js +52 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleSourcePagination.js +24 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleSourceSelect.js +106 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleThreadPagination.js +26 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleThreadSelect.js +43 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleToolApproval.js +104 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleWorkspaceCreate.js +33 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleWorkspacePagination.js +26 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/handleWorkspaceSelect.js +24 -0
- package/server/utils/telegramBot/utils/navigation/callbacks/index.js +59 -0
- package/server/utils/telegramBot/utils/navigation/index.js +36 -0
- package/server/utils/telegramBot/utils/verification.js +171 -0
- package/server/utils/vectorDbProviders/astra/ASTRA_SETUP.md +22 -0
- package/server/utils/vectorDbProviders/astra/index.js +474 -0
- package/server/utils/vectorDbProviders/base.js +202 -0
- package/server/utils/vectorDbProviders/chroma/index.js +484 -0
- package/server/utils/vectorDbProviders/chromacloud/index.js +158 -0
- package/server/utils/vectorDbProviders/lance/index.js +506 -0
- package/server/utils/vectorDbProviders/milvus/MILVUS_SETUP.md +40 -0
- package/server/utils/vectorDbProviders/milvus/index.js +434 -0
- package/server/utils/vectorDbProviders/pgvector/SETUP.md +125 -0
- package/server/utils/vectorDbProviders/pgvector/index.js +850 -0
- package/server/utils/vectorDbProviders/pinecone/PINECONE_SETUP.md +24 -0
- package/server/utils/vectorDbProviders/pinecone/index.js +317 -0
- package/server/utils/vectorDbProviders/qdrant/QDRANT_SETUP.md +17 -0
- package/server/utils/vectorDbProviders/qdrant/index.js +442 -0
- package/server/utils/vectorDbProviders/weaviate/WEAVIATE_SETUP.md +17 -0
- package/server/utils/vectorDbProviders/weaviate/index.js +510 -0
- package/server/utils/vectorDbProviders/zilliz/index.js +36 -0
- package/server/utils/vectorStore/resetAllVectorStores.js +59 -0
- package/server/yarn.lock +10702 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const {
|
|
2
|
+
toChunks,
|
|
3
|
+
maximumChunkLength,
|
|
4
|
+
reportEmbeddingProgress,
|
|
5
|
+
} = require("../../helpers");
|
|
6
|
+
|
|
7
|
+
class LocalAiEmbedder {
|
|
8
|
+
constructor() {
|
|
9
|
+
if (!process.env.EMBEDDING_BASE_PATH)
|
|
10
|
+
throw new Error("No embedding base path was set.");
|
|
11
|
+
if (!process.env.EMBEDDING_MODEL_PREF)
|
|
12
|
+
throw new Error("No embedding model was set.");
|
|
13
|
+
|
|
14
|
+
this.className = "LocalAiEmbedder";
|
|
15
|
+
const { OpenAI: OpenAIApi } = require("openai");
|
|
16
|
+
this.model = process.env.EMBEDDING_MODEL_PREF;
|
|
17
|
+
this.openai = new OpenAIApi({
|
|
18
|
+
baseURL: process.env.EMBEDDING_BASE_PATH,
|
|
19
|
+
apiKey: process.env.LOCAL_AI_API_KEY ?? null,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Limit of how many strings we can process in a single pass to stay with resource or network limits
|
|
23
|
+
this.maxConcurrentChunks = 50;
|
|
24
|
+
this.embeddingMaxChunkLength = maximumChunkLength();
|
|
25
|
+
|
|
26
|
+
this.log(
|
|
27
|
+
`Initialized with ${this.model} - Max Size: ${this.embeddingMaxChunkLength}` +
|
|
28
|
+
(this.outputDimensions
|
|
29
|
+
? ` - Output Dimensions: ${this.outputDimensions}`
|
|
30
|
+
: " Assuming default output dimensions")
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
log(text, ...args) {
|
|
35
|
+
console.log(`\x1b[36m[${this.className}]\x1b[0m ${text}`, ...args);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get outputDimensions() {
|
|
39
|
+
if (
|
|
40
|
+
process.env.EMBEDDING_OUTPUT_DIMENSIONS &&
|
|
41
|
+
!isNaN(process.env.EMBEDDING_OUTPUT_DIMENSIONS) &&
|
|
42
|
+
process.env.EMBEDDING_OUTPUT_DIMENSIONS > 0
|
|
43
|
+
)
|
|
44
|
+
return parseInt(process.env.EMBEDDING_OUTPUT_DIMENSIONS);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async embedTextInput(textInput) {
|
|
49
|
+
const result = await this.embedChunks(
|
|
50
|
+
Array.isArray(textInput) ? textInput : [textInput]
|
|
51
|
+
);
|
|
52
|
+
return result?.[0] || [];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async embedChunks(textChunks = []) {
|
|
56
|
+
const embeddingRequests = [];
|
|
57
|
+
let chunksProcessed = 0;
|
|
58
|
+
for (const chunk of toChunks(textChunks, this.maxConcurrentChunks)) {
|
|
59
|
+
embeddingRequests.push(
|
|
60
|
+
new Promise((resolve) => {
|
|
61
|
+
this.openai.embeddings
|
|
62
|
+
.create({
|
|
63
|
+
model: this.model,
|
|
64
|
+
input: chunk,
|
|
65
|
+
dimensions: this.outputDimensions,
|
|
66
|
+
})
|
|
67
|
+
.then((result) => {
|
|
68
|
+
chunksProcessed += chunk.length;
|
|
69
|
+
reportEmbeddingProgress(chunksProcessed, textChunks.length);
|
|
70
|
+
resolve({ data: result?.data, error: null });
|
|
71
|
+
})
|
|
72
|
+
.catch((e) => {
|
|
73
|
+
chunksProcessed += chunk.length;
|
|
74
|
+
reportEmbeddingProgress(chunksProcessed, textChunks.length);
|
|
75
|
+
e.type =
|
|
76
|
+
e?.response?.data?.error?.code ||
|
|
77
|
+
e?.response?.status ||
|
|
78
|
+
"failed_to_embed";
|
|
79
|
+
e.message = e?.response?.data?.error?.message || e.message;
|
|
80
|
+
resolve({ data: [], error: e });
|
|
81
|
+
});
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const { data = [], error = null } = await Promise.all(
|
|
87
|
+
embeddingRequests
|
|
88
|
+
).then((results) => {
|
|
89
|
+
// If any errors were returned from LocalAI abort the entire sequence because the embeddings
|
|
90
|
+
// will be incomplete.
|
|
91
|
+
const errors = results
|
|
92
|
+
.filter((res) => !!res.error)
|
|
93
|
+
.map((res) => res.error)
|
|
94
|
+
.flat();
|
|
95
|
+
if (errors.length > 0) {
|
|
96
|
+
let uniqueErrors = new Set();
|
|
97
|
+
errors.map((error) =>
|
|
98
|
+
uniqueErrors.add(`[${error.type}]: ${error.message}`)
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
data: [],
|
|
103
|
+
error: Array.from(uniqueErrors).join(", "),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
data: results.map((res) => res?.data || []).flat(),
|
|
108
|
+
error: null,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
if (!!error) throw new Error(`LocalAI Failed to embed: ${error}`);
|
|
113
|
+
return data.length > 0 &&
|
|
114
|
+
data.every((embd) => embd.hasOwnProperty("embedding"))
|
|
115
|
+
? data.map((embd) => embd.embedding)
|
|
116
|
+
: null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
module.exports = {
|
|
121
|
+
LocalAiEmbedder,
|
|
122
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class MistralEmbedder {
|
|
2
|
+
constructor() {
|
|
3
|
+
if (!process.env.MISTRAL_API_KEY)
|
|
4
|
+
throw new Error("No Mistral API key was set.");
|
|
5
|
+
|
|
6
|
+
const { OpenAI: OpenAIApi } = require("openai");
|
|
7
|
+
this.openai = new OpenAIApi({
|
|
8
|
+
baseURL: "https://api.mistral.ai/v1",
|
|
9
|
+
apiKey: process.env.MISTRAL_API_KEY ?? null,
|
|
10
|
+
});
|
|
11
|
+
this.model = process.env.EMBEDDING_MODEL_PREF || "mistral-embed";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async embedTextInput(textInput) {
|
|
15
|
+
const result = await this.embedChunks(
|
|
16
|
+
Array.isArray(textInput) ? textInput : [textInput]
|
|
17
|
+
);
|
|
18
|
+
return result?.[0] || [];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async embedChunks(textChunks = []) {
|
|
22
|
+
try {
|
|
23
|
+
const response = await this.openai.embeddings.create({
|
|
24
|
+
model: this.model,
|
|
25
|
+
input: textChunks,
|
|
26
|
+
});
|
|
27
|
+
const embeddings = response?.data?.map((emb) => emb.embedding) || [];
|
|
28
|
+
if (embeddings.length === 0)
|
|
29
|
+
throw new Error("Mistral returned empty embeddings for batch");
|
|
30
|
+
return embeddings;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error("Failed to get embeddings from Mistral.", error.message);
|
|
33
|
+
throw new Error(`Mistral Failed to embed: ${error.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = {
|
|
39
|
+
MistralEmbedder,
|
|
40
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const SUPPORTED_NATIVE_EMBEDDING_MODELS = {
|
|
2
|
+
"Xenova/all-MiniLM-L6-v2": {
|
|
3
|
+
maxConcurrentChunks: 25,
|
|
4
|
+
// Right now, this is NOT the token length, and is instead the number of characters
|
|
5
|
+
// that can be processed in a single pass. So we override to 1,000 characters.
|
|
6
|
+
// roughtly the max number of tokens assuming 2 characters per token. (undershooting)
|
|
7
|
+
// embeddingMaxChunkLength: 512, (from the model card)
|
|
8
|
+
embeddingMaxChunkLength: 1_000,
|
|
9
|
+
chunkPrefix: "",
|
|
10
|
+
queryPrefix: "",
|
|
11
|
+
apiInfo: {
|
|
12
|
+
id: "Xenova/all-MiniLM-L6-v2",
|
|
13
|
+
name: "all-MiniLM-L6-v2",
|
|
14
|
+
description:
|
|
15
|
+
"A lightweight and fast model for embedding text. The default model for AnythingLLM.",
|
|
16
|
+
lang: "English",
|
|
17
|
+
size: "23MB",
|
|
18
|
+
modelCard: "https://huggingface.co/Xenova/all-MiniLM-L6-v2",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
"Xenova/nomic-embed-text-v1": {
|
|
22
|
+
maxConcurrentChunks: 5,
|
|
23
|
+
// Right now, this is NOT the token length, and is instead the number of characters
|
|
24
|
+
// that can be processed in a single pass. So we override to 16,000 characters.
|
|
25
|
+
// roughtly the max number of tokens assuming 2 characters per token. (undershooting)
|
|
26
|
+
// embeddingMaxChunkLength: 8192, (from the model card)
|
|
27
|
+
embeddingMaxChunkLength: 16_000,
|
|
28
|
+
chunkPrefix: "search_document: ",
|
|
29
|
+
queryPrefix: "search_query: ",
|
|
30
|
+
apiInfo: {
|
|
31
|
+
id: "Xenova/nomic-embed-text-v1",
|
|
32
|
+
name: "nomic-embed-text-v1",
|
|
33
|
+
description:
|
|
34
|
+
"A high-performing open embedding model with a large token context window. Requires more processing power and memory.",
|
|
35
|
+
lang: "English",
|
|
36
|
+
size: "139MB",
|
|
37
|
+
modelCard: "https://huggingface.co/Xenova/nomic-embed-text-v1",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
"MintplexLabs/multilingual-e5-small": {
|
|
41
|
+
maxConcurrentChunks: 5,
|
|
42
|
+
// Right now, this is NOT the token length, and is instead the number of characters
|
|
43
|
+
// that can be processed in a single pass. So we override to 1,000 characters.
|
|
44
|
+
// roughtly the max number of tokens assuming 2 characters per token. (undershooting)
|
|
45
|
+
// embeddingMaxChunkLength: 512, (from the model card)
|
|
46
|
+
embeddingMaxChunkLength: 1_000,
|
|
47
|
+
chunkPrefix: "passage: ",
|
|
48
|
+
queryPrefix: "query: ",
|
|
49
|
+
apiInfo: {
|
|
50
|
+
id: "MintplexLabs/multilingual-e5-small",
|
|
51
|
+
name: "multilingual-e5-small",
|
|
52
|
+
description:
|
|
53
|
+
"A larger multilingual embedding model that supports 100+ languages. Requires more processing power and memory.",
|
|
54
|
+
lang: "100+ languages",
|
|
55
|
+
size: "487MB",
|
|
56
|
+
modelCard: "https://huggingface.co/intfloat/multilingual-e5-small",
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
SUPPORTED_NATIVE_EMBEDDING_MODELS,
|
|
63
|
+
};
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
const path = require("path");
|
|
2
|
+
const fs = require("fs");
|
|
3
|
+
const { toChunks, reportEmbeddingProgress } = require("../../helpers");
|
|
4
|
+
const { v4 } = require("uuid");
|
|
5
|
+
const { SUPPORTED_NATIVE_EMBEDDING_MODELS } = require("./constants");
|
|
6
|
+
|
|
7
|
+
class NativeEmbedder {
|
|
8
|
+
static defaultModel = "Xenova/all-MiniLM-L6-v2";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Supported embedding models for native.
|
|
12
|
+
* @type {Record<string, {
|
|
13
|
+
* chunkPrefix: string;
|
|
14
|
+
* queryPrefix: string;
|
|
15
|
+
* apiInfo: {
|
|
16
|
+
* id: string;
|
|
17
|
+
* name: string;
|
|
18
|
+
* description: string;
|
|
19
|
+
* lang: string;
|
|
20
|
+
* size: string;
|
|
21
|
+
* modelCard: string;
|
|
22
|
+
* };
|
|
23
|
+
* }>}
|
|
24
|
+
*/
|
|
25
|
+
static supportedModels = SUPPORTED_NATIVE_EMBEDDING_MODELS;
|
|
26
|
+
|
|
27
|
+
// This is a folder that Mintplex Labs hosts for those who cannot capture the HF model download
|
|
28
|
+
// endpoint for various reasons. This endpoint is not guaranteed to be active or maintained
|
|
29
|
+
// and may go offline at any time at Mintplex Labs's discretion.
|
|
30
|
+
#fallbackHost = "https://cdn.anythingllm.com/support/models/";
|
|
31
|
+
|
|
32
|
+
constructor() {
|
|
33
|
+
this.className = "NativeEmbedder";
|
|
34
|
+
this.model = this.getEmbeddingModel();
|
|
35
|
+
this.modelInfo = this.getEmbedderInfo();
|
|
36
|
+
this.cacheDir = path.resolve(
|
|
37
|
+
process.env.STORAGE_DIR
|
|
38
|
+
? path.resolve(process.env.STORAGE_DIR, `models`)
|
|
39
|
+
: path.resolve(__dirname, `../../../storage/models`)
|
|
40
|
+
);
|
|
41
|
+
this.modelPath = path.resolve(this.cacheDir, ...this.model.split("/"));
|
|
42
|
+
this.modelDownloaded = fs.existsSync(this.modelPath);
|
|
43
|
+
|
|
44
|
+
// Limit of how many strings we can process in a single pass to stay with resource or network limits
|
|
45
|
+
this.maxConcurrentChunks = this.modelInfo.maxConcurrentChunks;
|
|
46
|
+
this.embeddingMaxChunkLength = this.modelInfo.embeddingMaxChunkLength;
|
|
47
|
+
|
|
48
|
+
// Make directory when it does not exist in existing installations
|
|
49
|
+
if (!fs.existsSync(this.cacheDir)) fs.mkdirSync(this.cacheDir);
|
|
50
|
+
this.log(`Initialized ${this.model}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
log(text, ...args) {
|
|
54
|
+
console.log(`\x1b[36m[${this.className}]\x1b[0m ${text}`, ...args);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get the selected model from the environment variable.
|
|
59
|
+
* @returns {string}
|
|
60
|
+
*/
|
|
61
|
+
static _getEmbeddingModel() {
|
|
62
|
+
const envModel =
|
|
63
|
+
process.env.EMBEDDING_MODEL_PREF ?? NativeEmbedder.defaultModel;
|
|
64
|
+
if (NativeEmbedder.supportedModels?.[envModel]) return envModel;
|
|
65
|
+
return NativeEmbedder.defaultModel;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
get embeddingPrefix() {
|
|
69
|
+
return NativeEmbedder.supportedModels[this.model]?.chunkPrefix || "";
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
get queryPrefix() {
|
|
73
|
+
return NativeEmbedder.supportedModels[this.model]?.queryPrefix || "";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get the available models in an API response format
|
|
78
|
+
* we can use to populate the frontend dropdown.
|
|
79
|
+
* @returns {{id: string, name: string, description: string, lang: string, size: string, modelCard: string}[]}
|
|
80
|
+
*/
|
|
81
|
+
static availableModels() {
|
|
82
|
+
return Object.values(NativeEmbedder.supportedModels).map(
|
|
83
|
+
(model) => model.apiInfo
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get the embedding model to use.
|
|
89
|
+
* We only support a few models and will default to the default model if the environment variable is not set or not supported.
|
|
90
|
+
*
|
|
91
|
+
* Why only a few? Because we need to mirror them on the CDN so non-US users can download them.
|
|
92
|
+
* eg: "Xenova/all-MiniLM-L6-v2"
|
|
93
|
+
* eg: "Xenova/nomic-embed-text-v1"
|
|
94
|
+
* @returns {string}
|
|
95
|
+
*/
|
|
96
|
+
getEmbeddingModel() {
|
|
97
|
+
const envModel =
|
|
98
|
+
process.env.EMBEDDING_MODEL_PREF ?? NativeEmbedder.defaultModel;
|
|
99
|
+
if (NativeEmbedder.supportedModels?.[envModel]) return envModel;
|
|
100
|
+
return NativeEmbedder.defaultModel;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get the embedding model info.
|
|
105
|
+
*
|
|
106
|
+
* Will always fallback to the default model if the model is not supported.
|
|
107
|
+
* @returns {Object}
|
|
108
|
+
*/
|
|
109
|
+
getEmbedderInfo() {
|
|
110
|
+
const model = this.getEmbeddingModel();
|
|
111
|
+
return NativeEmbedder.supportedModels[model];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
#tempfilePath() {
|
|
115
|
+
const filename = `${v4()}.tmp`;
|
|
116
|
+
const tmpPath = process.env.STORAGE_DIR
|
|
117
|
+
? path.resolve(process.env.STORAGE_DIR, "tmp")
|
|
118
|
+
: path.resolve(__dirname, `../../../storage/tmp`);
|
|
119
|
+
if (!fs.existsSync(tmpPath)) fs.mkdirSync(tmpPath, { recursive: true });
|
|
120
|
+
return path.resolve(tmpPath, filename);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async #writeToTempfile(filePath, data) {
|
|
124
|
+
try {
|
|
125
|
+
await fs.promises.appendFile(filePath, data, { encoding: "utf8" });
|
|
126
|
+
} catch (e) {
|
|
127
|
+
console.error(`Error writing to tempfile: ${e}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async #fetchWithHost(hostOverride = null) {
|
|
132
|
+
try {
|
|
133
|
+
// Convert ESM to CommonJS via import so we can load this library.
|
|
134
|
+
const pipeline = (...args) =>
|
|
135
|
+
import("@xenova/transformers").then(({ pipeline, env }) => {
|
|
136
|
+
if (!this.modelDownloaded) {
|
|
137
|
+
// if model is not downloaded, we will log where we are fetching from.
|
|
138
|
+
if (hostOverride) {
|
|
139
|
+
env.remoteHost = hostOverride;
|
|
140
|
+
env.remotePathTemplate = "{model}/"; // Our S3 fallback url does not support revision File structure.
|
|
141
|
+
}
|
|
142
|
+
this.log(`Downloading ${this.model} from ${env.remoteHost}`);
|
|
143
|
+
}
|
|
144
|
+
return pipeline(...args);
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
pipeline: await pipeline("feature-extraction", this.model, {
|
|
148
|
+
cache_dir: this.cacheDir,
|
|
149
|
+
...(!this.modelDownloaded
|
|
150
|
+
? {
|
|
151
|
+
// Show download progress if we need to download any files
|
|
152
|
+
progress_callback: (data) => {
|
|
153
|
+
if (!data.hasOwnProperty("progress")) return;
|
|
154
|
+
console.log(
|
|
155
|
+
`\x1b[36m[NativeEmbedder - Downloading model]\x1b[0m ${
|
|
156
|
+
data.file
|
|
157
|
+
} ${~~data?.progress}%`
|
|
158
|
+
);
|
|
159
|
+
},
|
|
160
|
+
}
|
|
161
|
+
: {}),
|
|
162
|
+
}),
|
|
163
|
+
retry: false,
|
|
164
|
+
error: null,
|
|
165
|
+
};
|
|
166
|
+
} catch (error) {
|
|
167
|
+
return {
|
|
168
|
+
pipeline: null,
|
|
169
|
+
retry: hostOverride === null ? this.#fallbackHost : false,
|
|
170
|
+
error,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// This function will do a single fallback attempt (not recursive on purpose) to try to grab the embedder model on first embed
|
|
176
|
+
// since at time, some clients cannot properly download the model from HF servers due to a number of reasons (IP, VPN, etc).
|
|
177
|
+
// Given this model is critical and nobody reads the GitHub issues before submitting the bug, we get the same bug
|
|
178
|
+
// report 20 times a day: https://github.com/Mintplex-Labs/anything-llm/issues/821
|
|
179
|
+
// So to attempt to monkey-patch this we have a single fallback URL to help alleviate duplicate bug reports.
|
|
180
|
+
async embedderClient() {
|
|
181
|
+
if (!this.modelDownloaded)
|
|
182
|
+
this.log(
|
|
183
|
+
"The native embedding model has never been run and will be downloaded right now. Subsequent runs will be faster. (~23MB)"
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
let fetchResponse = await this.#fetchWithHost();
|
|
187
|
+
if (fetchResponse.pipeline !== null) {
|
|
188
|
+
this.modelDownloaded = true;
|
|
189
|
+
return fetchResponse.pipeline;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
this.log(
|
|
193
|
+
`Failed to download model from primary URL. Using fallback ${fetchResponse.retry}`
|
|
194
|
+
);
|
|
195
|
+
if (!!fetchResponse.retry)
|
|
196
|
+
fetchResponse = await this.#fetchWithHost(fetchResponse.retry);
|
|
197
|
+
if (fetchResponse.pipeline !== null) {
|
|
198
|
+
this.modelDownloaded = true;
|
|
199
|
+
return fetchResponse.pipeline;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
throw fetchResponse.error;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Apply the query prefix to the text input if it is required by the model.
|
|
207
|
+
* eg: nomic-embed-text-v1 requires a query prefix for embedding/searching.
|
|
208
|
+
* @param {string|string[]} textInput - The text to embed.
|
|
209
|
+
* @returns {string|string[]} The text with the prefix applied.
|
|
210
|
+
*/
|
|
211
|
+
#applyQueryPrefix(textInput) {
|
|
212
|
+
if (!this.queryPrefix) return textInput;
|
|
213
|
+
if (Array.isArray(textInput))
|
|
214
|
+
textInput = textInput.map((text) => `${this.queryPrefix}${text}`);
|
|
215
|
+
else textInput = `${this.queryPrefix}${textInput}`;
|
|
216
|
+
return textInput;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Embed a single text input.
|
|
221
|
+
* @param {string|string[]} textInput - The text to embed.
|
|
222
|
+
* @returns {Promise<Array<number>>} The embedded text.
|
|
223
|
+
*/
|
|
224
|
+
async embedTextInput(textInput) {
|
|
225
|
+
textInput = this.#applyQueryPrefix(textInput);
|
|
226
|
+
const result = await this.embedChunks(
|
|
227
|
+
Array.isArray(textInput) ? textInput : [textInput]
|
|
228
|
+
);
|
|
229
|
+
return result?.[0] || [];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// If you are thinking you want to edit this function - you probably don't.
|
|
233
|
+
// This process was benchmarked heavily on a t3.small (2GB RAM 1vCPU)
|
|
234
|
+
// and without careful memory management for the V8 garbage collector
|
|
235
|
+
// this function will likely result in an OOM on any resource-constrained deployment.
|
|
236
|
+
// To help manage very large documents we run a concurrent write-log each iteration
|
|
237
|
+
// to keep the embedding result out of memory. The `maxConcurrentChunk` is set to 25,
|
|
238
|
+
// as 50 seems to overflow no matter what. Given the above, memory use hovers around ~30%
|
|
239
|
+
// during a very large document (>100K words) but can spike up to 70% before gc.
|
|
240
|
+
// This seems repeatable for all document sizes.
|
|
241
|
+
// While this does take a while, it is zero set up and is 100% free and on-instance.
|
|
242
|
+
// It still may crash depending on other elements at play - so no promises it works under all conditions.
|
|
243
|
+
async embedChunks(textChunks = []) {
|
|
244
|
+
const tmpFilePath = this.#tempfilePath();
|
|
245
|
+
const chunks = toChunks(textChunks, this.maxConcurrentChunks);
|
|
246
|
+
const chunkLen = chunks.length;
|
|
247
|
+
const totalChunks = textChunks.length;
|
|
248
|
+
|
|
249
|
+
for (let [idx, chunk] of chunks.entries()) {
|
|
250
|
+
if (idx === 0) await this.#writeToTempfile(tmpFilePath, "[");
|
|
251
|
+
let data;
|
|
252
|
+
let pipeline = await this.embedderClient();
|
|
253
|
+
let output = await pipeline(chunk, {
|
|
254
|
+
pooling: "mean",
|
|
255
|
+
normalize: true,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
if (output.length === 0) {
|
|
259
|
+
pipeline = null;
|
|
260
|
+
output = null;
|
|
261
|
+
data = null;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
data = JSON.stringify(output.tolist());
|
|
266
|
+
await this.#writeToTempfile(tmpFilePath, data);
|
|
267
|
+
this.log(`Embedded Chunk Group ${idx + 1} of ${chunkLen}`);
|
|
268
|
+
if (chunkLen - 1 !== idx) await this.#writeToTempfile(tmpFilePath, ",");
|
|
269
|
+
if (chunkLen - 1 === idx) await this.#writeToTempfile(tmpFilePath, "]");
|
|
270
|
+
|
|
271
|
+
reportEmbeddingProgress(
|
|
272
|
+
Math.min((idx + 1) * this.maxConcurrentChunks, totalChunks),
|
|
273
|
+
totalChunks
|
|
274
|
+
);
|
|
275
|
+
pipeline = null;
|
|
276
|
+
output = null;
|
|
277
|
+
data = null;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const embeddingResults = JSON.parse(
|
|
281
|
+
fs.readFileSync(tmpFilePath, { encoding: "utf-8" })
|
|
282
|
+
);
|
|
283
|
+
fs.rmSync(tmpFilePath, { force: true });
|
|
284
|
+
return embeddingResults.length > 0 ? embeddingResults.flat() : null;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
module.exports = {
|
|
289
|
+
NativeEmbedder,
|
|
290
|
+
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const {
|
|
2
|
+
maximumChunkLength,
|
|
3
|
+
reportEmbeddingProgress,
|
|
4
|
+
} = require("../../helpers");
|
|
5
|
+
const { Ollama } = require("ollama");
|
|
6
|
+
const { OllamaAILLM } = require("../../AiProviders/ollama");
|
|
7
|
+
|
|
8
|
+
class OllamaEmbedder {
|
|
9
|
+
constructor() {
|
|
10
|
+
if (!process.env.EMBEDDING_BASE_PATH)
|
|
11
|
+
throw new Error("No embedding base path was set.");
|
|
12
|
+
if (!process.env.EMBEDDING_MODEL_PREF)
|
|
13
|
+
throw new Error("No embedding model was set.");
|
|
14
|
+
|
|
15
|
+
this.className = "OllamaEmbedder";
|
|
16
|
+
this.basePath = process.env.EMBEDDING_BASE_PATH;
|
|
17
|
+
this.model = process.env.EMBEDDING_MODEL_PREF;
|
|
18
|
+
this.maxConcurrentChunks = process.env.OLLAMA_EMBEDDING_BATCH_SIZE
|
|
19
|
+
? Number(process.env.OLLAMA_EMBEDDING_BATCH_SIZE)
|
|
20
|
+
: 1;
|
|
21
|
+
this.embeddingMaxChunkLength = maximumChunkLength();
|
|
22
|
+
this.authToken = process.env.OLLAMA_AUTH_TOKEN;
|
|
23
|
+
|
|
24
|
+
const headers = this.authToken
|
|
25
|
+
? { Authorization: `Bearer ${this.authToken}` }
|
|
26
|
+
: {};
|
|
27
|
+
this.client = new Ollama({
|
|
28
|
+
host: this.basePath,
|
|
29
|
+
headers,
|
|
30
|
+
fetch: OllamaAILLM.applyOllamaFetch(),
|
|
31
|
+
});
|
|
32
|
+
this.log(
|
|
33
|
+
`initialized with model ${this.model} at ${this.basePath}. Batch size: ${this.maxConcurrentChunks}, num_ctx: ${this.embeddingMaxChunkLength}`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
log(text, ...args) {
|
|
38
|
+
console.log(`\x1b[36m[${this.className}]\x1b[0m ${text}`, ...args);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Checks if the Ollama service is alive by pinging the base path.
|
|
43
|
+
* @returns {Promise<boolean>} - A promise that resolves to true if the service is alive, false otherwise.
|
|
44
|
+
*/
|
|
45
|
+
async #isAlive() {
|
|
46
|
+
return await fetch(this.basePath)
|
|
47
|
+
.then((res) => res.ok)
|
|
48
|
+
.catch((e) => {
|
|
49
|
+
this.log(e.message);
|
|
50
|
+
return false;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async embedTextInput(textInput) {
|
|
55
|
+
const result = await this.embedChunks(
|
|
56
|
+
Array.isArray(textInput) ? textInput : [textInput]
|
|
57
|
+
);
|
|
58
|
+
return result?.[0] || [];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* This function takes an array of text chunks and embeds them using the Ollama API.
|
|
63
|
+
* Chunks are processed in batches based on the maxConcurrentChunks setting to balance
|
|
64
|
+
* resource usage on the Ollama endpoint.
|
|
65
|
+
*
|
|
66
|
+
* We will use the num_ctx option to set the maximum context window to the max chunk length defined by the user in the settings
|
|
67
|
+
* so that the maximum context window is used and content is not truncated.
|
|
68
|
+
*
|
|
69
|
+
* We also assume the default keep alive option. This could cause issues with models being unloaded and reloaded
|
|
70
|
+
* on low memory machines, but that is simply a user-end issue we cannot control. If the LLM and embedder are
|
|
71
|
+
* constantly being loaded and unloaded, the user should use another LLM or Embedder to avoid this issue.
|
|
72
|
+
* @param {string[]} textChunks - An array of text chunks to embed.
|
|
73
|
+
* @returns {Promise<Array<number[]>>} - A promise that resolves to an array of embeddings.
|
|
74
|
+
*/
|
|
75
|
+
async embedChunks(textChunks = []) {
|
|
76
|
+
if (!(await this.#isAlive()))
|
|
77
|
+
throw new Error(
|
|
78
|
+
`Ollama service could not be reached. Is Ollama running?`
|
|
79
|
+
);
|
|
80
|
+
this.log(
|
|
81
|
+
`Embedding ${textChunks.length} chunks of text with ${this.model} in batches of ${this.maxConcurrentChunks}.`
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
let data = [];
|
|
85
|
+
let error = null;
|
|
86
|
+
|
|
87
|
+
// Process chunks in batches based on maxConcurrentChunks
|
|
88
|
+
const totalBatches = Math.ceil(
|
|
89
|
+
textChunks.length / this.maxConcurrentChunks
|
|
90
|
+
);
|
|
91
|
+
let currentBatch = 0;
|
|
92
|
+
|
|
93
|
+
for (let i = 0; i < textChunks.length; i += this.maxConcurrentChunks) {
|
|
94
|
+
const batch = textChunks.slice(i, i + this.maxConcurrentChunks);
|
|
95
|
+
currentBatch++;
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
// Use input param instead of prompt param to support batch processing
|
|
99
|
+
const res = await this.client.embed({
|
|
100
|
+
model: this.model,
|
|
101
|
+
input: batch,
|
|
102
|
+
options: {
|
|
103
|
+
// Always set the num_ctx to the max chunk length defined by the user in the settings
|
|
104
|
+
// so that the maximum context window is used and content is not truncated.
|
|
105
|
+
num_ctx: this.embeddingMaxChunkLength,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const { embeddings } = res;
|
|
110
|
+
if (!Array.isArray(embeddings) || embeddings.length === 0)
|
|
111
|
+
throw new Error("Ollama returned empty embeddings for batch!");
|
|
112
|
+
|
|
113
|
+
// Using prompt param in embed() would return a single embedding (number[])
|
|
114
|
+
// but input param returns an array of embeddings (number[][]) for batch processing.
|
|
115
|
+
// This is why we spread the embeddings array into the data array.
|
|
116
|
+
data.push(...embeddings);
|
|
117
|
+
reportEmbeddingProgress(data.length, textChunks.length);
|
|
118
|
+
this.log(
|
|
119
|
+
`Batch ${currentBatch}/${totalBatches}: Embedded ${embeddings.length} chunks. Total: ${data.length}/${textChunks.length}`
|
|
120
|
+
);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
this.log(err.message);
|
|
123
|
+
error = err.message;
|
|
124
|
+
data = [];
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (!!error) throw new Error(`Ollama Failed to embed: ${error}`);
|
|
130
|
+
return data.length > 0 ? data : null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
module.exports = {
|
|
135
|
+
OllamaEmbedder,
|
|
136
|
+
};
|