From fbd4401d3ecfc504832bb5ab4ef3ba6392a223bd Mon Sep 17 00:00:00 2001 From: Dany Date: Tue, 22 Oct 2024 19:11:03 +0200 Subject: [PATCH] docs: initialize docs with vitepress and typedoc --- .github/workflows/main.yml | 22 +- .gitignore | 50 +- .vscode/settings.json | 8 +- bun.lockb | Bin 427160 -> 465048 bytes docs/.vitepress/config.ts | 66 ++ docs/.vitepress/theme/Layout.vue | 71 +++ docs/.vitepress/theme/custom.css | 5 + docs/.vitepress/theme/index.ts | 8 + docs/api/classes/AgentManager.md | 165 +++++ docs/api/classes/ChatModelConfig.md | 68 +++ docs/api/classes/CheshireCat.md | 185 ++++++ docs/api/classes/CustomChat.md | 79 +++ docs/api/classes/CustomChatOllama.md | 27 + docs/api/classes/CustomChatOpenAI.md | 41 ++ docs/api/classes/CustomOpenAIEmbeddings.md | 78 +++ docs/api/classes/Database.md | 135 +++++ docs/api/classes/EmbedderConfig.md | 68 +++ docs/api/classes/FakeChat.md | 55 ++ docs/api/classes/FastEmbedEmbeddings.md | 78 +++ docs/api/classes/Form.md | 106 ++++ docs/api/classes/HttpError.md | 294 +++++++++ docs/api/classes/MadHatter.md | 184 ++++++ docs/api/classes/ModelInteractionHandler.md | 81 +++ docs/api/classes/NewTokenHandler.md | 56 ++ docs/api/classes/Plugin.md | 204 +++++++ docs/api/classes/ProceduresOutputParser.md | 84 +++ docs/api/classes/RabbitHole.md | 193 ++++++ docs/api/classes/RateLimitHandler.md | 103 ++++ docs/api/classes/StrayCat.md | 395 ++++++++++++ docs/api/classes/Tool.md | 95 +++ docs/api/classes/ToolPromptTemplate.md | 59 ++ docs/api/classes/VectorMemory.md | 41 ++ docs/api/classes/VectorMemoryCollection.md | 214 +++++++ docs/api/classes/WhiteRabbit.md | 108 ++++ docs/api/coverage.svg | 17 + docs/api/enumerations/FormState.md | 12 + docs/api/functions/addChatModel.md | 21 + docs/api/functions/addEmbeddings.md | 21 + docs/api/functions/catchError.md | 33 + docs/api/functions/compareStrings.md | 21 + docs/api/functions/deepDefaults.md | 26 + docs/api/functions/embedderCache.md | 9 + docs/api/functions/existsDir.md | 17 + docs/api/functions/getAllowedEmbedders.md | 9 + docs/api/functions/getAllowedLLMs.md | 9 + docs/api/functions/getEmbedder.md | 15 + docs/api/functions/getEmbedderSettings.md | 15 + docs/api/functions/getLLM.md | 15 + docs/api/functions/getLLMSettings.md | 15 + docs/api/functions/getVectorMemory.md | 15 + docs/api/functions/getZodDefaults.md | 24 + docs/api/functions/isForm.md | 15 + docs/api/functions/isHook.md | 15 + docs/api/functions/isTool.md | 15 + docs/api/functions/llmCache.md | 9 + docs/api/functions/logWelcome.md | 11 + docs/api/functions/normalizeMessageChunks.md | 19 + docs/api/functions/parseJson.md | 30 + docs/api/index.md | 163 +++++ docs/api/interfaces/AgentFastReply.md | 13 + docs/api/interfaces/ContextInput.md | 19 + docs/api/interfaces/HookTypes.md | 39 ++ docs/api/interfaces/Interaction.md | 13 + docs/api/interfaces/IntermediateStep.md | 13 + docs/api/interfaces/MemoryJson.md | 15 + docs/api/interfaces/MemoryMessage.md | 19 + docs/api/interfaces/MemoryRecallConfig.md | 14 + docs/api/interfaces/MemoryRecallConfigs.md | 17 + docs/api/interfaces/Message.md | 15 + .../api/interfaces/VectorMemoryCollections.md | 17 + docs/api/interfaces/VectorMemoryConfig.md | 12 + docs/api/interfaces/WorkingMemory.md | 17 + docs/api/namespaces/NodeJS/index.md | 11 + .../NodeJS/interfaces/ProcessEnv.md | 18 + docs/api/type-aliases/BetterReadonly.md | 12 + docs/api/type-aliases/DatabaseConfig.md | 5 + docs/api/type-aliases/EmbeddedVector.md | 5 + docs/api/type-aliases/EmbedderInteraction.md | 12 + docs/api/type-aliases/FileParsers.md | 5 + docs/api/type-aliases/Filter.md | 5 + docs/api/type-aliases/FilterCondition.md | 5 + docs/api/type-aliases/FilterMatch.md | 5 + docs/api/type-aliases/Hook.md | 19 + docs/api/type-aliases/HookNames.md | 5 + docs/api/type-aliases/Hooks.md | 11 + docs/api/type-aliases/InstantToolTrigger.md | 5 + docs/api/type-aliases/Json.md | 5 + docs/api/type-aliases/LLMInteraction.md | 13 + docs/api/type-aliases/MaybePromise.md | 11 + docs/api/type-aliases/MemoryDocument.md | 15 + docs/api/type-aliases/ModelInteraction.md | 5 + docs/api/type-aliases/Nullable.md | 11 + docs/api/type-aliases/PointData.md | 5 + docs/api/type-aliases/Primitive.md | 5 + docs/api/type-aliases/TODO.md | 5 + docs/api/type-aliases/WS.md | 5 + docs/api/type-aliases/WSMessage.md | 7 + docs/api/type-aliases/WebParser.md | 5 + docs/api/typedoc-sidebar.json | 565 ++++++++++++++++++ docs/api/variables/CatForm.md | 11 + docs/api/variables/CatHook.md | 11 + docs/api/variables/CatPlugin.md | 12 + docs/api/variables/CatTool.md | 11 + docs/api/variables/LogLevel.md | 5 + docs/api/variables/MAIN_PROMPT_PREFIX.md | 5 + docs/api/variables/MAIN_PROMPT_SUFFIX.md | 5 + docs/api/variables/TOOL_PROMPT.md | 5 + docs/api/variables/app.md | 5 + docs/api/variables/catPaths.md | 17 + docs/api/variables/chatMessage.md | 5 + docs/api/variables/cheshireCat.md | 5 + docs/api/variables/db.md | 5 + docs/api/variables/embedderRoutes.md | 5 + docs/api/variables/generalRoutes.md | 5 + docs/api/variables/httpError.md | 5 + docs/api/variables/httpLogger.md | 5 + docs/api/variables/llmRoutes.md | 5 + docs/api/variables/log.md | 25 + docs/api/variables/madHatter.md | 5 + docs/api/variables/memoryMessage.md | 15 + docs/api/variables/memoryRecall.md | 12 + docs/api/variables/memoryRoutes.md | 5 + docs/api/variables/messageInput.md | 5 + docs/api/variables/modelInfo.md | 16 + docs/api/variables/parsedEnv.md | 24 + docs/api/variables/pluginInfo.md | 17 + docs/api/variables/pluginManifest.md | 18 + docs/api/variables/pluginSettings.md | 13 + docs/api/variables/pluginsRoutes.md | 5 + docs/api/variables/rabbitHole.md | 7 + docs/api/variables/rabbitHoleRoutes.md | 5 + docs/api/variables/serverContext.md | 5 + docs/api/variables/settingsRoutes.md | 5 + docs/api/variables/swaggerTags.md | 31 + docs/api/variables/vectorDb.md | 5 + docs/api/variables/whiteRabbit.md | 7 + docs/api/variables/zodBoolean.md | 7 + docs/api/variables/zodJson.md | 7 + docs/api/variables/zodPrimitive.md | 7 + docs/contributors.md | 41 ++ docs/getting-started.md | 38 ++ docs/index.md | 40 ++ docs/introduction.md | 7 + docs/public/favicon.ico | Bin 0 -> 15086 bytes docs/public/logo-dark.svg | 15 + docs/public/logo-light.svg | 15 + eslint.config.mjs | 2 +- package.json | 305 +++++----- src/assets/favicon.ico | Bin 0 -> 15086 bytes src/assets/favicon.png | Bin 6077 -> 0 bytes globals.d.ts => src/globals.d.ts | 0 src/main.ts | 2 +- tsconfig.json | 9 +- typedoc.config.mjs | 43 ++ 154 files changed, 5683 insertions(+), 207 deletions(-) create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/theme/Layout.vue create mode 100644 docs/.vitepress/theme/custom.css create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/api/classes/AgentManager.md create mode 100644 docs/api/classes/ChatModelConfig.md create mode 100644 docs/api/classes/CheshireCat.md create mode 100644 docs/api/classes/CustomChat.md create mode 100644 docs/api/classes/CustomChatOllama.md create mode 100644 docs/api/classes/CustomChatOpenAI.md create mode 100644 docs/api/classes/CustomOpenAIEmbeddings.md create mode 100644 docs/api/classes/Database.md create mode 100644 docs/api/classes/EmbedderConfig.md create mode 100644 docs/api/classes/FakeChat.md create mode 100644 docs/api/classes/FastEmbedEmbeddings.md create mode 100644 docs/api/classes/Form.md create mode 100644 docs/api/classes/HttpError.md create mode 100644 docs/api/classes/MadHatter.md create mode 100644 docs/api/classes/ModelInteractionHandler.md create mode 100644 docs/api/classes/NewTokenHandler.md create mode 100644 docs/api/classes/Plugin.md create mode 100644 docs/api/classes/ProceduresOutputParser.md create mode 100644 docs/api/classes/RabbitHole.md create mode 100644 docs/api/classes/RateLimitHandler.md create mode 100644 docs/api/classes/StrayCat.md create mode 100644 docs/api/classes/Tool.md create mode 100644 docs/api/classes/ToolPromptTemplate.md create mode 100644 docs/api/classes/VectorMemory.md create mode 100644 docs/api/classes/VectorMemoryCollection.md create mode 100644 docs/api/classes/WhiteRabbit.md create mode 100644 docs/api/coverage.svg create mode 100644 docs/api/enumerations/FormState.md create mode 100644 docs/api/functions/addChatModel.md create mode 100644 docs/api/functions/addEmbeddings.md create mode 100644 docs/api/functions/catchError.md create mode 100644 docs/api/functions/compareStrings.md create mode 100644 docs/api/functions/deepDefaults.md create mode 100644 docs/api/functions/embedderCache.md create mode 100644 docs/api/functions/existsDir.md create mode 100644 docs/api/functions/getAllowedEmbedders.md create mode 100644 docs/api/functions/getAllowedLLMs.md create mode 100644 docs/api/functions/getEmbedder.md create mode 100644 docs/api/functions/getEmbedderSettings.md create mode 100644 docs/api/functions/getLLM.md create mode 100644 docs/api/functions/getLLMSettings.md create mode 100644 docs/api/functions/getVectorMemory.md create mode 100644 docs/api/functions/getZodDefaults.md create mode 100644 docs/api/functions/isForm.md create mode 100644 docs/api/functions/isHook.md create mode 100644 docs/api/functions/isTool.md create mode 100644 docs/api/functions/llmCache.md create mode 100644 docs/api/functions/logWelcome.md create mode 100644 docs/api/functions/normalizeMessageChunks.md create mode 100644 docs/api/functions/parseJson.md create mode 100644 docs/api/index.md create mode 100644 docs/api/interfaces/AgentFastReply.md create mode 100644 docs/api/interfaces/ContextInput.md create mode 100644 docs/api/interfaces/HookTypes.md create mode 100644 docs/api/interfaces/Interaction.md create mode 100644 docs/api/interfaces/IntermediateStep.md create mode 100644 docs/api/interfaces/MemoryJson.md create mode 100644 docs/api/interfaces/MemoryMessage.md create mode 100644 docs/api/interfaces/MemoryRecallConfig.md create mode 100644 docs/api/interfaces/MemoryRecallConfigs.md create mode 100644 docs/api/interfaces/Message.md create mode 100644 docs/api/interfaces/VectorMemoryCollections.md create mode 100644 docs/api/interfaces/VectorMemoryConfig.md create mode 100644 docs/api/interfaces/WorkingMemory.md create mode 100644 docs/api/namespaces/NodeJS/index.md create mode 100644 docs/api/namespaces/NodeJS/interfaces/ProcessEnv.md create mode 100644 docs/api/type-aliases/BetterReadonly.md create mode 100644 docs/api/type-aliases/DatabaseConfig.md create mode 100644 docs/api/type-aliases/EmbeddedVector.md create mode 100644 docs/api/type-aliases/EmbedderInteraction.md create mode 100644 docs/api/type-aliases/FileParsers.md create mode 100644 docs/api/type-aliases/Filter.md create mode 100644 docs/api/type-aliases/FilterCondition.md create mode 100644 docs/api/type-aliases/FilterMatch.md create mode 100644 docs/api/type-aliases/Hook.md create mode 100644 docs/api/type-aliases/HookNames.md create mode 100644 docs/api/type-aliases/Hooks.md create mode 100644 docs/api/type-aliases/InstantToolTrigger.md create mode 100644 docs/api/type-aliases/Json.md create mode 100644 docs/api/type-aliases/LLMInteraction.md create mode 100644 docs/api/type-aliases/MaybePromise.md create mode 100644 docs/api/type-aliases/MemoryDocument.md create mode 100644 docs/api/type-aliases/ModelInteraction.md create mode 100644 docs/api/type-aliases/Nullable.md create mode 100644 docs/api/type-aliases/PointData.md create mode 100644 docs/api/type-aliases/Primitive.md create mode 100644 docs/api/type-aliases/TODO.md create mode 100644 docs/api/type-aliases/WS.md create mode 100644 docs/api/type-aliases/WSMessage.md create mode 100644 docs/api/type-aliases/WebParser.md create mode 100644 docs/api/typedoc-sidebar.json create mode 100644 docs/api/variables/CatForm.md create mode 100644 docs/api/variables/CatHook.md create mode 100644 docs/api/variables/CatPlugin.md create mode 100644 docs/api/variables/CatTool.md create mode 100644 docs/api/variables/LogLevel.md create mode 100644 docs/api/variables/MAIN_PROMPT_PREFIX.md create mode 100644 docs/api/variables/MAIN_PROMPT_SUFFIX.md create mode 100644 docs/api/variables/TOOL_PROMPT.md create mode 100644 docs/api/variables/app.md create mode 100644 docs/api/variables/catPaths.md create mode 100644 docs/api/variables/chatMessage.md create mode 100644 docs/api/variables/cheshireCat.md create mode 100644 docs/api/variables/db.md create mode 100644 docs/api/variables/embedderRoutes.md create mode 100644 docs/api/variables/generalRoutes.md create mode 100644 docs/api/variables/httpError.md create mode 100644 docs/api/variables/httpLogger.md create mode 100644 docs/api/variables/llmRoutes.md create mode 100644 docs/api/variables/log.md create mode 100644 docs/api/variables/madHatter.md create mode 100644 docs/api/variables/memoryMessage.md create mode 100644 docs/api/variables/memoryRecall.md create mode 100644 docs/api/variables/memoryRoutes.md create mode 100644 docs/api/variables/messageInput.md create mode 100644 docs/api/variables/modelInfo.md create mode 100644 docs/api/variables/parsedEnv.md create mode 100644 docs/api/variables/pluginInfo.md create mode 100644 docs/api/variables/pluginManifest.md create mode 100644 docs/api/variables/pluginSettings.md create mode 100644 docs/api/variables/pluginsRoutes.md create mode 100644 docs/api/variables/rabbitHole.md create mode 100644 docs/api/variables/rabbitHoleRoutes.md create mode 100644 docs/api/variables/serverContext.md create mode 100644 docs/api/variables/settingsRoutes.md create mode 100644 docs/api/variables/swaggerTags.md create mode 100644 docs/api/variables/vectorDb.md create mode 100644 docs/api/variables/whiteRabbit.md create mode 100644 docs/api/variables/zodBoolean.md create mode 100644 docs/api/variables/zodJson.md create mode 100644 docs/api/variables/zodPrimitive.md create mode 100644 docs/contributors.md create mode 100644 docs/getting-started.md create mode 100644 docs/index.md create mode 100644 docs/introduction.md create mode 100644 docs/public/favicon.ico create mode 100644 docs/public/logo-dark.svg create mode 100644 docs/public/logo-light.svg create mode 100644 src/assets/favicon.ico delete mode 100644 src/assets/favicon.png rename globals.d.ts => src/globals.d.ts (100%) create mode 100644 typedoc.config.mjs diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 85abd03..0839997 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Release +name: Release and Docs env: HUSKY: 0 @@ -22,9 +22,12 @@ concurrency: permissions: contents: write + pages: write + id-token: write jobs: release: + name: Release runs-on: ubuntu-latest steps: - name: Checkout @@ -33,7 +36,24 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Install dependencies run: bun install + - name: Build docs + run: bun run docs:build - name: Release run: bunx changelogen --release --push --${{ github.event.inputs.version }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/.vitepress/dist + docs: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: release + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index fb366bb..6e38b31 100644 --- a/.gitignore +++ b/.gitignore @@ -23,12 +23,6 @@ lib-cov coverage *.lcov -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - # Bower dependency directory (https://bower.io/) bower_components @@ -57,21 +51,12 @@ web_modules/ # Optional stylelint cache .stylelintcache -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # dotenv environment variable files .env .env.development.local @@ -79,24 +64,10 @@ web_modules/ .env.production.local .env.local -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - # Nuxt.js build / generate output .nuxt dist -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - # vuepress build output .vuepress/dist @@ -104,27 +75,12 @@ dist .temp .cache -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - # TernJS port file .tern-port # Stores VSCode versions used for testing VSCode extensions .vscode-test -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* **/tmp** src/mad_hatter/core_plugin/settings.json src/plugins/* @@ -132,7 +88,9 @@ src/assets/* data/* !src/plugins/README.md !src/assets/README.md -!src/assets/favicon.png +!src/assets/favicon.ico !src/assets/swagger-ui-theme.css !data/README.md -ccat \ No newline at end of file +ccat +docs/.vitepress/dist +docs/.vitepress/cache \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index d739210..383eadf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,15 +1,10 @@ { - // Enable the ESlint flat config support - "eslint.experimental.useFlatConfig": true, - // Disable the default formatter, use eslint instead - "prettier.enable": false, + "eslint.useFlatConfig": true, "editor.formatOnSave": false, - // Auto fix "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports": "never" }, - // Silent the stylistic rules in you IDE, but still auto fix them "eslint.rules.customizations": [ { "rule": "style/*", "severity": "off" }, { "rule": "format/*", "severity": "off" }, @@ -22,7 +17,6 @@ { "rule": "*quotes", "severity": "off" }, { "rule": "*semi", "severity": "off" } ], - // Enable eslint for all supported languages "eslint.validate": [ "javascript", "typescript", diff --git a/bun.lockb b/bun.lockb index a108b0a94cd6e4dd410cea78ac473b7a4d50a956..9d9dd74b359169c41ddc3d378242d3d5f7fbf4ac 100755 GIT binary patch delta 113229 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
4z_sqNkld0>0 z3h{fTc)!|ezRI1EXREsdXr*G$zrEtlUTv~$JM|jN{hE(>$QI7tPP^YG?zh7GOSh;E z!D9I@)^O+e8ho-yo92;eBa-cT{{7F0O>cuOrRO}H9cFAJG;{}L`S-(%KKJy`TKL;- zVryK~Kc8LwrEf@~?3{?R8Fv1x-|$EKeXiELjXcDX!gSxrGvkiYFjWt|GoQb;70v#Q z!RqGj#$ev~b^-SwbyM9D%eoeCw|X$w8aICZ;MekBd{yl2sa&h~-nl+!%&PN0^k2fY zmg!l(S=YKmk!f@OuePo|rl~88L)-J6mO=}xreoDnQ^bgE$_VJ@*ucRAhd79PnCYga zy|@Z}-WHrnU}{R@!ZI!OV=>CIWsbcRyRBziU1#=(Suz&(px}crO}4mYk4z_7)MVMY z-13LSo7|i8yT9*w?)T3*=boI(T6rSf7>zd?MhXW5*jb-oB{pS?BDt3xK@2I}IC;jwr zEY~IT&5@>Z@1C1aNqk7`%1ZCi*QKY64fk?h>gG!|26F6jU%iX-{LcEg?boa7$<+AW zc*(wX%_EMM$l>0ag$^XLf_vHaj{DqwU%m3SB@@8AL*kI{;!4#V&pk{98gCx$xYB=D zo=3Q9_hr{qYod7}&nd}#Ry-N85Jm6RO$#HG1SBW3BM<*lI}qQyFhJj~PPaG2$2EH6 z(I3`-v8X#OcXQn;*PkWN*FF0($5J<6n(A9Iv&9t|x|yjFCLcol;I; zP`LArC%tKg)zx^w}%fV?C&BJjOt-;d>FG_MbvZ=omRKx6qMiqEA2Dx~RQVUK} z8pS>h1^g)nS{#ePY9e@@J{Mj|@J#1|iywhz=2lZam6ItYkINy3GVQR}Er#$$9&N?h z!>|$^uR$d<4+71`+6h8&Z~!V8x6_fqz9Fcy>!ub*RMD7!+d5BrIW31AR`Bv!7Qszs&mqdyLd#$eQ2j)RJL#a)uw6(>O0VB1>B5 YvHAeuXtioFjvMJx#m|r9bt66TKe|&;d;kCd diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000..9b64e50 --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,66 @@ +import { defineConfig } from 'vitepress' +import typedocSidebar from '../api/typedoc-sidebar.json' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: 'Home', + titleTemplate: 'Cheshire Cat - :title', + description: 'Hackable and production-ready framework for developing AI agents on top of LLMs', + head: [['link', { rel: 'icon', href: '/favicon.ico' }]], + lastUpdated: true, + cleanUrls: true, + themeConfig: { + logo: { + dark: '/logo-dark.svg', + light: '/logo-light.svg', + alt: 'Cheshire Cat Logo', + }, + footer: { + message: 'Released under the GPL-3.0 License.', + copyright: 'Copyright © 2024-present Daniele Nicosia & Contributors', + }, + search: { + provider: 'local', + }, + nav: [ + { text: 'Home', link: '/' }, + { text: 'Docs', link: '/introduction' }, + { text: 'API', link: '/api/' }, + { text: 'Contributors', link: '/contributors' }, + ], + sidebar: [ + { + text: 'Documentation', + items: [ + { + text: 'Introduction', + link: '/introduction', + }, + { + text: 'Getting Started', + link: '/getting-started', + }, + ], + }, + { + text: 'API Reference', + items: [ + { + text: 'Overview', + link: '/api/', + }, + ...typedocSidebar, + ], + }, + { + text: 'Contributors', + link: '/contributors', + }, + ], + socialLinks: [ + { icon: 'github', link: 'https://github.com/zAlweNy26/ts-cat' }, + { icon: 'discord', link: 'https://discord.gg/bHX5sNFCYU' }, + { icon: 'linkedin', link: 'https://www.linkedin.com/company/cheshire-cat-ai' }, + ], + }, +}) diff --git a/docs/.vitepress/theme/Layout.vue b/docs/.vitepress/theme/Layout.vue new file mode 100644 index 0000000..94ae122 --- /dev/null +++ b/docs/.vitepress/theme/Layout.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 0000000..0a3e544 --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,5 @@ +:root { + --vp-c-brand-1: #3a98a4; + --vp-c-brand-2: #54b1bc; + --vp-c-brand-3: #327a88; +} \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..ef4633a --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,8 @@ +import DefaultTheme from 'vitepress/theme' +import Layout from './Layout.vue' +import './custom.css' + +export default { + extends: DefaultTheme, + Layout, +} diff --git a/docs/api/classes/AgentManager.md b/docs/api/classes/AgentManager.md new file mode 100644 index 0000000..c473704 --- /dev/null +++ b/docs/api/classes/AgentManager.md @@ -0,0 +1,165 @@ +[Overview](../index.md) / AgentManager + +# AgentManager + +Manager of Langchain Agent. +This class manages the Agent that uses the LLM. It takes care of formatting the prompt and filtering the tools +before feeding them to the Agent. It also instantiates the Langchain Agent. + +## Constructors + +### new AgentManager() + +> **new AgentManager**(): [`AgentManager`](AgentManager.md) + +#### Returns + +[`AgentManager`](AgentManager.md) + +## Methods + +### executeAgent() + +> **executeAgent**(`stray`): `Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | + +#### Returns + +`Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +*** + +### executeFormAgent() + +> **executeFormAgent**(`stray`): `Promise`\<`undefined` \| [`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | + +#### Returns + +`Promise`\<`undefined` \| [`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +*** + +### executeMemoryChain() + +> **executeMemoryChain**(`input`, `stray`): `Promise`\<`string`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `input` | [`ContextInput`](../interfaces/ContextInput.md) | +| `stray` | [`StrayCat`](StrayCat.md) | + +#### Returns + +`Promise`\<`string`\> + +*** + +### executeProceduresChain() + +> **executeProceduresChain**(`agentInput`, `chatHistory`, `stray`): `Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `agentInput` | [`ContextInput`](../interfaces/ContextInput.md) | +| `chatHistory` | `string` | +| `stray` | [`StrayCat`](StrayCat.md) | + +#### Returns + +`Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +*** + +### executeTool() + +> **executeTool**(`input`, `stray`): `Promise`\<`undefined` \| [`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `input` | [`ContextInput`](../interfaces/ContextInput.md) | +| `stray` | [`StrayCat`](StrayCat.md) | + +#### Returns + +`Promise`\<`undefined` \| [`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +*** + +### getDeclarativeMemoriesPrompt() + +> **getDeclarativeMemoriesPrompt**(`docs`): `string` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `docs` | [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] | + +#### Returns + +`string` + +*** + +### getEpisodicMemoriesPrompt() + +> **getEpisodicMemoriesPrompt**(`docs`): `string` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `docs` | [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] | + +#### Returns + +`string` + +*** + +### getLangchainChatHistory() + +> **getLangchainChatHistory**(`history`): `Promise`\<`BaseMessage`[]\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `history` | [`MemoryMessage`](../interfaces/MemoryMessage.md)[] | + +#### Returns + +`Promise`\<`BaseMessage`[]\> + +*** + +### stringifyChatHistory() + +> **stringifyChatHistory**(`history`): `string` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `history` | [`MemoryMessage`](../interfaces/MemoryMessage.md)[] | + +#### Returns + +`string` diff --git a/docs/api/classes/ChatModelConfig.md b/docs/api/classes/ChatModelConfig.md new file mode 100644 index 0000000..5edfc0c --- /dev/null +++ b/docs/api/classes/ChatModelConfig.md @@ -0,0 +1,68 @@ +[Overview](../index.md) / ChatModelConfig + +# ChatModelConfig\ + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `Config` *extends* `z.ZodTypeAny` | `z.ZodTypeAny` | + +## Constructors + +### new ChatModelConfig() + +> **new ChatModelConfig**\<`Config`\>(`_settings`): [`ChatModelConfig`](ChatModelConfig.md)\<`Config`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `_settings` | `LLMSettings`\<`Config`\> | + +#### Returns + +[`ChatModelConfig`](ChatModelConfig.md)\<`Config`\> + +## Accessors + +### config + +> `get` **config**(): `Config` + +#### Returns + +`Config` + +*** + +### info + +> `get` **info**(): `object` + +#### Returns + +`object` + +| Name | Type | +| ------ | ------ | +| `description` | `string` | +| `id` | `string` | +| `link` | `undefined` \| `string` | +| `name` | `string` | + +## Methods + +### initModel() + +> **initModel**(`params`): `BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `input`\<`Config`\> | + +#### Returns + +`BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> diff --git a/docs/api/classes/CheshireCat.md b/docs/api/classes/CheshireCat.md new file mode 100644 index 0000000..9ba1808 --- /dev/null +++ b/docs/api/classes/CheshireCat.md @@ -0,0 +1,185 @@ +[Overview](../index.md) / CheshireCat + +# CheshireCat + +## Accessors + +### agentManager + +> `get` **agentManager**(): [`AgentManager`](AgentManager.md) + +#### Returns + +[`AgentManager`](AgentManager.md) + +*** + +### currentEmbedder + +> `get` **currentEmbedder**(): `Embeddings` + +#### Returns + +`Embeddings` + +*** + +### currentLLM + +> `get` **currentLLM**(): `BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> + +#### Returns + +`BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> + +*** + +### embedderSize + +> `get` **embedderSize**(): `number` + +#### Returns + +`number` + +*** + +### rabbitHole + +> `get` **rabbitHole**(): [`RabbitHole`](RabbitHole.md) + +#### Returns + +[`RabbitHole`](RabbitHole.md) + +*** + +### vectorMemory + +> `get` **vectorMemory**(): [`VectorMemory`](VectorMemory.md) + +#### Returns + +[`VectorMemory`](VectorMemory.md) + +*** + +### whiteRabbit + +> `get` **whiteRabbit**(): [`WhiteRabbit`](WhiteRabbit.md) + +#### Returns + +[`WhiteRabbit`](WhiteRabbit.md) + +## Methods + +### addStray() + +> **addStray**(`userId`, `ws`?): [`StrayCat`](StrayCat.md) + +Add a StrayCat with the given userId to the collection of strays. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `userId` | `string` | The unique identifier of the stray cat. | +| `ws`? | [`WS`](../type-aliases/WS.md) | - | + +#### Returns + +[`StrayCat`](StrayCat.md) + +The StrayCat instance associated with the given userId. + +*** + +### embedProcedures() + +> **embedProcedures**(): `Promise`\<`void`\> + +Embed tools and forms into the memory. + +#### Returns + +`Promise`\<`void`\> + +*** + +### getStray() + +> **getStray**(`userId`): `undefined` \| [`StrayCat`](StrayCat.md) + +Get the StrayCat instance associated with the given userId. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `userId` | `string` | The unique identifier of the stray cat. | + +#### Returns + +`undefined` \| [`StrayCat`](StrayCat.md) + +The StrayCat instance associated with the given userId. + +*** + +### loadMemory() + +> **loadMemory**(): `Promise`\<`void`\> + +Loads the long term memory from the database. + +#### Returns + +`Promise`\<`void`\> + +*** + +### loadNaturalLanguage() + +> **loadNaturalLanguage**(): `void` + +Load the Large Language Model (LLM) and the Embedder from the database. +If the selected LLM or Embedder is not found, it falls back to the default one. + +#### Returns + +`void` + +*** + +### removeStray() + +> **removeStray**(`userId`): `boolean` + +Removes a stray instance for the specified user from the collection. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `userId` | `string` | The ID of the user to remove. | + +#### Returns + +`boolean` + +True if the user was successfully removed, false otherwise. + +*** + +### getInstance() + +> `static` **getInstance**(): `Promise`\<[`CheshireCat`](CheshireCat.md)\> + +Get the Cheshire Cat instance + +#### Returns + +`Promise`\<[`CheshireCat`](CheshireCat.md)\> + +The Cheshire Cat class as a singleton diff --git a/docs/api/classes/CustomChat.md b/docs/api/classes/CustomChat.md new file mode 100644 index 0000000..7c245ac --- /dev/null +++ b/docs/api/classes/CustomChat.md @@ -0,0 +1,79 @@ +[Overview](../index.md) / CustomChat + +# CustomChat + +## Extends + +- `BaseChatModel` + +## Constructors + +### new CustomChat() + +> **new CustomChat**(`params`): [`CustomChat`](CustomChat.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `BaseLanguageModelParams` & `object` | + +#### Returns + +[`CustomChat`](CustomChat.md) + +#### Overrides + +`BaseChatModel.constructor` + +## Methods + +### \_generate() + +> **\_generate**(`messages`, `_options`, `_runManager`?): `Promise`\<`ChatResult`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `messages` | `BaseMessage`[] | +| `_options` | `Omit`\<`BaseChatModelCallOptions`, `"callbacks"` \| `"tags"` \| `"metadata"` \| `"configurable"` \| `"recursionLimit"` \| `"runName"` \| `"runId"`\> | +| `_runManager`? | `CallbackManagerForLLMRun` | + +#### Returns + +`Promise`\<`ChatResult`\> + +#### Overrides + +`BaseChatModel._generate` + +*** + +### \_identifyingParams() + +> **\_identifyingParams**(): `Record`\<`string`, `any`\> + +Get the identifying parameters of the LLM. + +#### Returns + +`Record`\<`string`, `any`\> + +#### Overrides + +`BaseChatModel._identifyingParams` + +*** + +### \_llmType() + +> **\_llmType**(): `string` + +#### Returns + +`string` + +#### Overrides + +`BaseChatModel._llmType` diff --git a/docs/api/classes/CustomChatOllama.md b/docs/api/classes/CustomChatOllama.md new file mode 100644 index 0000000..5b8f2eb --- /dev/null +++ b/docs/api/classes/CustomChatOllama.md @@ -0,0 +1,27 @@ +[Overview](../index.md) / CustomChatOllama + +# CustomChatOllama + +## Extends + +- `ChatOllama` + +## Constructors + +### new CustomChatOllama() + +> **new CustomChatOllama**(`params`): [`CustomChatOllama`](CustomChatOllama.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `ChatOllamaInput` & `object` | + +#### Returns + +[`CustomChatOllama`](CustomChatOllama.md) + +#### Overrides + +`ChatOllama.constructor` diff --git a/docs/api/classes/CustomChatOpenAI.md b/docs/api/classes/CustomChatOpenAI.md new file mode 100644 index 0000000..654453b --- /dev/null +++ b/docs/api/classes/CustomChatOpenAI.md @@ -0,0 +1,41 @@ +[Overview](../index.md) / CustomChatOpenAI + +# CustomChatOpenAI + +## Extends + +- `ChatOpenAI` + +## Constructors + +### new CustomChatOpenAI() + +> **new CustomChatOpenAI**(`params`): [`CustomChatOpenAI`](CustomChatOpenAI.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `ChatOpenAIFields` & `object` | + +#### Returns + +[`CustomChatOpenAI`](CustomChatOpenAI.md) + +#### Overrides + +`ChatOpenAI.constructor` + +## Methods + +### \_llmType() + +> **\_llmType**(): `string` + +#### Returns + +`string` + +#### Overrides + +`ChatOpenAI._llmType` diff --git a/docs/api/classes/CustomOpenAIEmbeddings.md b/docs/api/classes/CustomOpenAIEmbeddings.md new file mode 100644 index 0000000..65b0099 --- /dev/null +++ b/docs/api/classes/CustomOpenAIEmbeddings.md @@ -0,0 +1,78 @@ +[Overview](../index.md) / CustomOpenAIEmbeddings + +# CustomOpenAIEmbeddings + +## Extends + +- `Embeddings` + +## Constructors + +### new CustomOpenAIEmbeddings() + +> **new CustomOpenAIEmbeddings**(`params`): [`CustomOpenAIEmbeddings`](CustomOpenAIEmbeddings.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `AsyncCallerParams` & `object` | + +#### Returns + +[`CustomOpenAIEmbeddings`](CustomOpenAIEmbeddings.md) + +#### Overrides + +`Embeddings.constructor` + +## Methods + +### embedDocuments() + +> **embedDocuments**(`documents`): `Promise`\<`number`[][]\> + +An abstract method that takes an array of documents as input and +returns a promise that resolves to an array of vectors for each +document. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `documents` | `string`[] | An array of documents to be embedded. | + +#### Returns + +`Promise`\<`number`[][]\> + +A promise that resolves to an array of vectors for each document. + +#### Overrides + +`Embeddings.embedDocuments` + +*** + +### embedQuery() + +> **embedQuery**(`document`): `Promise`\<`number`[]\> + +An abstract method that takes a single document as input and returns a +promise that resolves to a vector for the query document. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `document` | `string` | A single document to be embedded. | + +#### Returns + +`Promise`\<`number`[]\> + +A promise that resolves to a vector for the query document. + +#### Overrides + +`Embeddings.embedQuery` diff --git a/docs/api/classes/Database.md b/docs/api/classes/Database.md new file mode 100644 index 0000000..98f7650 --- /dev/null +++ b/docs/api/classes/Database.md @@ -0,0 +1,135 @@ +[Overview](../index.md) / Database + +# Database + +## Accessors + +### data + +> `get` **data**(): `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\> + +Gets the database object. + +#### Returns + +`objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\> + +A deep clone of the database data. + +| Name | Type | +| ------ | ------ | +| `activeForms` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `activePlugins` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `activeTools` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `cache` | `ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\> | +| `chunkOverlap` | `ZodDefault`\<`ZodNumber`\> | +| `chunkSize` | `ZodDefault`\<`ZodNumber`\> | +| `embedders` | `ZodDefault`\<`ZodArray`\<`ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\>, `"many"`\>\> | +| `instantTool` | `ZodDefault`\<`ZodBoolean`\> | +| `llms` | `ZodDefault`\<`ZodArray`\<`ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\>, `"many"`\>\> | +| `rateLimiter` | `ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\> | +| `selectedEmbedder` | `ZodDefault`\<`ZodString`\> | +| `selectedLLM` | `ZodDefault`\<`ZodString`\> | + +*** + +### keys + +> `get` **keys**(): `ZodObject`\<`object`, `"passthrough"`, `ZodTypeAny`, `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>, `objectInputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\> + +Gets the schema of the default keys of the database. + +#### Returns + +`ZodObject`\<`object`, `"passthrough"`, `ZodTypeAny`, `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>, `objectInputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\> + +| Name | Type | +| ------ | ------ | +| `activeForms` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `activePlugins` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `activeTools` | `ZodDefault`\<`ZodSet`\<`ZodString`\>\> | +| `cache` | `ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\> | +| `chunkOverlap` | `ZodDefault`\<`ZodNumber`\> | +| `chunkSize` | `ZodDefault`\<`ZodNumber`\> | +| `embedders` | `ZodDefault`\<`ZodArray`\<`ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\>, `"many"`\>\> | +| `instantTool` | `ZodDefault`\<`ZodBoolean`\> | +| `llms` | `ZodDefault`\<`ZodArray`\<`ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\>, `"many"`\>\> | +| `rateLimiter` | `ZodObject`\<`object`, `"strip"`, `ZodTypeAny`, `object`, `object`\> | +| `selectedEmbedder` | `ZodDefault`\<`ZodString`\> | +| `selectedLLM` | `ZodDefault`\<`ZodString`\> | + +## Methods + +### delete() + +> **delete**(`key`): `void` + +Deletes a key-value pair from the database. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `key` | `string` | The key of the pair to delete. | + +#### Returns + +`void` + +*** + +### parse() + +> **parse**(`data`): `SafeParseReturnType`\<`objectInputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>, `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\> + +Parses the given data. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\> | The data to be parsed. | + +#### Returns + +`SafeParseReturnType`\<`objectInputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>, `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\> + +The safely parsed data. + +*** + +### update() + +> **update**(`fn`): `void` + +Updates the database configuration and reads the updated configuration. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `fn` | (`db`) => `void` | A function that takes the current database configuration as a parameter and updates it. | + +#### Returns + +`void` + +*** + +### init() + +> `static` **init**(`path`): [`Database`](Database.md) + +Initializes the database with the specified path. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `path` | `string` | The path to the database. | + +#### Returns + +[`Database`](Database.md) + +The initialized database instance. diff --git a/docs/api/classes/EmbedderConfig.md b/docs/api/classes/EmbedderConfig.md new file mode 100644 index 0000000..25bd5c8 --- /dev/null +++ b/docs/api/classes/EmbedderConfig.md @@ -0,0 +1,68 @@ +[Overview](../index.md) / EmbedderConfig + +# EmbedderConfig\ + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `Config` *extends* `z.ZodTypeAny` | `z.ZodTypeAny` | + +## Constructors + +### new EmbedderConfig() + +> **new EmbedderConfig**\<`Config`\>(`_settings`): [`EmbedderConfig`](EmbedderConfig.md)\<`Config`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `_settings` | `EmbedderSettings`\<`Config`\> | + +#### Returns + +[`EmbedderConfig`](EmbedderConfig.md)\<`Config`\> + +## Accessors + +### config + +> `get` **config**(): `Config` + +#### Returns + +`Config` + +*** + +### info + +> `get` **info**(): `object` + +#### Returns + +`object` + +| Name | Type | +| ------ | ------ | +| `description` | `string` | +| `id` | `string` | +| `link` | `undefined` \| `string` | +| `name` | `string` | + +## Methods + +### initModel() + +> **initModel**(`params`): `Embeddings` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `input`\<`Config`\> | + +#### Returns + +`Embeddings` diff --git a/docs/api/classes/FakeChat.md b/docs/api/classes/FakeChat.md new file mode 100644 index 0000000..05eb222 --- /dev/null +++ b/docs/api/classes/FakeChat.md @@ -0,0 +1,55 @@ +[Overview](../index.md) / FakeChat + +# FakeChat + +## Extends + +- `SimpleChatModel` + +## Constructors + +### new FakeChat() + +> **new FakeChat**(`params`?): [`FakeChat`](FakeChat.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params`? | `BaseLanguageModelParams` | + +#### Returns + +[`FakeChat`](FakeChat.md) + +#### Overrides + +`SimpleChatModel.constructor` + +## Methods + +### \_call() + +> **\_call**(): `Promise`\<`string`\> + +#### Returns + +`Promise`\<`string`\> + +#### Overrides + +`SimpleChatModel._call` + +*** + +### \_llmType() + +> **\_llmType**(): `string` + +#### Returns + +`string` + +#### Overrides + +`SimpleChatModel._llmType` diff --git a/docs/api/classes/FastEmbedEmbeddings.md b/docs/api/classes/FastEmbedEmbeddings.md new file mode 100644 index 0000000..7e78678 --- /dev/null +++ b/docs/api/classes/FastEmbedEmbeddings.md @@ -0,0 +1,78 @@ +[Overview](../index.md) / FastEmbedEmbeddings + +# FastEmbedEmbeddings + +## Extends + +- `Embeddings` + +## Constructors + +### new FastEmbedEmbeddings() + +> **new FastEmbedEmbeddings**(`params`): [`FastEmbedEmbeddings`](FastEmbedEmbeddings.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | `FastEmbeddingsParams` | + +#### Returns + +[`FastEmbedEmbeddings`](FastEmbedEmbeddings.md) + +#### Overrides + +`Embeddings.constructor` + +## Methods + +### embedDocuments() + +> **embedDocuments**(`documents`): `Promise`\<`number`[][]\> + +An abstract method that takes an array of documents as input and +returns a promise that resolves to an array of vectors for each +document. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `documents` | `string`[] | An array of documents to be embedded. | + +#### Returns + +`Promise`\<`number`[][]\> + +A promise that resolves to an array of vectors for each document. + +#### Overrides + +`Embeddings.embedDocuments` + +*** + +### embedQuery() + +> **embedQuery**(`document`): `Promise`\<`number`[]\> + +An abstract method that takes a single document as input and returns a +promise that resolves to a vector for the query document. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `document` | `string` | A single document to be embedded. | + +#### Returns + +`Promise`\<`number`[]\> + +A promise that resolves to a vector for the query document. + +#### Overrides + +`Embeddings.embedQuery` diff --git a/docs/api/classes/Form.md b/docs/api/classes/Form.md new file mode 100644 index 0000000..8c8568c --- /dev/null +++ b/docs/api/classes/Form.md @@ -0,0 +1,106 @@ +[Overview](../index.md) / Form + +# Form\ + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `T` *extends* `Record`\<`string`, `z.ZodType`\> | `Record`\<`string`, `z.ZodType`\> | +| `S` *extends* `z.infer`\<`z.ZodObject`\<`T`\>\> | `z.infer`\<`z.ZodObject`\<`T`\>\> | + +## Constructors + +### new Form() + +> **new Form**\<`T`, `S`\>(`name`, `schema`, `options`): [`Form`](Form.md)\<`T`, `S`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `name` | `string` | +| `schema` | `T` | +| `options` | `FormOptions`\<`S`\> | + +#### Returns + +[`Form`](Form.md)\<`T`, `S`\> + +## Properties + +| Property | Type | Default value | +| ------ | ------ | ------ | +| `askConfirm` | `boolean` | `undefined` | +| `description` | `string` | `undefined` | +| `invalidFields` | `string`[] | `[]` | +| `model` | `S` | `undefined` | +| `name` | `string` | `undefined` | +| `schema` | `ZodObject`\<`T`, `UnknownKeysParam`, `ZodTypeAny`, \{ \[k in string \| number \| symbol\]: addQuestionMarks\, any\>\[k\] \}, \{ \[k in string \| number \| symbol\]: baseObjectInputType\\[k\] \}\> | `undefined` | +| `startExamples` | `string`[] | `undefined` | +| `stopExamples` | `string`[] | `undefined` | +| `submit` | `FormSubmit`\<`S`\> | `undefined` | + +## Accessors + +### active + +> `get` **active**(): `boolean` + +> `set` **active**(`active`): `void` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `active` | `boolean` | + +#### Returns + +`boolean` + +*** + +### state + +> `get` **state**(): [`FormState`](../enumerations/FormState.md) + +#### Returns + +[`FormState`](../enumerations/FormState.md) + +## Methods + +### assignCat() + +> **assignCat**(`cat`): [`Form`](Form.md)\<`T`, `S`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `cat` | [`StrayCat`](StrayCat.md) | + +#### Returns + +[`Form`](Form.md)\<`T`, `S`\> + +*** + +### next() + +> **next**(): `Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +#### Returns + +`Promise`\<[`AgentFastReply`](../interfaces/AgentFastReply.md)\> + +*** + +### reset() + +> **reset**(): `void` + +#### Returns + +`void` diff --git a/docs/api/classes/HttpError.md b/docs/api/classes/HttpError.md new file mode 100644 index 0000000..e14c06a --- /dev/null +++ b/docs/api/classes/HttpError.md @@ -0,0 +1,294 @@ +[Overview](../index.md) / HttpError + +# HttpError + +## Extends + +- `Error` + +## Constructors + +### new HttpError() + +> **new HttpError**(`message`, `status`, `cause`, `data`): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `message` | `string` | `undefined` | +| `status` | `number` | `undefined` | +| `cause` | `string` | `undefined` | +| `data` | `any` | `undefined` | + +#### Returns + +[`HttpError`](HttpError.md) + +#### Overrides + +`Error.constructor` + +## Properties + +| Property | Modifier | Type | Default value | Inherited from | +| ------ | ------ | ------ | ------ | ------ | +| `cause` | `public` | `string` | `undefined` | `Error.cause` | +| `data` | `public` | `any` | `undefined` | - | +| `message` | `public` | `string` | `undefined` | `Error.message` | +| `status` | `public` | `number` | `undefined` | - | + +## Methods + +### BadGateway() + +> `static` **BadGateway**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### BadRequest() + +> `static` **BadRequest**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### Conflict() + +> `static` **Conflict**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### Forbidden() + +> `static` **Forbidden**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### GatewayTimeout() + +> `static` **GatewayTimeout**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### IAmATeapot() + +> `static` **IAmATeapot**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### InternalServer() + +> `static` **InternalServer**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### MethodNotAllowed() + +> `static` **MethodNotAllowed**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### NotFound() + +> `static` **NotFound**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### NotImplemented() + +> `static` **NotImplemented**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### PaymentRequired() + +> `static` **PaymentRequired**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### ServiceUnavailable() + +> `static` **ServiceUnavailable**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### TooManyRequests() + +> `static` **TooManyRequests**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### Unauthorized() + +> `static` **Unauthorized**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) + +*** + +### UnsupportedMediaType() + +> `static` **UnsupportedMediaType**(`message`, `data`?): [`HttpError`](HttpError.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `message` | `string` | +| `data`? | `any` | + +#### Returns + +[`HttpError`](HttpError.md) diff --git a/docs/api/classes/MadHatter.md b/docs/api/classes/MadHatter.md new file mode 100644 index 0000000..fd53127 --- /dev/null +++ b/docs/api/classes/MadHatter.md @@ -0,0 +1,184 @@ +[Overview](../index.md) / MadHatter + +# MadHatter + +## Properties + +| Property | Type | Default value | +| ------ | ------ | ------ | +| `forms` | [`Form`](Form.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>[] | `[]` | +| `hooks` | `Partial`\<[`Hooks`](../type-aliases/Hooks.md)\> | `{}` | +| `onPluginsSyncCallback?` | () => `Promise`\<`void`\> | `undefined` | +| `tools` | [`Tool`](Tool.md)[] | `[]` | + +## Accessors + +### installedPlugins + +> `get` **installedPlugins**(): `object`[] + +Gets a copy of the installed plugins. + +#### Returns + +`object`[] + +## Methods + +### executeHook() + +> **executeHook**\<`T`\>(`name`, ...`args`): `ReturnType`\<[`HookTypes`](../interfaces/HookTypes.md)\[`T`\]\> + +Executes a hook method by name with the provided arguments. + +#### Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `T` *extends* keyof [`HookTypes`](../interfaces/HookTypes.md) | keyof [`HookTypes`](../interfaces/HookTypes.md) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `T` | The name of the hook to execute. | +| ...`args` | `Parameters`\<[`HookTypes`](../interfaces/HookTypes.md)\[`T`\]\> | The arguments to pass to the hook function. | + +#### Returns + +`ReturnType`\<[`HookTypes`](../interfaces/HookTypes.md)\[`T`\]\> + +The result of executing the hook methods sequentially. + +*** + +### findPlugins() + +> **findPlugins**(): `Promise`\<`void`\> + +Finds and installs plugins present in the plugins path. + +#### Returns + +`Promise`\<`void`\> + +*** + +### getPlugin() + +> **getPlugin**(`id`): `undefined` \| [`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\> + +Gets a plugin by its ID. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `id` | `string` | The ID of the plugin to get. | + +#### Returns + +`undefined` \| [`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\> + +*** + +### installPlugin() + +> **installPlugin**(`path`): `Promise`\<[`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>\> + +Installs a plugin from the specified path. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `path` | `string` | The path to the plugin. | + +#### Returns + +`Promise`\<[`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>\> + +The installed plugin. + +*** + +### reloadPlugin() + +> **reloadPlugin**(`id`): `Promise`\<`void`\> + +Reloads a plugin by its ID. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `id` | `string` | The ID of the plugin to reload. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### removePlugin() + +> **removePlugin**(`id`): `Promise`\<`void`\> + +Removes a plugin by its ID. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `id` | `string` | The ID of the plugin to remove. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### syncHooksAndProcedures() + +> **syncHooksAndProcedures**(): `Promise`\<`void`\> + +Synchronizes hooks, tools and forms. +It also sorts the hooks by priority. + +#### Returns + +`Promise`\<`void`\> + +*** + +### togglePlugin() + +> **togglePlugin**(`id`, `state`?, `sync`?): `Promise`\<`boolean`\> + +Toggles a plugin's state and executes corresponding hooks. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `id` | `string` | `undefined` | The ID of the plugin to toggle. | +| `state`? | `boolean` | `undefined` | The state to set the plugin to. Default is undefined. | +| `sync`? | `boolean` | `true` | Whether to synchronize hooks and tools immediately. Default is true. | + +#### Returns + +`Promise`\<`boolean`\> + +*** + +### getInstance() + +> `static` **getInstance**(): `Promise`\<[`MadHatter`](MadHatter.md)\> + +Get the Mad Hatter instance + +#### Returns + +`Promise`\<[`MadHatter`](MadHatter.md)\> + +The Mad Hatter class as a singleton diff --git a/docs/api/classes/ModelInteractionHandler.md b/docs/api/classes/ModelInteractionHandler.md new file mode 100644 index 0000000..bdc206f --- /dev/null +++ b/docs/api/classes/ModelInteractionHandler.md @@ -0,0 +1,81 @@ +[Overview](../index.md) / ModelInteractionHandler + +# ModelInteractionHandler + +## Extends + +- `BaseCallbackHandler` + +## Constructors + +### new ModelInteractionHandler() + +> **new ModelInteractionHandler**(`stray`, `source`, `input`?): [`ModelInteractionHandler`](ModelInteractionHandler.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | +| `source` | `string` | +| `input`? | `BaseCallbackHandlerInput` | + +#### Returns + +[`ModelInteractionHandler`](ModelInteractionHandler.md) + +#### Overrides + +`BaseCallbackHandler.constructor` + +## Properties + +| Property | Type | Default value | Overrides | +| ------ | ------ | ------ | ------ | +| `name` | `string` | `'ModelInteraction'` | `BaseCallbackHandler.name` | + +## Methods + +### handleLLMEnd() + +> **handleLLMEnd**(`output`): `Promise`\<`void`\> + +Called at the end of an LLM/ChatModel run, with the output and the run ID. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `output` | `LLMResult` | + +#### Returns + +`Promise`\<`void`\> + +#### Overrides + +`BaseCallbackHandler.handleLLMEnd` + +*** + +### handleLLMStart() + +> **handleLLMStart**(`_llm`, `prompts`): `Promise`\<`void`\> + +Called at the start of an LLM or Chat Model run, with the prompt(s) +and the run ID. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `_llm` | `Serialized` | +| `prompts` | `string`[] | + +#### Returns + +`Promise`\<`void`\> + +#### Overrides + +`BaseCallbackHandler.handleLLMStart` diff --git a/docs/api/classes/NewTokenHandler.md b/docs/api/classes/NewTokenHandler.md new file mode 100644 index 0000000..c8ebb19 --- /dev/null +++ b/docs/api/classes/NewTokenHandler.md @@ -0,0 +1,56 @@ +[Overview](../index.md) / NewTokenHandler + +# NewTokenHandler + +## Extends + +- `BaseCallbackHandler` + +## Constructors + +### new NewTokenHandler() + +> **new NewTokenHandler**(`stray`, `input`?): [`NewTokenHandler`](NewTokenHandler.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | +| `input`? | `BaseCallbackHandlerInput` | + +#### Returns + +[`NewTokenHandler`](NewTokenHandler.md) + +#### Overrides + +`BaseCallbackHandler.constructor` + +## Properties + +| Property | Type | Default value | Overrides | +| ------ | ------ | ------ | ------ | +| `name` | `string` | `'NewToken'` | `BaseCallbackHandler.name` | + +## Methods + +### handleLLMNewToken() + +> **handleLLMNewToken**(`token`): `void` + +Called when an LLM/ChatModel in `streaming` mode produces a new token + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `token` | `string` | + +#### Returns + +`void` + +#### Overrides + +`BaseCallbackHandler.handleLLMNewToken` diff --git a/docs/api/classes/Plugin.md b/docs/api/classes/Plugin.md new file mode 100644 index 0000000..0b50f68 --- /dev/null +++ b/docs/api/classes/Plugin.md @@ -0,0 +1,204 @@ +[Overview](../index.md) / Plugin + +# Plugin\ + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `T` *extends* `Record`\<`string`, `z.ZodType`\> | `Record`\<`string`, `z.ZodType`\> | +| `S` *extends* `z.infer`\<`z.ZodObject`\<`T`\>\> | `z.infer`\<`z.ZodObject`\<`T`\>\> | + +## Properties + +| Property | Modifier | Type | Default value | +| ------ | ------ | ------ | ------ | +| `forms` | `public` | [`Form`](Form.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>[] | `[]` | +| `path` | `public` | `string` | `undefined` | +| `tools` | `public` | [`Tool`](Tool.md)[] | `[]` | + +## Accessors + +### active + +> `get` **active**(): `boolean` + +> `set` **active**(`active`): `void` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `active` | `boolean` | + +#### Returns + +`boolean` + +*** + +### hooks + +> `get` **hooks**(): [`Hook`](../type-aliases/Hook.md)[] + +#### Returns + +[`Hook`](../type-aliases/Hook.md)[] + +*** + +### id + +> `get` **id**(): `string` + +#### Returns + +`string` + +*** + +### info + +> `get` **info**(): `object` + +#### Returns + +`object` + +| Name | Type | Default value | +| ------ | ------ | ------ | +| `active` | `boolean` | - | +| `forms` | `object`[] | - | +| `hooks` | `object`[] | - | +| `id` | `string` | - | +| `manifest` | `object` | - | +| `manifest.authorName` | `string` | - | +| `manifest.authorUrl`? | `string` | - | +| `manifest.description` | `string` | - | +| `manifest.name` | `string` | - | +| `manifest.pluginUrl`? | `string` | - | +| `manifest.tags` | `string`[] | - | +| `manifest.thumb`? | `string` | - | +| `manifest.version` | `string` | - | +| `tools` | `object`[] | - | +| `upgradable` | `boolean` | false | + +*** + +### manifest + +> `get` **manifest**(): `object` + +#### Returns + +`object` + +| Name | Type | +| ------ | ------ | +| `authorName` | `string` | +| `authorUrl`? | `string` | +| `description` | `string` | +| `name` | `string` | +| `pluginUrl`? | `string` | +| `tags` | `string`[] | +| `thumb`? | `string` | +| `version` | `string` | + +*** + +### reloading + +> `get` **reloading**(): `boolean` + +#### Returns + +`boolean` + +*** + +### schema + +> `get` **schema**(): `ZodObject`\<`T`, `UnknownKeysParam`, `ZodTypeAny`, \{ \[k in string \| number \| symbol\]: addQuestionMarks\, any\>\[k\] \}, \{ \[k in string \| number \| symbol\]: baseObjectInputType\\[k\] \}\> + +#### Returns + +`ZodObject`\<`T`, `UnknownKeysParam`, `ZodTypeAny`, \{ \[k in string \| number \| symbol\]: addQuestionMarks\, any\>\[k\] \}, \{ \[k in string \| number \| symbol\]: baseObjectInputType\\[k\] \}\> + +*** + +### settings + +> `get` **settings**(): `S` + +> `set` **settings**(`settings`): `void` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `settings` | `S` | + +#### Returns + +`S` + +## Methods + +### reload() + +> **reload**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### remove() + +> **remove**(): `Promise`\<`void`\> + +Asynchronously removes the current plugin. +This method performs the following actions: +1. Triggers the 'removed' event. +2. Revokes all object URLs stored. +3. If any dependencies are found in the plugin's package.json file, they are uninstalled. +4. Deletes the plugin's directory and its contents. + +#### Returns + +`Promise`\<`void`\> + +*** + +### triggerEvent() + +> **triggerEvent**(`event`): `void` + +Triggers the specified event. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | keyof `PluginEvents` | The name of the event to trigger. | + +#### Returns + +`void` + +*** + +### new() + +> `static` **new**(`path`): `Promise`\<[`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `path` | `string` | + +#### Returns + +`Promise`\<[`Plugin`](Plugin.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>\> diff --git a/docs/api/classes/ProceduresOutputParser.md b/docs/api/classes/ProceduresOutputParser.md new file mode 100644 index 0000000..d265f16 --- /dev/null +++ b/docs/api/classes/ProceduresOutputParser.md @@ -0,0 +1,84 @@ +[Overview](../index.md) / ProceduresOutputParser + +# ProceduresOutputParser + +## Extends + +- `AgentActionOutputParser` + +## Constructors + +### new ProceduresOutputParser() + +> **new ProceduresOutputParser**(`kwargs`?, ...`_args`?): [`ProceduresOutputParser`](ProceduresOutputParser.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `kwargs`? | `SerializedFields` | +| ...`_args`? | `never`[] | + +#### Returns + +[`ProceduresOutputParser`](ProceduresOutputParser.md) + +#### Inherited from + +`AgentActionOutputParser.constructor` + +## Properties + +| Property | Type | Description | Overrides | +| ------ | ------ | ------ | ------ | +| `lc_namespace` | `string`[] | A path to the module that contains the class, eg. ["langchain", "llms"] Usually should be the same as the entrypoint the class is exported from. | `AgentActionOutputParser.lc_namespace` | + +## Methods + +### getFormatInstructions() + +> **getFormatInstructions**(): `string` + +Return a string describing the format of the output. + +#### Returns + +`string` + +Format instructions. + +#### Example + +```json +{ + "foo": "bar" +} +``` + +#### Overrides + +`AgentActionOutputParser.getFormatInstructions` + +*** + +### parse() + +> **parse**(`output`): `Promise`\<`AgentAction` \| `AgentFinish`\> + +Parse the output of an LLM call. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `output` | `string` | + +#### Returns + +`Promise`\<`AgentAction` \| `AgentFinish`\> + +Parsed output. + +#### Overrides + +`AgentActionOutputParser.parse` diff --git a/docs/api/classes/RabbitHole.md b/docs/api/classes/RabbitHole.md new file mode 100644 index 0000000..5dab23a --- /dev/null +++ b/docs/api/classes/RabbitHole.md @@ -0,0 +1,193 @@ +[Overview](../index.md) / RabbitHole + +# RabbitHole + +## Accessors + +### fileParsers + +> `get` **fileParsers**(): `object` + +Get the file parsers + +#### Returns + +`object` + +*** + +### textSplitter + +> `get` **textSplitter**(): `TextSplitter` + +#### Returns + +`TextSplitter` + +*** + +### webParsers + +> `get` **webParsers**(): [`WebParser`](../type-aliases/WebParser.md)[] + +Get the web parsers + +#### Returns + +[`WebParser`](../type-aliases/WebParser.md)[] + +## Methods + +### ingestContent() + +> **ingestContent**(`stray`, `content`, `source`, `metadata`?): `Promise`\<`void`\> + +Ingests textual content into the memory. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | `undefined` | The StrayCat instance. | +| `content` | `string` \| `string`[] | `undefined` | The textual content to ingest. | +| `source` | `string` | `'unknown'` | The source of the content (default: 'unknown'). | +| `metadata`? | `Record`\<`string`, `any`\> | `undefined` | Additional metadata to store with the content. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### ingestFile() + +> **ingestFile**(`stray`, `file`, `chunkSize`?, `chunkOverlap`?, `metadata`?): `Promise`\<`void`\> + +Ingests a file and processes its content. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | The StrayCat instance. | +| `file` | `File` | The file to ingest. | +| `chunkSize`? | `number` | The size of each chunk for splitting the content. | +| `chunkOverlap`? | `number` | The overlap between chunks. | +| `metadata`? | `Record`\<`string`, `any`\> | Additional metadata to store with the content. | + +#### Returns + +`Promise`\<`void`\> + +#### Throws + +An error if the file type is not supported. + +*** + +### ingestMemory() + +> **ingestMemory**(`json`): `Promise`\<`void`\> + +Upload memories to the declarative memory from a JSON file. +When doing this, please, make sure the embedder used to export the memories is the same as the one used when uploading. +The method also performs a check on the dimensionality of the embeddings (i.e. length of each vector). + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `json` | [`MemoryJson`](../interfaces/MemoryJson.md) \| `File` | the json object containing the memories to be ingested. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### ingestPathOrURL() + +> **ingestPathOrURL**(`stray`, `path`, `chunkSize`?, `chunkOverlap`?, `metadata`?): `Promise`\<`void`\> + +Ingests a path or URL and processes the content. +If the input is a URL, it uses a web handler to load the content. +If the input is a file system path, it reads the file and processes the content. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | The StrayCat instance. | +| `path` | `string` | The path or URL to ingest. | +| `chunkSize`? | `number` | The size of each chunk for splitting the content. | +| `chunkOverlap`? | `number` | The overlap between chunks. | +| `metadata`? | `Record`\<`string`, `any`\> | Additional metadata to store with the content. | + +#### Returns + +`Promise`\<`void`\> + +#### Throws + +If the URL doesn't match any web handler or the path doesn't exist. + +*** + +### splitDocs() + +> **splitDocs**(`stray`, `docs`, `chunkSize`?, `chunkOverlap`?): `Promise`\<`Document`\<`Record`\<`string`, `any`\>\>[]\> + +Splits an array of texts into smaller chunks and creates documents. +The method also executes the beforeSplitTexts and afterSplitTexts hooks. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | The StrayCat instance. | +| `docs` | `Document`\<`Record`\<`string`, `any`\>\>[] | The array of documents to be split. | +| `chunkSize`? | `number` | The size of each chunk for splitting the content (default: 256). | +| `chunkOverlap`? | `number` | The overlap between chunks (default: 64). | + +#### Returns + +`Promise`\<`Document`\<`Record`\<`string`, `any`\>\>[]\> + +An array of documents. + +*** + +### storeDocuments() + +> **storeDocuments**(`stray`, `docs`, `source`, `metadata`?): `Promise`\<`void`\> + +Stores the given documents in memory. +The method also executes the beforeStoreDocuments and beforeInsertInMemory hooks. +It sends a websocket notification of the progress and when the reading process is completed + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `stray` | [`StrayCat`](StrayCat.md) | The StrayCat instance. | +| `docs` | `Document`\<`Record`\<`string`, `any`\>\>[] | An array of documents to store. | +| `source` | `string` | The source of the documents. | +| `metadata`? | `Record`\<`string`, `any`\> | Additional metadata to store with the content. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### getInstance() + +> `static` **getInstance**(): `Promise`\<[`RabbitHole`](RabbitHole.md)\> + +Get the Rabbit Hole instance + +#### Returns + +`Promise`\<[`RabbitHole`](RabbitHole.md)\> + +The Rabbit Hole class as a singleton diff --git a/docs/api/classes/RateLimitHandler.md b/docs/api/classes/RateLimitHandler.md new file mode 100644 index 0000000..45b7eb6 --- /dev/null +++ b/docs/api/classes/RateLimitHandler.md @@ -0,0 +1,103 @@ +[Overview](../index.md) / RateLimitHandler + +# RateLimitHandler + +## Extends + +- `BaseCallbackHandler` + +## Implements + +- `RateLimitHandlerParams` + +## Constructors + +### new RateLimitHandler() + +> **new RateLimitHandler**(`input`?): [`RateLimitHandler`](RateLimitHandler.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `input`? | `BaseCallbackHandlerInput` | + +#### Returns + +[`RateLimitHandler`](RateLimitHandler.md) + +#### Overrides + +`BaseCallbackHandler.constructor` + +## Properties + +| Property | Type | Default value | Overrides | +| ------ | ------ | ------ | ------ | +| `availableTokens` | `number` | `0` | - | +| `checkInterval` | `number` | `undefined` | - | +| `enabled` | `boolean` | `false` | - | +| `lastRequest` | `number` | `0` | - | +| `maxBucketSize` | `number` | `undefined` | - | +| `name` | `string` | `'RateLimit'` | `BaseCallbackHandler.name` | +| `tokensPerSecond` | `number` | `undefined` | - | + +## Methods + +### acquire() + +> **acquire**(`blocking`): `Promise`\<`boolean`\> + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `blocking` | `boolean` | `true` | + +#### Returns + +`Promise`\<`boolean`\> + +*** + +### consume() + +> **consume**(): `boolean` + +#### Returns + +`boolean` + +*** + +### handleChainStart() + +> **handleChainStart**(): `Promise`\<`void`\> + +Called at the start of a Chain run, with the chain name and inputs +and the run ID. + +#### Returns + +`Promise`\<`void`\> + +#### Overrides + +`BaseCallbackHandler.handleChainStart` + +*** + +### handleLLMStart() + +> **handleLLMStart**(): `Promise`\<`void`\> + +Called at the start of an LLM or Chat Model run, with the prompt(s) +and the run ID. + +#### Returns + +`Promise`\<`void`\> + +#### Overrides + +`BaseCallbackHandler.handleLLMStart` diff --git a/docs/api/classes/StrayCat.md b/docs/api/classes/StrayCat.md new file mode 100644 index 0000000..293b9f8 --- /dev/null +++ b/docs/api/classes/StrayCat.md @@ -0,0 +1,395 @@ +[Overview](../index.md) / StrayCat + +# StrayCat + +The stray cat goes around tools and hook, making troubles + +## Constructors + +### new StrayCat() + +> **new StrayCat**(`userId`, `ws`?): [`StrayCat`](StrayCat.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `userId` | `string` | +| `ws`? | [`WS`](../type-aliases/WS.md) | + +#### Returns + +[`StrayCat`](StrayCat.md) + +## Properties + +| Property | Modifier | Type | Default value | +| ------ | ------ | ------ | ------ | +| `activeForm?` | `public` | `string` | `undefined` | +| `userId` | `public` | `string` | `undefined` | +| `workingMemory` | `public` | [`WorkingMemory`](../interfaces/WorkingMemory.md) | `undefined` | +| `wsQueue` | `public` | [`WSMessage`](../type-aliases/WSMessage.md)[] | `[]` | + +## Accessors + +### agentManager + +> `get` **agentManager**(): [`AgentManager`](AgentManager.md) + +#### Returns + +[`AgentManager`](AgentManager.md) + +*** + +### currentEmbedder + +> `get` **currentEmbedder**(): `Embeddings` + +#### Returns + +`Embeddings` + +*** + +### currentLLM + +> `get` **currentLLM**(): `BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> + +#### Returns + +`BaseChatModel`\<`BaseChatModelCallOptions`, `AIMessageChunk`\> + +*** + +### lastUserMessage + +> `get` **lastUserMessage**(): [`Message`](../interfaces/Message.md) + +#### Returns + +[`Message`](../interfaces/Message.md) + +*** + +### plugins + +> `get` **plugins**(): `object`[] + +#### Returns + +`object`[] + +*** + +### rabbitHole + +> `get` **rabbitHole**(): [`RabbitHole`](RabbitHole.md) + +#### Returns + +[`RabbitHole`](RabbitHole.md) + +*** + +### vectorMemory + +> `get` **vectorMemory**(): [`VectorMemory`](VectorMemory.md) + +#### Returns + +[`VectorMemory`](VectorMemory.md) + +*** + +### whiteRabbit + +> `get` **whiteRabbit**(): [`WhiteRabbit`](WhiteRabbit.md) + +#### Returns + +[`WhiteRabbit`](WhiteRabbit.md) + +## Methods + +### addHistory() + +> **addHistory**(`message`): `void` + +Adds messages to the chat history. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `message` | [`MemoryMessage`](../interfaces/MemoryMessage.md)[] | the messages to add | + +#### Returns + +`void` + +*** + +### addInteraction() + +> **addInteraction**(`interaction`): `void` + +Adds an interaction to the working memory. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `interaction` | [`ModelInteraction`](../type-aliases/ModelInteraction.md) | the interaction to add | + +#### Returns + +`void` + +*** + +### addWebSocket() + +> **addWebSocket**(`value`): `void` + +This property is used to establish a new WebSocket connection. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `value` | `undefined` \| [`WS`](../type-aliases/WS.md) | The WebSocket instance. | + +#### Returns + +`void` + +*** + +### classify() + +> **classify**\<`S`, `T`\>(`sentence`, `labels`, `examples`?): `Promise`\<`null` \| `S`\> + +**`Experimental`** + +Classifies the given sentence into one of the provided labels. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `S` *extends* `string` | +| `T` *extends* [`S`, `...S[]`] | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `sentence` | `string` | The sentence to classify. | +| `labels` | `T` | The labels to classify the sentence into. | +| `examples`? | `{ [key in string]: S[] }` | Optional examples to help the LLM classify the sentence. | + +#### Returns + +`Promise`\<`null` \| `S`\> + +The label of the sentence or null if it could not be classified. + +*** + +### clearHistory() + +> **clearHistory**(): `void` + +Clears the chat history. + +#### Returns + +`void` + +*** + +### getHistory() + +> **getHistory**(`k`?): [`MemoryMessage`](../interfaces/MemoryMessage.md)[] + +If passed a number k, retrieves the last k messages in the chat history. +Otherwise, retrieves all messages in the chat history. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `k`? | `number` | the number of messages to retrieve | + +#### Returns + +[`MemoryMessage`](../interfaces/MemoryMessage.md)[] + +the messages present in the chat history + +*** + +### getInteraction() + +> **getInteraction**(`k`?): [`ModelInteraction`](../type-aliases/ModelInteraction.md)[] + +If passed a number k, retrieves the last k interactions in the working memory. +Otherwise, retrieves all interactions in the working memory. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `k`? | `number` | the number of interactions to retrieve | + +#### Returns + +[`ModelInteraction`](../type-aliases/ModelInteraction.md)[] + +the interactions present in the working memory + +*** + +### getPluginInfo() + +> **getPluginInfo**(): `Promise`\<`undefined` \| `object`\> + +Retrieves information about a plugin based on where it's executed. + +#### Returns + +`Promise`\<`undefined` \| `object`\> + +An object containing the plugin's active status, manifest, and settings. + +Returns undefined if the plugin is not found. + +*** + +### llm() + +#### llm(prompt, stream) + +> **llm**(`prompt`, `stream`?): `Promise`\<`AIMessageChunk`\> + +Executes the LLM with the given prompt and returns the response. + +##### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `prompt` | `BaseLanguageModelInput` | The prompt or messages to be passed to the LLM. | +| `stream`? | `false` | Optional parameter to enable streaming mode. | + +##### Returns + +`Promise`\<`AIMessageChunk`\> + +#### llm(prompt, stream) + +> **llm**(`prompt`, `stream`?): `Promise`\<`IterableReadableStream`\<`AIMessageChunk`\>\> + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `prompt` | `BaseLanguageModelInput` | +| `stream`? | `true` | + +##### Returns + +`Promise`\<`IterableReadableStream`\<`AIMessageChunk`\>\> + +*** + +### queryDb() + +> **queryDb**\<`T`\>(`question`, `type`, `source`): `Promise`\<`string`\> + +**`Experimental`** + +Executes a SQL query based on a natural language question. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `T` *extends* `"oracle"` \| `"postgres"` \| `"sqlite"` \| `"mysql"` \| `"mssql"` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `question` | `string` | The user question. | +| `type` | `T` | The SQL dialect to use. | +| `source` | `Omit`\<`Extract`\<`MysqlConnectionOptions`, `object`\> \| `Extract`\<`PostgresConnectionOptions`, `object`\> \| `Extract`\<`CockroachConnectionOptions`, `object`\> \| `Extract`\<`SqliteConnectionOptions`, `object`\> \| `Extract`\<`SqlServerConnectionOptions`, `object`\> \| `Extract`\<`SapConnectionOptions`, `object`\> \| `Extract`\<`OracleConnectionOptions`, `object`\> \| `Extract`\<`CordovaConnectionOptions`, `object`\> \| `Extract`\<`NativescriptConnectionOptions`, `object`\> \| `Extract`\<`ReactNativeConnectionOptions`, `object`\> \| `Extract`\<`SqljsConnectionOptions`, `object`\> \| `Extract`\<`MongoConnectionOptions`, `object`\> \| `Extract`\<`AuroraMysqlConnectionOptions`, `object`\> \| `Extract`\<`AuroraPostgresConnectionOptions`, `object`\> \| `Extract`\<`ExpoConnectionOptions`, `object`\> \| `Extract`\<`BetterSqlite3ConnectionOptions`, `object`\> \| `Extract`\<`CapacitorConnectionOptions`, `object`\> \| `Extract`\<`SpannerConnectionOptions`, `object`\>, `"type"`\> | The data source to execute the query on. | + +#### Returns + +`Promise`\<`string`\> + +The result of the SQL query in natural language. + +*** + +### recallRelevantMemories() + +> **recallRelevantMemories**(`query`?): `Promise`\<`void`\> + +Recalls relevant memories based on the given query. +If no query is provided, it uses the last user's message text as the query. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `query`? | `string` | The query string to search for relevant memories. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### run() + +> **run**(`msg`, `save`, `returnWhy`): `Promise`\<[`WSMessage`](../type-aliases/WSMessage.md)\> + +Processes the user message and returns the response. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `msg` | [`Message`](../interfaces/Message.md) | `undefined` | The message to send. | +| `save` | `boolean` | `true` | Whether to save the message or not in the chat history (default: true). | +| `returnWhy` | `boolean` | `true` | Whether to return the 'why' field in the response (default: true). | + +#### Returns + +`Promise`\<[`WSMessage`](../type-aliases/WSMessage.md)\> + +The response message. + +*** + +### send() + +> **send**(`msg`): `void` + +Sends a message through the websocket connection. + +If the websocket connection is not open, the message is queued. + +If the message is of type 'chat', it is also stored in the chat history. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `msg` | [`WSMessage`](../type-aliases/WSMessage.md) | The message to send. | + +#### Returns + +`void` diff --git a/docs/api/classes/Tool.md b/docs/api/classes/Tool.md new file mode 100644 index 0000000..bccd444 --- /dev/null +++ b/docs/api/classes/Tool.md @@ -0,0 +1,95 @@ +[Overview](../index.md) / Tool + +# Tool + +## Extends + +- `DynamicStructuredTool`\<*typeof* `toolSchema`\> + +## Constructors + +### new Tool() + +> **new Tool**(`name`, `description`, `fn`, `options`?): [`Tool`](Tool.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `name` | `string` | +| `description` | `string` | +| `fn` | `ToolFun` | +| `options`? | `ToolOptions` | + +#### Returns + +[`Tool`](Tool.md) + +#### Overrides + +`DynamicStructuredTool.constructor` + +## Properties + +| Property | Type | +| ------ | ------ | +| `startExamples` | `string`[] | + +## Accessors + +### active + +> `get` **active**(): `boolean` + +> `set` **active**(`active`): `void` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `active` | `boolean` | + +#### Returns + +`boolean` + +## Methods + +### assignCat() + +> **assignCat**(`cat`): [`Tool`](Tool.md) + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `cat` | [`StrayCat`](StrayCat.md) | + +#### Returns + +[`Tool`](Tool.md) + +*** + +### invoke() + +> **invoke**(`input`, `config`?): `Promise`\<`string`\> + +Invokes the tool with the provided input and configuration. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `input` | `string` \| `object` | The input for the tool. | +| `config`? | `RunnableConfig`\<`Record`\<`string`, `any`\>\> | Optional configuration for the tool. | + +#### Returns + +`Promise`\<`string`\> + +A Promise that resolves with a string. + +#### Overrides + +`DynamicStructuredTool.invoke` diff --git a/docs/api/classes/ToolPromptTemplate.md b/docs/api/classes/ToolPromptTemplate.md new file mode 100644 index 0000000..393050b --- /dev/null +++ b/docs/api/classes/ToolPromptTemplate.md @@ -0,0 +1,59 @@ +[Overview](../index.md) / ToolPromptTemplate + +# ToolPromptTemplate\ + +## Extends + +- `PromptTemplate`\<`RunInput`, `PartialVariableName`\> + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `RunInput` *extends* `InputValues` | `any` | +| `PartialVariableName` *extends* `string` | `any` | + +## Constructors + +### new ToolPromptTemplate() + +> **new ToolPromptTemplate**\<`RunInput`, `PartialVariableName`\>(`procedures`, `input`): [`ToolPromptTemplate`](ToolPromptTemplate.md)\<`RunInput`, `PartialVariableName`\> + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `procedures` | `Record`\<`string`, [`Tool`](Tool.md) \| [`Form`](Form.md)\<`Record`\<`string`, `ZodType`\<`any`, `ZodTypeDef`, `any`\>\>, `object`\>\> | +| `input` | `PromptTemplateInput`\<`RunInput`, `PartialVariableName`, `TemplateFormat`\> | + +#### Returns + +[`ToolPromptTemplate`](ToolPromptTemplate.md)\<`RunInput`, `PartialVariableName`\> + +#### Overrides + +`PromptTemplate.constructor` + +## Methods + +### format() + +> **format**(`values`): `Promise`\<`string`\> + +Formats the prompt template with the provided values. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `values` | `TypedPromptInputValues`\<`InputValues`\> | The values to be used to format the prompt template. | + +#### Returns + +`Promise`\<`string`\> + +A promise that resolves to a string which is the formatted prompt. + +#### Overrides + +`PromptTemplate.format` diff --git a/docs/api/classes/VectorMemory.md b/docs/api/classes/VectorMemory.md new file mode 100644 index 0000000..1e1a407 --- /dev/null +++ b/docs/api/classes/VectorMemory.md @@ -0,0 +1,41 @@ +[Overview](../index.md) / VectorMemory + +# VectorMemory + +## Properties + +| Property | Type | +| ------ | ------ | +| `collections` | [`VectorMemoryCollections`](../interfaces/VectorMemoryCollections.md) | + +## Accessors + +### db + +> `get` **db**(): `QdrantClient` + +Gets the vector database. + +#### Returns + +`QdrantClient` + +## Methods + +### getInstance() + +> `static` **getInstance**(`params`): `Promise`\<[`VectorMemory`](VectorMemory.md)\> + +Get the Vector Memory instance + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | [`VectorMemoryConfig`](../interfaces/VectorMemoryConfig.md) | + +#### Returns + +`Promise`\<[`VectorMemory`](VectorMemory.md)\> + +The Vector Memory class as a singleton diff --git a/docs/api/classes/VectorMemoryCollection.md b/docs/api/classes/VectorMemoryCollection.md new file mode 100644 index 0000000..f5f58ad --- /dev/null +++ b/docs/api/classes/VectorMemoryCollection.md @@ -0,0 +1,214 @@ +[Overview](../index.md) / VectorMemoryCollection + +# VectorMemoryCollection + +## Properties + +| Property | Modifier | Type | +| ------ | ------ | ------ | +| `embedderName` | `public` | `string` | +| `embedderSize` | `public` | `number` | +| `name` | `public` | `string` | + +## Methods + +### addPoint() + +> **addPoint**(`content`, `vector`, `metadata`?, `id`?, ...`args`?): `Promise`\<`undefined` \| `object`\> + +Add a point (and its metadata) to the vector store. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `content` | `string` | Original content to push. | +| `vector` | `number`[] | The embedding vector. | +| `metadata`? | `Record`\<`string`, `any`\> | Optional metadata associated with the content. | +| `id`? | \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\` | id to associate with the point. It has to be a UUID-like string. | +| ...`args`? | `object` & `object` \| `object`[] | Optional arguments to pass. | + +#### Returns + +`Promise`\<`undefined` \| `object`\> + +The id of the added point. + +*** + +### addPoints() + +> **addPoints**(`points`, ...`args`): `Promise`\<`object`\> + +Adds an array of points to the vector memory collection. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `points` | `object`[] | An array of [PointData](../type-aliases/PointData.md) representing the points to be added. | +| ...`args` | `object` & `object` \| `object`[] | - | + +#### Returns + +`Promise`\<`object`\> + +The result of the upsert operation. + +*** + +### createCollection() + +> **createCollection**(): `Promise`\<`void`\> + +Creates a new collection with the specified configuration. + +#### Returns + +`Promise`\<`void`\> + +*** + +### deletePoints() + +> **deletePoints**(`ids`): `Promise`\<`object`\> + +Delete points by their IDs. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `ids` | `string`[] | The IDs of the points to delete. | + +#### Returns + +`Promise`\<`object`\> + +The result of the deletion. + +*** + +### deletePointsByMetadata() + +> **deletePointsByMetadata**(`metadata`): `undefined` \| `Promise`\<`object`\> + +Delete points by their metadata. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `metadata` | `Record`\<`string`, `undefined` \| `null` \| `object` \| `object` \| `object` \| `object` \| `Record`\<`string`, `unknown`\>\> | The metadata of the points to delete. | + +#### Returns + +`undefined` \| `Promise`\<`object`\> + +The result of the deletion. + +*** + +### getAllPoints() + +> **getAllPoints**(`limit`, `filter`?): `Promise`\<`object`[]\> + +Retrieves all points from the vector memory collection. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `limit` | `number` | `10000` | The maximum number of points to retrieve (default: 10000). | +| `filter`? | `Record`\<`string`, `undefined` \| `null` \| `object` \| `object` \| `object` \| `object` \| `Record`\<`string`, `unknown`\>\> | `undefined` | An optional filter to apply to the points. | + +#### Returns + +`Promise`\<`object`[]\> + +An array of [PointData](../type-aliases/PointData.md). + +*** + +### getPoints() + +> **getPoints**(`ids`): `Promise`\<`object`[]\> + +Retrieves points from the vector memory collection based on their IDs. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `ids` | `string`[] | The IDs of the points to retrieve. | + +#### Returns + +`Promise`\<`object`[]\> + +An array of [PointData](../type-aliases/PointData.md). + +*** + +### recallMemoriesFromEmbedding() + +> **recallMemoriesFromEmbedding**(`embedding`, `filter`?, `k`?, `threshold`?): `Promise`\<[`MemoryDocument`](../type-aliases/MemoryDocument.md)[]\> + +Retrieves memories from the vector database based on an embedded vector. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `embedding` | `number`[] \| `object` \| `object` | `undefined` | The embedding vector to search for. | +| `filter`? | `Record`\<`string`, `undefined` \| `null` \| `object` \| `object` \| `object` \| `object` \| `Record`\<`string`, `unknown`\>\> | `undefined` | Optional filter to apply to the search. | +| `k`? | `number` | `10` | The maximum number of memories to retrieve (default: 10). | +| `threshold`? | `number` | `undefined` | The score threshold for retrieved memories. | + +#### Returns + +`Promise`\<[`MemoryDocument`](../type-aliases/MemoryDocument.md)[]\> + +An array of [MemoryDocument](../type-aliases/MemoryDocument.md) representing the retrieved memories. + +*** + +### saveDump() + +> **saveDump**(`folder`): `Promise`\<`void`\> + +Saves the collection dump to a specified folder. + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `folder` | `string` | `'dormouse/'` | The folder path where the dump will be saved. Defaults to 'dormouse/'. | + +#### Returns + +`Promise`\<`void`\> + +*** + +### create() + +> `static` **create**(`name`, `embedderName`, `embedderSize`): `Promise`\<[`VectorMemoryCollection`](VectorMemoryCollection.md)\> + +Creates a new VectorMemoryCollection with the specified name, embedder name, and embedder size. +If a collection with the same name already exists, it skips the creation step. +If the existing collection has a different size, it updates the collection by deleting and recreating it. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `string` | The name of the collection. | +| `embedderName` | `string` | The name of the embedder. | +| `embedderSize` | `number` | The size of the embedder. | + +#### Returns + +`Promise`\<[`VectorMemoryCollection`](VectorMemoryCollection.md)\> + +The created [VectorMemoryCollection](VectorMemoryCollection.md). diff --git a/docs/api/classes/WhiteRabbit.md b/docs/api/classes/WhiteRabbit.md new file mode 100644 index 0000000..96db27c --- /dev/null +++ b/docs/api/classes/WhiteRabbit.md @@ -0,0 +1,108 @@ +[Overview](../index.md) / WhiteRabbit + +# WhiteRabbit + +## Methods + +### getJobs() + +> **getJobs**(): `Record`\<`string`, `CronJob`\> + +Retrieve the current scheduled jobs + +#### Returns + +`Record`\<`string`, `CronJob`\> + +An array of jobs + +*** + +### pauseJob() + +> **pauseJob**(`name`): `undefined` \| `boolean` + +Pause a scheduled job + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `string` | The name assigned to the job | + +#### Returns + +`undefined` \| `boolean` + +A boolean indicating if the job was successfully paused + +*** + +### removeJob() + +> **removeJob**(`name`): `boolean` + +Removes a scheduled job + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `string` | The name assigned to the job | + +#### Returns + +`boolean` + +A boolean indicating if the job was successfully removed + +*** + +### resumeJob() + +> **resumeJob**(`name`): `undefined` \| `boolean` + +Resume a paused job + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `string` | The name assigned to the job | + +#### Returns + +`undefined` \| `boolean` + +A boolean indicating if the job was successfully resumed + +*** + +### scheduleJob() + +> **scheduleJob**(`name`, `pattern`, `job`, `options`?): `void` + +Schedule a new job + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `name` | `string` | The name to assign to the job | +| `pattern` | `Date` \| `CronPattern` | The cron pattern to use | +| `job` | () => `void` \| `Promise`\<`void`\> | The function to run | +| `options`? | `CronOptions` | Additional options | + +#### Returns + +`void` + +*** + +### getInstance() + +> `static` **getInstance**(): `Promise`\<[`WhiteRabbit`](WhiteRabbit.md)\> + +#### Returns + +`Promise`\<[`WhiteRabbit`](WhiteRabbit.md)\> diff --git a/docs/api/coverage.svg b/docs/api/coverage.svg new file mode 100644 index 0000000..6c9aacc --- /dev/null +++ b/docs/api/coverage.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + Coverage + Coverage + 11% + 11% + + \ No newline at end of file diff --git a/docs/api/enumerations/FormState.md b/docs/api/enumerations/FormState.md new file mode 100644 index 0000000..9663f8a --- /dev/null +++ b/docs/api/enumerations/FormState.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / FormState + +# FormState + +## Enumeration Members + +| Enumeration Member | Value | Description | +| ------ | ------ | ------ | +| `CLOSED` | `3` | The form is cancelled by the user | +| `COMPLETE` | `2` | The form is complete | +| `INCOMPLETE` | `1` | The form is incomplete | +| `WAIT_CONFIRM` | `0` | The form is waiting for the user to confirm | diff --git a/docs/api/functions/addChatModel.md b/docs/api/functions/addChatModel.md new file mode 100644 index 0000000..db79624 --- /dev/null +++ b/docs/api/functions/addChatModel.md @@ -0,0 +1,21 @@ +[Overview](../index.md) / addChatModel + +# addChatModel() + +> **addChatModel**\<`Config`\>(`settings`): [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`Config`\> + +## Type Parameters + +| Type Parameter | +| ------ | +| `Config` *extends* `ZodTypeAny` | + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `settings` | `LLMSettings`\<`Config`\> | + +## Returns + +[`ChatModelConfig`](../classes/ChatModelConfig.md)\<`Config`\> diff --git a/docs/api/functions/addEmbeddings.md b/docs/api/functions/addEmbeddings.md new file mode 100644 index 0000000..743421b --- /dev/null +++ b/docs/api/functions/addEmbeddings.md @@ -0,0 +1,21 @@ +[Overview](../index.md) / addEmbeddings + +# addEmbeddings() + +> **addEmbeddings**\<`Config`\>(`settings`): [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`Config`\> + +## Type Parameters + +| Type Parameter | +| ------ | +| `Config` *extends* `ZodTypeAny` | + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `settings` | `EmbedderSettings`\<`Config`\> | + +## Returns + +[`EmbedderConfig`](../classes/EmbedderConfig.md)\<`Config`\> diff --git a/docs/api/functions/catchError.md b/docs/api/functions/catchError.md new file mode 100644 index 0000000..b22c3e1 --- /dev/null +++ b/docs/api/functions/catchError.md @@ -0,0 +1,33 @@ +[Overview](../index.md) / catchError + +# catchError() + +> **catchError**\<`T`, `E`\>(`promise`, `options`?): `Promise`\<[`undefined`, `T`] \| [`InstanceType`\<`E`\>]\> + +Catches errors from a promise. + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` | +| `E` *extends* (...`args`) => `Error` | + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `promise` | `Promise`\<`T`\> | The promise to handle. | +| `options`? | `object` | Additional options for handling the promise. | +| `options.errorsToCatch`? | `E`[] | An optional array of error constructors to catch. | +| `options.logMessage`? | `string` | An optional message to log when an error occurs. | + +## Returns + +`Promise`\<[`undefined`, `T`] \| [`InstanceType`\<`E`\>]\> + +A tuple with either the error or the result of the promise. + +## Throws + +Will rethrow the error if it is not in the `errorsToCatch` array. diff --git a/docs/api/functions/compareStrings.md b/docs/api/functions/compareStrings.md new file mode 100644 index 0000000..716c975 --- /dev/null +++ b/docs/api/functions/compareStrings.md @@ -0,0 +1,21 @@ +[Overview](../index.md) / compareStrings + +# compareStrings() + +> **compareStrings**(`input`, `prediction`, `criteria`?): `Promise`\<`number`\> + +Compares two strings using an evaluator. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `input` | `string` | The input string to compare. | +| `prediction` | `string` | The prediction string to use for comparison. | +| `criteria`? | `CriteriaLike` | Optional criteria for the evaluator. | + +## Returns + +`Promise`\<`number`\> + +The score of the comparison. 0 means the strings are identical. diff --git a/docs/api/functions/deepDefaults.md b/docs/api/functions/deepDefaults.md new file mode 100644 index 0000000..839ce70 --- /dev/null +++ b/docs/api/functions/deepDefaults.md @@ -0,0 +1,26 @@ +[Overview](../index.md) / deepDefaults + +# deepDefaults() + +> **deepDefaults**\<`T`\>(`target`, ...`sources`): `T` + +Merges the properties of the source objects into the target object, recursively applying defaults. + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` | + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `target` | `T` | The target object to apply defaults to. | +| ...`sources` | `any`[] | The source objects containing default values. | + +## Returns + +`T` + +A new object with the merged properties. diff --git a/docs/api/functions/embedderCache.md b/docs/api/functions/embedderCache.md new file mode 100644 index 0000000..c09dde3 --- /dev/null +++ b/docs/api/functions/embedderCache.md @@ -0,0 +1,9 @@ +[Overview](../index.md) / embedderCache + +# embedderCache() + +> **embedderCache**(): `BaseStore`\<`any`, `any`\> \| `undefined` + +## Returns + +`BaseStore`\<`any`, `any`\> \| `undefined` diff --git a/docs/api/functions/existsDir.md b/docs/api/functions/existsDir.md new file mode 100644 index 0000000..6ecd20c --- /dev/null +++ b/docs/api/functions/existsDir.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / existsDir + +# existsDir() + +> **existsDir**(`path`): `Promise`\<`boolean`\> + +Checks if a directory exists. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `path` | `string` | The path to the directory to check. | + +## Returns + +`Promise`\<`boolean`\> diff --git a/docs/api/functions/getAllowedEmbedders.md b/docs/api/functions/getAllowedEmbedders.md new file mode 100644 index 0000000..fcfdbe5 --- /dev/null +++ b/docs/api/functions/getAllowedEmbedders.md @@ -0,0 +1,9 @@ +[Overview](../index.md) / getAllowedEmbedders + +# getAllowedEmbedders() + +> **getAllowedEmbedders**(): [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`ZodTypeAny`\>[] + +## Returns + +[`EmbedderConfig`](../classes/EmbedderConfig.md)\<`ZodTypeAny`\>[] diff --git a/docs/api/functions/getAllowedLLMs.md b/docs/api/functions/getAllowedLLMs.md new file mode 100644 index 0000000..d539c27 --- /dev/null +++ b/docs/api/functions/getAllowedLLMs.md @@ -0,0 +1,9 @@ +[Overview](../index.md) / getAllowedLLMs + +# getAllowedLLMs() + +> **getAllowedLLMs**(): [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`ZodTypeAny`\>[] + +## Returns + +[`ChatModelConfig`](../classes/ChatModelConfig.md)\<`ZodTypeAny`\>[] diff --git a/docs/api/functions/getEmbedder.md b/docs/api/functions/getEmbedder.md new file mode 100644 index 0000000..087a7aa --- /dev/null +++ b/docs/api/functions/getEmbedder.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / getEmbedder + +# getEmbedder() + +> **getEmbedder**(`embedder`): `undefined` \| [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`ZodTypeAny`\> + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `embedder` | `string` | + +## Returns + +`undefined` \| [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`ZodTypeAny`\> diff --git a/docs/api/functions/getEmbedderSettings.md b/docs/api/functions/getEmbedderSettings.md new file mode 100644 index 0000000..16f187e --- /dev/null +++ b/docs/api/functions/getEmbedderSettings.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / getEmbedderSettings + +# getEmbedderSettings() + +> **getEmbedderSettings**(`emb`?): `undefined` \| `Record`\<`string`, `any`\> + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `emb`? | `string` | + +## Returns + +`undefined` \| `Record`\<`string`, `any`\> diff --git a/docs/api/functions/getLLM.md b/docs/api/functions/getLLM.md new file mode 100644 index 0000000..f99c5ba --- /dev/null +++ b/docs/api/functions/getLLM.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / getLLM + +# getLLM() + +> **getLLM**(`llm`): `undefined` \| [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`ZodTypeAny`\> + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `llm` | `string` | + +## Returns + +`undefined` \| [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`ZodTypeAny`\> diff --git a/docs/api/functions/getLLMSettings.md b/docs/api/functions/getLLMSettings.md new file mode 100644 index 0000000..9bf0d09 --- /dev/null +++ b/docs/api/functions/getLLMSettings.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / getLLMSettings + +# getLLMSettings() + +> **getLLMSettings**(`llm`?): `undefined` \| `Record`\<`string`, `any`\> + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `llm`? | `string` | + +## Returns + +`undefined` \| `Record`\<`string`, `any`\> diff --git a/docs/api/functions/getVectorMemory.md b/docs/api/functions/getVectorMemory.md new file mode 100644 index 0000000..fc41650 --- /dev/null +++ b/docs/api/functions/getVectorMemory.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / getVectorMemory + +# getVectorMemory() + +> **getVectorMemory**(`params`): `Promise`\<[`VectorMemory`](../classes/VectorMemory.md)\> + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `params` | [`VectorMemoryConfig`](../interfaces/VectorMemoryConfig.md) | + +## Returns + +`Promise`\<[`VectorMemory`](../classes/VectorMemory.md)\> diff --git a/docs/api/functions/getZodDefaults.md b/docs/api/functions/getZodDefaults.md new file mode 100644 index 0000000..e743cbe --- /dev/null +++ b/docs/api/functions/getZodDefaults.md @@ -0,0 +1,24 @@ +[Overview](../index.md) / getZodDefaults + +# getZodDefaults() + +> **getZodDefaults**\<`T`\>(`schema`, `discriminant`?): `T`\[`"_output"`\] \| `undefined` + +Retrieves the default values for a given Zod schema. + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` *extends* `ZodTypeAny` | + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `schema` | `T` | The Zod schema for which to retrieve the default values. | +| `discriminant`? | `string` | The discriminant value for discriminated unions. | + +## Returns + +`T`\[`"_output"`\] \| `undefined` diff --git a/docs/api/functions/isForm.md b/docs/api/functions/isForm.md new file mode 100644 index 0000000..061e0fc --- /dev/null +++ b/docs/api/functions/isForm.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / isForm + +# isForm() + +> **isForm**(`form`): `form is Form>, Object>` + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `form` | `any` | + +## Returns + +`form is Form>, Object>` diff --git a/docs/api/functions/isHook.md b/docs/api/functions/isHook.md new file mode 100644 index 0000000..cbb043c --- /dev/null +++ b/docs/api/functions/isHook.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / isHook + +# isHook() + +> **isHook**(`hook`): `hook is Hook` + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `hook` | `any` | + +## Returns + +`hook is Hook` diff --git a/docs/api/functions/isTool.md b/docs/api/functions/isTool.md new file mode 100644 index 0000000..1e6bbb5 --- /dev/null +++ b/docs/api/functions/isTool.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / isTool + +# isTool() + +> **isTool**(`tool`): `tool is Tool` + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `tool` | `any` | + +## Returns + +`tool is Tool` diff --git a/docs/api/functions/llmCache.md b/docs/api/functions/llmCache.md new file mode 100644 index 0000000..76fe69e --- /dev/null +++ b/docs/api/functions/llmCache.md @@ -0,0 +1,9 @@ +[Overview](../index.md) / llmCache + +# llmCache() + +> **llmCache**(): `BaseCache` \| `undefined` + +## Returns + +`BaseCache` \| `undefined` diff --git a/docs/api/functions/logWelcome.md b/docs/api/functions/logWelcome.md new file mode 100644 index 0000000..905726c --- /dev/null +++ b/docs/api/functions/logWelcome.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / logWelcome + +# logWelcome() + +> **logWelcome**(): `Promise`\<`void`\> + +Logs a welcome message and prints important URLs. + +## Returns + +`Promise`\<`void`\> diff --git a/docs/api/functions/normalizeMessageChunks.md b/docs/api/functions/normalizeMessageChunks.md new file mode 100644 index 0000000..664ebab --- /dev/null +++ b/docs/api/functions/normalizeMessageChunks.md @@ -0,0 +1,19 @@ +[Overview](../index.md) / normalizeMessageChunks + +# normalizeMessageChunks() + +> **normalizeMessageChunks**(`chunk`): `string` + +Normalizes the content of a message chunk. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `chunk` | `BaseMessageChunk` | The message chunk to normalize. | + +## Returns + +`string` + +The normalized text content as a string. diff --git a/docs/api/functions/parseJson.md b/docs/api/functions/parseJson.md new file mode 100644 index 0000000..5f7e596 --- /dev/null +++ b/docs/api/functions/parseJson.md @@ -0,0 +1,30 @@ +[Overview](../index.md) / parseJson + +# parseJson() + +> **parseJson**\<`T`\>(`text`, `schema`, `addDefaults`): `Promise`\<`TypeOf`\<`T`\>\> + +Parses a JSON string using the specified Zod schema. +It also cleans a few common issues with generated JSON strings. + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` *extends* `AnyZodObject` | + +## Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `text` | `string` | `undefined` | The JSON string to parse. | +| `schema` | `T` | `undefined` | The Zod schema to use for parsing. | +| `addDefaults` | `boolean` | `false` | Whether to add default values to the parsed object. | + +## Returns + +`Promise`\<`TypeOf`\<`T`\>\> + +## Throws + +If the JSON string is invalid or does not match the schema. diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 0000000..3259a1f --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,163 @@ +# API Reference + +## Namespaces + +| Namespace | Description | +| ------ | ------ | +| [NodeJS](namespaces/NodeJS/index.md) | - | + +## Enumerations + +| Enumeration | Description | +| ------ | ------ | +| [FormState](enumerations/FormState.md) | - | + +## Classes + +| Class | Description | +| ------ | ------ | +| [AgentManager](classes/AgentManager.md) | Manager of Langchain Agent. This class manages the Agent that uses the LLM. It takes care of formatting the prompt and filtering the tools before feeding them to the Agent. It also instantiates the Langchain Agent. | +| [ChatModelConfig](classes/ChatModelConfig.md) | - | +| [CheshireCat](classes/CheshireCat.md) | - | +| [CustomChat](classes/CustomChat.md) | - | +| [CustomChatOllama](classes/CustomChatOllama.md) | - | +| [CustomChatOpenAI](classes/CustomChatOpenAI.md) | - | +| [CustomOpenAIEmbeddings](classes/CustomOpenAIEmbeddings.md) | - | +| [Database](classes/Database.md) | - | +| [EmbedderConfig](classes/EmbedderConfig.md) | - | +| [FakeChat](classes/FakeChat.md) | - | +| [FastEmbedEmbeddings](classes/FastEmbedEmbeddings.md) | - | +| [Form](classes/Form.md) | - | +| [HttpError](classes/HttpError.md) | - | +| [MadHatter](classes/MadHatter.md) | - | +| [ModelInteractionHandler](classes/ModelInteractionHandler.md) | - | +| [NewTokenHandler](classes/NewTokenHandler.md) | - | +| [Plugin](classes/Plugin.md) | - | +| [ProceduresOutputParser](classes/ProceduresOutputParser.md) | - | +| [RabbitHole](classes/RabbitHole.md) | - | +| [RateLimitHandler](classes/RateLimitHandler.md) | - | +| [StrayCat](classes/StrayCat.md) | The stray cat goes around tools and hook, making troubles | +| [Tool](classes/Tool.md) | - | +| [ToolPromptTemplate](classes/ToolPromptTemplate.md) | - | +| [VectorMemory](classes/VectorMemory.md) | - | +| [VectorMemoryCollection](classes/VectorMemoryCollection.md) | - | +| [WhiteRabbit](classes/WhiteRabbit.md) | - | + +## Interfaces + +| Interface | Description | +| ------ | ------ | +| [AgentFastReply](interfaces/AgentFastReply.md) | The agent reply configuration. | +| [ContextInput](interfaces/ContextInput.md) | The context input for the agent. | +| [HookTypes](interfaces/HookTypes.md) | - | +| [Interaction](interfaces/Interaction.md) | - | +| [IntermediateStep](interfaces/IntermediateStep.md) | The intermediate step of the agent. | +| [MemoryJson](interfaces/MemoryJson.md) | The accepted JSON format for an imported memory. | +| [MemoryMessage](interfaces/MemoryMessage.md) | The content of a memory message. | +| [MemoryRecallConfig](interfaces/MemoryRecallConfig.md) | The configuration for memory recall. | +| [MemoryRecallConfigs](interfaces/MemoryRecallConfigs.md) | The configurations for each memory recall. | +| [Message](interfaces/Message.md) | A message object sent by the user. | +| [VectorMemoryCollections](interfaces/VectorMemoryCollections.md) | The configurations for each vector memory. | +| [VectorMemoryConfig](interfaces/VectorMemoryConfig.md) | The configuration of a vector memory. | +| [WorkingMemory](interfaces/WorkingMemory.md) | The working memory of the cat. | + +## Type Aliases + +| Type alias | Description | +| ------ | ------ | +| [BetterReadonly](type-aliases/BetterReadonly.md) | - | +| [DatabaseConfig](type-aliases/DatabaseConfig.md) | - | +| [EmbeddedVector](type-aliases/EmbeddedVector.md) | - | +| [EmbedderInteraction](type-aliases/EmbedderInteraction.md) | - | +| [FileParsers](type-aliases/FileParsers.md) | - | +| [Filter](type-aliases/Filter.md) | - | +| [FilterCondition](type-aliases/FilterCondition.md) | - | +| [FilterMatch](type-aliases/FilterMatch.md) | - | +| [Hook](type-aliases/Hook.md) | - | +| [HookNames](type-aliases/HookNames.md) | - | +| [Hooks](type-aliases/Hooks.md) | - | +| [InstantToolTrigger](type-aliases/InstantToolTrigger.md) | - | +| [Json](type-aliases/Json.md) | - | +| [LLMInteraction](type-aliases/LLMInteraction.md) | - | +| [MaybePromise](type-aliases/MaybePromise.md) | - | +| [MemoryDocument](type-aliases/MemoryDocument.md) | A memory document. | +| [ModelInteraction](type-aliases/ModelInteraction.md) | - | +| [Nullable](type-aliases/Nullable.md) | - | +| [PointData](type-aliases/PointData.md) | - | +| [Primitive](type-aliases/Primitive.md) | - | +| [TODO](type-aliases/TODO.md) | - | +| [WebParser](type-aliases/WebParser.md) | - | +| [WS](type-aliases/WS.md) | - | +| [WSMessage](type-aliases/WSMessage.md) | A message object sent by the websocket. | + +## Variables + +| Variable | Description | +| ------ | ------ | +| [app](variables/app.md) | - | +| [CatForm](variables/CatForm.md) | - | +| [CatHook](variables/CatHook.md) | - | +| [catPaths](variables/catPaths.md) | It contains various paths and URLs used in the application. | +| [CatPlugin](variables/CatPlugin.md) | - | +| [CatTool](variables/CatTool.md) | - | +| [chatMessage](variables/chatMessage.md) | - | +| [cheshireCat](variables/cheshireCat.md) | - | +| [db](variables/db.md) | - | +| [embedderRoutes](variables/embedderRoutes.md) | - | +| [generalRoutes](variables/generalRoutes.md) | - | +| [httpError](variables/httpError.md) | - | +| [httpLogger](variables/httpLogger.md) | - | +| [llmRoutes](variables/llmRoutes.md) | - | +| [log](variables/log.md) | The logger module provides various logging functions. | +| [LogLevel](variables/LogLevel.md) | - | +| [madHatter](variables/madHatter.md) | - | +| [MAIN\_PROMPT\_PREFIX](variables/MAIN_PROMPT_PREFIX.md) | - | +| [MAIN\_PROMPT\_SUFFIX](variables/MAIN_PROMPT_SUFFIX.md) | - | +| [memoryMessage](variables/memoryMessage.md) | - | +| [memoryRecall](variables/memoryRecall.md) | - | +| [memoryRoutes](variables/memoryRoutes.md) | - | +| [messageInput](variables/messageInput.md) | - | +| [modelInfo](variables/modelInfo.md) | - | +| [parsedEnv](variables/parsedEnv.md) | The parsed environment variables. | +| [pluginInfo](variables/pluginInfo.md) | - | +| [pluginManifest](variables/pluginManifest.md) | - | +| [pluginSettings](variables/pluginSettings.md) | - | +| [pluginsRoutes](variables/pluginsRoutes.md) | - | +| [rabbitHole](variables/rabbitHole.md) | Manages content ingestion. I'm late... I'm late! | +| [rabbitHoleRoutes](variables/rabbitHoleRoutes.md) | - | +| [serverContext](variables/serverContext.md) | - | +| [settingsRoutes](variables/settingsRoutes.md) | - | +| [swaggerTags](variables/swaggerTags.md) | - | +| [TOOL\_PROMPT](variables/TOOL_PROMPT.md) | - | +| [vectorDb](variables/vectorDb.md) | - | +| [whiteRabbit](variables/whiteRabbit.md) | I'm late, I'm late, for a very important date! | +| [zodBoolean](variables/zodBoolean.md) | A Zod schema for fixing coercion of boolean value. | +| [zodJson](variables/zodJson.md) | A Zod schema for JSON objects. | +| [zodPrimitive](variables/zodPrimitive.md) | A Zod schema for primitive values. | + +## Functions + +| Function | Description | +| ------ | ------ | +| [addChatModel](functions/addChatModel.md) | - | +| [addEmbeddings](functions/addEmbeddings.md) | - | +| [catchError](functions/catchError.md) | Catches errors from a promise. | +| [compareStrings](functions/compareStrings.md) | Compares two strings using an evaluator. | +| [deepDefaults](functions/deepDefaults.md) | Merges the properties of the source objects into the target object, recursively applying defaults. | +| [embedderCache](functions/embedderCache.md) | - | +| [existsDir](functions/existsDir.md) | Checks if a directory exists. | +| [getAllowedEmbedders](functions/getAllowedEmbedders.md) | - | +| [getAllowedLLMs](functions/getAllowedLLMs.md) | - | +| [getEmbedder](functions/getEmbedder.md) | - | +| [getEmbedderSettings](functions/getEmbedderSettings.md) | - | +| [getLLM](functions/getLLM.md) | - | +| [getLLMSettings](functions/getLLMSettings.md) | - | +| [getVectorMemory](functions/getVectorMemory.md) | - | +| [getZodDefaults](functions/getZodDefaults.md) | Retrieves the default values for a given Zod schema. | +| [isForm](functions/isForm.md) | - | +| [isHook](functions/isHook.md) | - | +| [isTool](functions/isTool.md) | - | +| [llmCache](functions/llmCache.md) | - | +| [logWelcome](functions/logWelcome.md) | Logs a welcome message and prints important URLs. | +| [normalizeMessageChunks](functions/normalizeMessageChunks.md) | Normalizes the content of a message chunk. | +| [parseJson](functions/parseJson.md) | Parses a JSON string using the specified Zod schema. It also cleans a few common issues with generated JSON strings. | diff --git a/docs/api/interfaces/AgentFastReply.md b/docs/api/interfaces/AgentFastReply.md new file mode 100644 index 0000000..4c57972 --- /dev/null +++ b/docs/api/interfaces/AgentFastReply.md @@ -0,0 +1,13 @@ +[Overview](../index.md) / AgentFastReply + +# AgentFastReply + +The agent reply configuration. + +## Properties + +| Property | Type | +| ------ | ------ | +| `intermediateSteps?` | [`IntermediateStep`](IntermediateStep.md)[] | +| `output` | `string` | +| `returnDirect?` | `boolean` | diff --git a/docs/api/interfaces/ContextInput.md b/docs/api/interfaces/ContextInput.md new file mode 100644 index 0000000..03a8439 --- /dev/null +++ b/docs/api/interfaces/ContextInput.md @@ -0,0 +1,19 @@ +[Overview](../index.md) / ContextInput + +# ContextInput + +The context input for the agent. + +## Indexable + + \[`key`: `string`\]: `string` + +## Properties + +| Property | Type | +| ------ | ------ | +| `chat_history` | `string` | +| `declarative_memory` | `string` | +| `episodic_memory` | `string` | +| `input` | `string` | +| `tools_output` | `string` | diff --git a/docs/api/interfaces/HookTypes.md b/docs/api/interfaces/HookTypes.md new file mode 100644 index 0000000..fada6cc --- /dev/null +++ b/docs/api/interfaces/HookTypes.md @@ -0,0 +1,39 @@ +[Overview](../index.md) / HookTypes + +# HookTypes + +## Properties + +| Property | Type | +| ------ | ------ | +| `afterBootstrap` | (`db`: `Readonly`\<`objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\>, `cat`: [`CheshireCat`](../classes/CheshireCat.md)) => `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\> | +| `afterInsertInMemory` | (`doc`: `Document`\<`Record`\<`string`, `any`\>\>, `interaction`: [`EmbedderInteraction`](../type-aliases/EmbedderInteraction.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>\> | +| `afterMemoryChain` | (`output`: [`AgentFastReply`](AgentFastReply.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`AgentFastReply`](AgentFastReply.md)\> | +| `afterModelInteraction` | (`interaction`: [`ModelInteraction`](../type-aliases/ModelInteraction.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`ModelInteraction`](../type-aliases/ModelInteraction.md) | +| `afterProceduresChain` | (`output`: [`AgentFastReply`](AgentFastReply.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`AgentFastReply`](AgentFastReply.md)\> | +| `afterRecallMemories` | (`memory`: [`BetterReadonly`](../type-aliases/BetterReadonly.md)\<[`WorkingMemory`](WorkingMemory.md), `true`\>, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`BetterReadonly`](../type-aliases/BetterReadonly.md)\<[`WorkingMemory`](WorkingMemory.md), `true`\>\> | +| `afterSendMessage` | (`msg`: [`WSMessage`](../type-aliases/WSMessage.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`WSMessage`](../type-aliases/WSMessage.md)\> | +| `afterSplitDocs` | (`docs`: `Document`\<`Record`\<`string`, `any`\>\>[], `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>[]\> | +| `afterStoreDocuments` | (`docs`: `Document`\<`Record`\<`string`, `any`\>\>[], `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>[]\> | +| `agentFastReply` | (`reply`: [`Nullable`](../type-aliases/Nullable.md)\<[`AgentFastReply`](AgentFastReply.md)\>, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`Nullable`](../type-aliases/Nullable.md)\<[`AgentFastReply`](AgentFastReply.md)\>\> | +| `agentPromptInstructions` | (`prompt`: `string`, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`string`\> | +| `agentPromptPrefix` | (`prefix`: `string`, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`string`\> | +| `agentPromptSuffix` | (`suffix`: `string`, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`string`\> | +| `allowedEmbedders` | (`embedders`: [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`ZodTypeAny`\>[], `addEmbedder`: \<`Config`\>(`settings`) => [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`Config`\>) => [`EmbedderConfig`](../classes/EmbedderConfig.md)\<`any`\>[] | +| `allowedLLMs` | (`llms`: [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`ZodTypeAny`\>[], `addModel`: \<`Config`\>(`settings`) => [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`Config`\>) => [`ChatModelConfig`](../classes/ChatModelConfig.md)\<`any`\>[] | +| `allowedTools` | (`tools`: `string`[], `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`string`[]\> | +| `beforeAgentStarts` | (`input`: [`ContextInput`](ContextInput.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`ContextInput`](ContextInput.md)\> | +| `beforeBootstrap` | (`db`: `Readonly`\<`objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\>\>) => `objectOutputType`\<`object`, `ZodTypeAny`, `"passthrough"`\> | +| `beforeInsertInMemory` | (`doc`: `Document`\<`Record`\<`string`, `any`\>\>, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>\> | +| `beforeReadMessage` | (`msg`: [`Message`](Message.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`Message`](Message.md)\> | +| `beforeRecallMemories` | (`configs`: [`MemoryRecallConfigs`](MemoryRecallConfigs.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`MemoryRecallConfigs`](MemoryRecallConfigs.md)\> | +| `beforeSendMessage` | (`msg`: [`MemoryMessage`](MemoryMessage.md), `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`MemoryMessage`](MemoryMessage.md)\> | +| `beforeSplitDocs` | (`texts`: `Document`\<`Record`\<`string`, `any`\>\>[], `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>[]\> | +| `beforeStoreDocuments` | (`docs`: `Document`\<`Record`\<`string`, `any`\>\>[], `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>[]\> | +| `beforeStoreEpisodicMemory` | (`doc`: `Document`\<`Record`\<`string`, `any`\>\>, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Document`\<`Record`\<`string`, `any`\>\>\> | +| `fileParsers` | (`loaders`: [`FileParsers`](../type-aliases/FileParsers.md)) => [`FileParsers`](../type-aliases/FileParsers.md) | +| `instantToolTrigger` | (`input`: [`Nullable`](../type-aliases/Nullable.md)\<\`$\{string\}\{name\}$\{string\}\`\>, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<[`Nullable`](../type-aliases/Nullable.md)\<\`$\{string\}\{name\}$\{string\}\`\>\> | +| `memoryCollections` | (`collections`: `Record`\<`string`, [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md)\>) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`Record`\<`string`, [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md)\>\> | +| `recallQuery` | (`query`: `string`, `stray`: [`StrayCat`](../classes/StrayCat.md)) => [`MaybePromise`](../type-aliases/MaybePromise.md)\<`string`\> | +| `textSplitter` | (`splitter`: `TextSplitter`) => `TextSplitter` | +| `webParsers` | (`loaders`: [`WebParser`](../type-aliases/WebParser.md)[]) => [`WebParser`](../type-aliases/WebParser.md)[] | diff --git a/docs/api/interfaces/Interaction.md b/docs/api/interfaces/Interaction.md new file mode 100644 index 0000000..8ccec10 --- /dev/null +++ b/docs/api/interfaces/Interaction.md @@ -0,0 +1,13 @@ +[Overview](../index.md) / Interaction + +# Interaction + +## Properties + +| Property | Type | +| ------ | ------ | +| `endedAt` | `number` | +| `outputTokens` | `number` | +| `prompt` | `string` | +| `source` | `string` | +| `startedAt` | `number` | diff --git a/docs/api/interfaces/IntermediateStep.md b/docs/api/interfaces/IntermediateStep.md new file mode 100644 index 0000000..4f9bf6e --- /dev/null +++ b/docs/api/interfaces/IntermediateStep.md @@ -0,0 +1,13 @@ +[Overview](../index.md) / IntermediateStep + +# IntermediateStep + +The intermediate step of the agent. + +## Properties + +| Property | Type | +| ------ | ------ | +| `input` | `null` \| `string` | +| `observation` | `string` | +| `procedure` | `string` | diff --git a/docs/api/interfaces/MemoryJson.md b/docs/api/interfaces/MemoryJson.md new file mode 100644 index 0000000..fd2fca9 --- /dev/null +++ b/docs/api/interfaces/MemoryJson.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / MemoryJson + +# MemoryJson + +The accepted JSON format for an imported memory. + +## Properties + +| Property | Type | +| ------ | ------ | +| `collections` | `object` | +| `collections.declarative` | `object`[] | +| `collections.episodic` | `object`[] | +| `collections.procedural` | `object`[] | +| `embedder` | `string` | diff --git a/docs/api/interfaces/MemoryMessage.md b/docs/api/interfaces/MemoryMessage.md new file mode 100644 index 0000000..3d98105 --- /dev/null +++ b/docs/api/interfaces/MemoryMessage.md @@ -0,0 +1,19 @@ +[Overview](../index.md) / MemoryMessage + +# MemoryMessage + +The content of a memory message. + +## Properties + +| Property | Type | +| ------ | ------ | +| `role` | `"AI"` \| `"User"` | +| `what` | `string` | +| `when` | `number` | +| `who` | `string` | +| `why?` | `object` | +| `why.input` | `string` | +| `why.interactions?` | [`ModelInteraction`](../type-aliases/ModelInteraction.md)[] | +| `why.intermediateSteps` | [`IntermediateStep`](IntermediateStep.md)[] | +| `why.memory?` | [`WorkingMemory`](WorkingMemory.md) | diff --git a/docs/api/interfaces/MemoryRecallConfig.md b/docs/api/interfaces/MemoryRecallConfig.md new file mode 100644 index 0000000..85cea5a --- /dev/null +++ b/docs/api/interfaces/MemoryRecallConfig.md @@ -0,0 +1,14 @@ +[Overview](../index.md) / MemoryRecallConfig + +# MemoryRecallConfig + +The configuration for memory recall. + +## Properties + +| Property | Type | +| ------ | ------ | +| `embedding` | `number`[] | +| `filter?` | `Record`\<`string`, `undefined` \| `null` \| `object` \| `object` \| `object` \| `object` \| `Record`\<`string`, `unknown`\>\> | +| `k` | `number` | +| `threshold` | `number` | diff --git a/docs/api/interfaces/MemoryRecallConfigs.md b/docs/api/interfaces/MemoryRecallConfigs.md new file mode 100644 index 0000000..956ec12 --- /dev/null +++ b/docs/api/interfaces/MemoryRecallConfigs.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / MemoryRecallConfigs + +# MemoryRecallConfigs + +The configurations for each memory recall. + +## Indexable + + \[`key`: `string`\]: [`MemoryRecallConfig`](MemoryRecallConfig.md) + +## Properties + +| Property | Type | +| ------ | ------ | +| `declarative` | [`MemoryRecallConfig`](MemoryRecallConfig.md) | +| `episodic` | [`MemoryRecallConfig`](MemoryRecallConfig.md) | +| `procedural` | [`MemoryRecallConfig`](MemoryRecallConfig.md) | diff --git a/docs/api/interfaces/Message.md b/docs/api/interfaces/Message.md new file mode 100644 index 0000000..90b8110 --- /dev/null +++ b/docs/api/interfaces/Message.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / Message + +# Message + +A message object sent by the user. + +## Indexable + + \[`key`: `string`\]: `any` + +## Properties + +| Property | Type | +| ------ | ------ | +| `text` | `string` | diff --git a/docs/api/interfaces/VectorMemoryCollections.md b/docs/api/interfaces/VectorMemoryCollections.md new file mode 100644 index 0000000..5c1c9ee --- /dev/null +++ b/docs/api/interfaces/VectorMemoryCollections.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / VectorMemoryCollections + +# VectorMemoryCollections + +The configurations for each vector memory. + +## Indexable + + \[`key`: `string`\]: [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md) + +## Properties + +| Property | Type | +| ------ | ------ | +| `declarative` | [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md) | +| `episodic` | [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md) | +| `procedural` | [`VectorMemoryCollection`](../classes/VectorMemoryCollection.md) | diff --git a/docs/api/interfaces/VectorMemoryConfig.md b/docs/api/interfaces/VectorMemoryConfig.md new file mode 100644 index 0000000..0f19405 --- /dev/null +++ b/docs/api/interfaces/VectorMemoryConfig.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / VectorMemoryConfig + +# VectorMemoryConfig + +The configuration of a vector memory. + +## Properties + +| Property | Type | +| ------ | ------ | +| `embedderName` | `string` | +| `embedderSize` | `number` | diff --git a/docs/api/interfaces/WorkingMemory.md b/docs/api/interfaces/WorkingMemory.md new file mode 100644 index 0000000..8a0af05 --- /dev/null +++ b/docs/api/interfaces/WorkingMemory.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / WorkingMemory + +# WorkingMemory + +The working memory of the cat. + +## Indexable + + \[`key`: `string`\]: [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] + +## Properties + +| Property | Type | +| ------ | ------ | +| `declarative` | [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] | +| `episodic` | [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] | +| `procedural` | [`MemoryDocument`](../type-aliases/MemoryDocument.md)[] | diff --git a/docs/api/namespaces/NodeJS/index.md b/docs/api/namespaces/NodeJS/index.md new file mode 100644 index 0000000..fc9af1b --- /dev/null +++ b/docs/api/namespaces/NodeJS/index.md @@ -0,0 +1,11 @@ +[Overview](../../index.md) / NodeJS + +# NodeJS + +## Index + +### Interfaces + +| Interface | Description | +| ------ | ------ | +| [ProcessEnv](interfaces/ProcessEnv.md) | - | diff --git a/docs/api/namespaces/NodeJS/interfaces/ProcessEnv.md b/docs/api/namespaces/NodeJS/interfaces/ProcessEnv.md new file mode 100644 index 0000000..b811d03 --- /dev/null +++ b/docs/api/namespaces/NodeJS/interfaces/ProcessEnv.md @@ -0,0 +1,18 @@ +[Overview](../../../index.md) / [NodeJS](../index.md) / ProcessEnv + +# ProcessEnv + +## Properties + +| Property | Type | +| ------ | ------ | +| `API_KEY?` | `string` | +| `CORE_HOST?` | `string` | +| `CORE_PORT?` | `string` | +| `CORE_USE_SECURE_PROTOCOLS?` | `string` | +| `CORS_ALLOWED_ORIGINS?` | `string` | +| `LOG_LEVEL?` | `string` | +| `QDRANT_API_KEY?` | `string` | +| `QDRANT_HOST?` | `string` | +| `QDRANT_PORT?` | `string` | +| `SAVE_MEMORY_SNAPSHOTS?` | `string` | diff --git a/docs/api/type-aliases/BetterReadonly.md b/docs/api/type-aliases/BetterReadonly.md new file mode 100644 index 0000000..e8e9094 --- /dev/null +++ b/docs/api/type-aliases/BetterReadonly.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / BetterReadonly + +# BetterReadonly\ + +> **BetterReadonly**\<`T`, `Deep`\>: `{ readonly [Key in keyof T]: Deep extends true ? T[Key] extends object ? BetterReadonly : T[Key] : T[Key] }` + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `T` | - | +| `Deep` *extends* `boolean` | `true` | diff --git a/docs/api/type-aliases/DatabaseConfig.md b/docs/api/type-aliases/DatabaseConfig.md new file mode 100644 index 0000000..286e0a5 --- /dev/null +++ b/docs/api/type-aliases/DatabaseConfig.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / DatabaseConfig + +# DatabaseConfig + +> **DatabaseConfig**: `z.infer`\<*typeof* `dbConfig`\> diff --git a/docs/api/type-aliases/EmbeddedVector.md b/docs/api/type-aliases/EmbeddedVector.md new file mode 100644 index 0000000..73af48f --- /dev/null +++ b/docs/api/type-aliases/EmbeddedVector.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / EmbeddedVector + +# EmbeddedVector + +> **EmbeddedVector**: `Schemas`\[`"NamedVectorStruct"`\] diff --git a/docs/api/type-aliases/EmbedderInteraction.md b/docs/api/type-aliases/EmbedderInteraction.md new file mode 100644 index 0000000..439f3cd --- /dev/null +++ b/docs/api/type-aliases/EmbedderInteraction.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / EmbedderInteraction + +# EmbedderInteraction + +> **EmbedderInteraction**: [`Interaction`](../interfaces/Interaction.md) & `object` + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `model` | `"embedder"` | +| `reply` | `number`[] | diff --git a/docs/api/type-aliases/FileParsers.md b/docs/api/type-aliases/FileParsers.md new file mode 100644 index 0000000..e63c03e --- /dev/null +++ b/docs/api/type-aliases/FileParsers.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / FileParsers + +# FileParsers + +> **FileParsers**: `Record`\<\`$\{string\}/$\{string\}\`, (`content`) => `BaseDocumentLoader`\> diff --git a/docs/api/type-aliases/Filter.md b/docs/api/type-aliases/Filter.md new file mode 100644 index 0000000..ea781f8 --- /dev/null +++ b/docs/api/type-aliases/Filter.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / Filter + +# Filter + +> **Filter**: `Schemas`\[`"Filter"`\] diff --git a/docs/api/type-aliases/FilterCondition.md b/docs/api/type-aliases/FilterCondition.md new file mode 100644 index 0000000..a5e2cae --- /dev/null +++ b/docs/api/type-aliases/FilterCondition.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / FilterCondition + +# FilterCondition + +> **FilterCondition**: `Schemas`\[`"FieldCondition"`\] diff --git a/docs/api/type-aliases/FilterMatch.md b/docs/api/type-aliases/FilterMatch.md new file mode 100644 index 0000000..7a75f97 --- /dev/null +++ b/docs/api/type-aliases/FilterMatch.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / FilterMatch + +# FilterMatch + +> **FilterMatch**: [`FilterCondition`](FilterCondition.md)\[`"match"`\] diff --git a/docs/api/type-aliases/Hook.md b/docs/api/type-aliases/Hook.md new file mode 100644 index 0000000..4aee7a8 --- /dev/null +++ b/docs/api/type-aliases/Hook.md @@ -0,0 +1,19 @@ +[Overview](../index.md) / Hook + +# Hook\ + +> **Hook**\<`T`\>: `object` & `Required`\<`HookOptions`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `fn` | [`HookTypes`](../interfaces/HookTypes.md)\[`T`\] | +| `from` | `string` | +| `name` | `T` | + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `T` *extends* [`HookNames`](HookNames.md) | [`HookNames`](HookNames.md) | diff --git a/docs/api/type-aliases/HookNames.md b/docs/api/type-aliases/HookNames.md new file mode 100644 index 0000000..68a2536 --- /dev/null +++ b/docs/api/type-aliases/HookNames.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / HookNames + +# HookNames + +> **HookNames**: keyof [`HookTypes`](../interfaces/HookTypes.md) diff --git a/docs/api/type-aliases/Hooks.md b/docs/api/type-aliases/Hooks.md new file mode 100644 index 0000000..1dd7f83 --- /dev/null +++ b/docs/api/type-aliases/Hooks.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / Hooks + +# Hooks\ + +> **Hooks**\<`H`\>: `{ [K in H]: Hook[] }` + +## Type Parameters + +| Type Parameter | Default type | +| ------ | ------ | +| `H` *extends* [`HookNames`](HookNames.md) | [`HookNames`](HookNames.md) | diff --git a/docs/api/type-aliases/InstantToolTrigger.md b/docs/api/type-aliases/InstantToolTrigger.md new file mode 100644 index 0000000..d27222b --- /dev/null +++ b/docs/api/type-aliases/InstantToolTrigger.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / InstantToolTrigger + +# InstantToolTrigger + +> **InstantToolTrigger**: \`$\{string\}\{name\}$\{string\}\` diff --git a/docs/api/type-aliases/Json.md b/docs/api/type-aliases/Json.md new file mode 100644 index 0000000..6853927 --- /dev/null +++ b/docs/api/type-aliases/Json.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / Json + +# Json + +> **Json**: `Literal` \| `object` \| [`Json`](Json.md)[] diff --git a/docs/api/type-aliases/LLMInteraction.md b/docs/api/type-aliases/LLMInteraction.md new file mode 100644 index 0000000..cc64ec9 --- /dev/null +++ b/docs/api/type-aliases/LLMInteraction.md @@ -0,0 +1,13 @@ +[Overview](../index.md) / LLMInteraction + +# LLMInteraction + +> **LLMInteraction**: [`Interaction`](../interfaces/Interaction.md) & `object` + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `inputTokens` | `number` | +| `model` | `"llm"` | +| `reply` | `string` | diff --git a/docs/api/type-aliases/MaybePromise.md b/docs/api/type-aliases/MaybePromise.md new file mode 100644 index 0000000..9b76afc --- /dev/null +++ b/docs/api/type-aliases/MaybePromise.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / MaybePromise + +# MaybePromise\ + +> **MaybePromise**\<`T`\>: `T` \| `Promise`\<`T`\> + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` | diff --git a/docs/api/type-aliases/MemoryDocument.md b/docs/api/type-aliases/MemoryDocument.md new file mode 100644 index 0000000..643a654 --- /dev/null +++ b/docs/api/type-aliases/MemoryDocument.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / MemoryDocument + +# MemoryDocument + +> **MemoryDocument**: `DocumentInput` & `object` + +A memory document. + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `id` | `string` | +| `score` | `number` | +| `vector` | `number`[] | diff --git a/docs/api/type-aliases/ModelInteraction.md b/docs/api/type-aliases/ModelInteraction.md new file mode 100644 index 0000000..f00c2ce --- /dev/null +++ b/docs/api/type-aliases/ModelInteraction.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / ModelInteraction + +# ModelInteraction + +> **ModelInteraction**: [`LLMInteraction`](LLMInteraction.md) \| [`EmbedderInteraction`](EmbedderInteraction.md) diff --git a/docs/api/type-aliases/Nullable.md b/docs/api/type-aliases/Nullable.md new file mode 100644 index 0000000..42dbd67 --- /dev/null +++ b/docs/api/type-aliases/Nullable.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / Nullable + +# Nullable\ + +> **Nullable**\<`T`\>: `T` \| `null` \| `undefined` + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` | diff --git a/docs/api/type-aliases/PointData.md b/docs/api/type-aliases/PointData.md new file mode 100644 index 0000000..a65a099 --- /dev/null +++ b/docs/api/type-aliases/PointData.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / PointData + +# PointData + +> **PointData**: `Schemas`\[`"PointStruct"`\] diff --git a/docs/api/type-aliases/Primitive.md b/docs/api/type-aliases/Primitive.md new file mode 100644 index 0000000..e7cc6e6 --- /dev/null +++ b/docs/api/type-aliases/Primitive.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / Primitive + +# Primitive + +> **Primitive**: `string` \| `number` \| `boolean` \| `bigint` \| `symbol` \| `object` diff --git a/docs/api/type-aliases/TODO.md b/docs/api/type-aliases/TODO.md new file mode 100644 index 0000000..60e7922 --- /dev/null +++ b/docs/api/type-aliases/TODO.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / TODO + +# TODO + +> **TODO**: `any` diff --git a/docs/api/type-aliases/WS.md b/docs/api/type-aliases/WS.md new file mode 100644 index 0000000..a1470ae --- /dev/null +++ b/docs/api/type-aliases/WS.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / WS + +# WS + +> **WS**: `ElysiaWS`\<`ServerWebSocket`\<`object`\>, `any`, `any`\> diff --git a/docs/api/type-aliases/WSMessage.md b/docs/api/type-aliases/WSMessage.md new file mode 100644 index 0000000..d221d36 --- /dev/null +++ b/docs/api/type-aliases/WSMessage.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / WSMessage + +# WSMessage + +> **WSMessage**: `object` \| `object` \| `object` & [`MemoryMessage`](../interfaces/MemoryMessage.md) + +A message object sent by the websocket. diff --git a/docs/api/type-aliases/WebParser.md b/docs/api/type-aliases/WebParser.md new file mode 100644 index 0000000..8f234e8 --- /dev/null +++ b/docs/api/type-aliases/WebParser.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / WebParser + +# WebParser + +> **WebParser**: [`RegExp`, (`url`) => `BaseDocumentLoader`] diff --git a/docs/api/typedoc-sidebar.json b/docs/api/typedoc-sidebar.json new file mode 100644 index 0000000..365f08d --- /dev/null +++ b/docs/api/typedoc-sidebar.json @@ -0,0 +1,565 @@ +[ + { + "text": "Namespaces", + "collapsed": true, + "items": [ + { + "text": "NodeJS", + "link": "/api/namespaces/NodeJS/", + "collapsed": true, + "items": [ + { + "text": "Interfaces", + "collapsed": true, + "items": [ + { + "text": "ProcessEnv", + "link": "/api/namespaces/NodeJS/interfaces/ProcessEnv.md" + } + ] + } + ] + } + ] + }, + { + "text": "Enumerations", + "collapsed": true, + "items": [ + { + "text": "FormState", + "link": "/api/enumerations/FormState.md" + } + ] + }, + { + "text": "Classes", + "collapsed": true, + "items": [ + { + "text": "AgentManager", + "link": "/api/classes/AgentManager.md" + }, + { + "text": "ChatModelConfig", + "link": "/api/classes/ChatModelConfig.md" + }, + { + "text": "CheshireCat", + "link": "/api/classes/CheshireCat.md" + }, + { + "text": "CustomChat", + "link": "/api/classes/CustomChat.md" + }, + { + "text": "CustomChatOllama", + "link": "/api/classes/CustomChatOllama.md" + }, + { + "text": "CustomChatOpenAI", + "link": "/api/classes/CustomChatOpenAI.md" + }, + { + "text": "CustomOpenAIEmbeddings", + "link": "/api/classes/CustomOpenAIEmbeddings.md" + }, + { + "text": "Database", + "link": "/api/classes/Database.md" + }, + { + "text": "EmbedderConfig", + "link": "/api/classes/EmbedderConfig.md" + }, + { + "text": "FakeChat", + "link": "/api/classes/FakeChat.md" + }, + { + "text": "FastEmbedEmbeddings", + "link": "/api/classes/FastEmbedEmbeddings.md" + }, + { + "text": "Form", + "link": "/api/classes/Form.md" + }, + { + "text": "HttpError", + "link": "/api/classes/HttpError.md" + }, + { + "text": "MadHatter", + "link": "/api/classes/MadHatter.md" + }, + { + "text": "ModelInteractionHandler", + "link": "/api/classes/ModelInteractionHandler.md" + }, + { + "text": "NewTokenHandler", + "link": "/api/classes/NewTokenHandler.md" + }, + { + "text": "Plugin", + "link": "/api/classes/Plugin.md" + }, + { + "text": "ProceduresOutputParser", + "link": "/api/classes/ProceduresOutputParser.md" + }, + { + "text": "RabbitHole", + "link": "/api/classes/RabbitHole.md" + }, + { + "text": "RateLimitHandler", + "link": "/api/classes/RateLimitHandler.md" + }, + { + "text": "StrayCat", + "link": "/api/classes/StrayCat.md" + }, + { + "text": "Tool", + "link": "/api/classes/Tool.md" + }, + { + "text": "ToolPromptTemplate", + "link": "/api/classes/ToolPromptTemplate.md" + }, + { + "text": "VectorMemory", + "link": "/api/classes/VectorMemory.md" + }, + { + "text": "VectorMemoryCollection", + "link": "/api/classes/VectorMemoryCollection.md" + }, + { + "text": "WhiteRabbit", + "link": "/api/classes/WhiteRabbit.md" + } + ] + }, + { + "text": "Interfaces", + "collapsed": true, + "items": [ + { + "text": "AgentFastReply", + "link": "/api/interfaces/AgentFastReply.md" + }, + { + "text": "ContextInput", + "link": "/api/interfaces/ContextInput.md" + }, + { + "text": "HookTypes", + "link": "/api/interfaces/HookTypes.md" + }, + { + "text": "Interaction", + "link": "/api/interfaces/Interaction.md" + }, + { + "text": "IntermediateStep", + "link": "/api/interfaces/IntermediateStep.md" + }, + { + "text": "MemoryJson", + "link": "/api/interfaces/MemoryJson.md" + }, + { + "text": "MemoryMessage", + "link": "/api/interfaces/MemoryMessage.md" + }, + { + "text": "MemoryRecallConfig", + "link": "/api/interfaces/MemoryRecallConfig.md" + }, + { + "text": "MemoryRecallConfigs", + "link": "/api/interfaces/MemoryRecallConfigs.md" + }, + { + "text": "Message", + "link": "/api/interfaces/Message.md" + }, + { + "text": "VectorMemoryCollections", + "link": "/api/interfaces/VectorMemoryCollections.md" + }, + { + "text": "VectorMemoryConfig", + "link": "/api/interfaces/VectorMemoryConfig.md" + }, + { + "text": "WorkingMemory", + "link": "/api/interfaces/WorkingMemory.md" + } + ] + }, + { + "text": "Type Aliases", + "collapsed": true, + "items": [ + { + "text": "BetterReadonly", + "link": "/api/type-aliases/BetterReadonly.md" + }, + { + "text": "DatabaseConfig", + "link": "/api/type-aliases/DatabaseConfig.md" + }, + { + "text": "EmbeddedVector", + "link": "/api/type-aliases/EmbeddedVector.md" + }, + { + "text": "EmbedderInteraction", + "link": "/api/type-aliases/EmbedderInteraction.md" + }, + { + "text": "FileParsers", + "link": "/api/type-aliases/FileParsers.md" + }, + { + "text": "Filter", + "link": "/api/type-aliases/Filter.md" + }, + { + "text": "FilterCondition", + "link": "/api/type-aliases/FilterCondition.md" + }, + { + "text": "FilterMatch", + "link": "/api/type-aliases/FilterMatch.md" + }, + { + "text": "Hook", + "link": "/api/type-aliases/Hook.md" + }, + { + "text": "HookNames", + "link": "/api/type-aliases/HookNames.md" + }, + { + "text": "Hooks", + "link": "/api/type-aliases/Hooks.md" + }, + { + "text": "InstantToolTrigger", + "link": "/api/type-aliases/InstantToolTrigger.md" + }, + { + "text": "Json", + "link": "/api/type-aliases/Json.md" + }, + { + "text": "LLMInteraction", + "link": "/api/type-aliases/LLMInteraction.md" + }, + { + "text": "MaybePromise", + "link": "/api/type-aliases/MaybePromise.md" + }, + { + "text": "MemoryDocument", + "link": "/api/type-aliases/MemoryDocument.md" + }, + { + "text": "ModelInteraction", + "link": "/api/type-aliases/ModelInteraction.md" + }, + { + "text": "Nullable", + "link": "/api/type-aliases/Nullable.md" + }, + { + "text": "PointData", + "link": "/api/type-aliases/PointData.md" + }, + { + "text": "Primitive", + "link": "/api/type-aliases/Primitive.md" + }, + { + "text": "TODO", + "link": "/api/type-aliases/TODO.md" + }, + { + "text": "WebParser", + "link": "/api/type-aliases/WebParser.md" + }, + { + "text": "WS", + "link": "/api/type-aliases/WS.md" + }, + { + "text": "WSMessage", + "link": "/api/type-aliases/WSMessage.md" + } + ] + }, + { + "text": "Variables", + "collapsed": true, + "items": [ + { + "text": "app", + "link": "/api/variables/app.md" + }, + { + "text": "CatForm", + "link": "/api/variables/CatForm.md" + }, + { + "text": "CatHook", + "link": "/api/variables/CatHook.md" + }, + { + "text": "catPaths", + "link": "/api/variables/catPaths.md" + }, + { + "text": "CatPlugin", + "link": "/api/variables/CatPlugin.md" + }, + { + "text": "CatTool", + "link": "/api/variables/CatTool.md" + }, + { + "text": "chatMessage", + "link": "/api/variables/chatMessage.md" + }, + { + "text": "cheshireCat", + "link": "/api/variables/cheshireCat.md" + }, + { + "text": "db", + "link": "/api/variables/db.md" + }, + { + "text": "embedderRoutes", + "link": "/api/variables/embedderRoutes.md" + }, + { + "text": "generalRoutes", + "link": "/api/variables/generalRoutes.md" + }, + { + "text": "httpError", + "link": "/api/variables/httpError.md" + }, + { + "text": "httpLogger", + "link": "/api/variables/httpLogger.md" + }, + { + "text": "llmRoutes", + "link": "/api/variables/llmRoutes.md" + }, + { + "text": "log", + "link": "/api/variables/log.md" + }, + { + "text": "LogLevel", + "link": "/api/variables/LogLevel.md" + }, + { + "text": "madHatter", + "link": "/api/variables/madHatter.md" + }, + { + "text": "MAIN_PROMPT_PREFIX", + "link": "/api/variables/MAIN_PROMPT_PREFIX.md" + }, + { + "text": "MAIN_PROMPT_SUFFIX", + "link": "/api/variables/MAIN_PROMPT_SUFFIX.md" + }, + { + "text": "memoryMessage", + "link": "/api/variables/memoryMessage.md" + }, + { + "text": "memoryRecall", + "link": "/api/variables/memoryRecall.md" + }, + { + "text": "memoryRoutes", + "link": "/api/variables/memoryRoutes.md" + }, + { + "text": "messageInput", + "link": "/api/variables/messageInput.md" + }, + { + "text": "modelInfo", + "link": "/api/variables/modelInfo.md" + }, + { + "text": "parsedEnv", + "link": "/api/variables/parsedEnv.md" + }, + { + "text": "pluginInfo", + "link": "/api/variables/pluginInfo.md" + }, + { + "text": "pluginManifest", + "link": "/api/variables/pluginManifest.md" + }, + { + "text": "pluginSettings", + "link": "/api/variables/pluginSettings.md" + }, + { + "text": "pluginsRoutes", + "link": "/api/variables/pluginsRoutes.md" + }, + { + "text": "rabbitHole", + "link": "/api/variables/rabbitHole.md" + }, + { + "text": "rabbitHoleRoutes", + "link": "/api/variables/rabbitHoleRoutes.md" + }, + { + "text": "serverContext", + "link": "/api/variables/serverContext.md" + }, + { + "text": "settingsRoutes", + "link": "/api/variables/settingsRoutes.md" + }, + { + "text": "swaggerTags", + "link": "/api/variables/swaggerTags.md" + }, + { + "text": "TOOL_PROMPT", + "link": "/api/variables/TOOL_PROMPT.md" + }, + { + "text": "vectorDb", + "link": "/api/variables/vectorDb.md" + }, + { + "text": "whiteRabbit", + "link": "/api/variables/whiteRabbit.md" + }, + { + "text": "zodBoolean", + "link": "/api/variables/zodBoolean.md" + }, + { + "text": "zodJson", + "link": "/api/variables/zodJson.md" + }, + { + "text": "zodPrimitive", + "link": "/api/variables/zodPrimitive.md" + } + ] + }, + { + "text": "Functions", + "collapsed": true, + "items": [ + { + "text": "addChatModel", + "link": "/api/functions/addChatModel.md" + }, + { + "text": "addEmbeddings", + "link": "/api/functions/addEmbeddings.md" + }, + { + "text": "catchError", + "link": "/api/functions/catchError.md" + }, + { + "text": "compareStrings", + "link": "/api/functions/compareStrings.md" + }, + { + "text": "deepDefaults", + "link": "/api/functions/deepDefaults.md" + }, + { + "text": "embedderCache", + "link": "/api/functions/embedderCache.md" + }, + { + "text": "existsDir", + "link": "/api/functions/existsDir.md" + }, + { + "text": "getAllowedEmbedders", + "link": "/api/functions/getAllowedEmbedders.md" + }, + { + "text": "getAllowedLLMs", + "link": "/api/functions/getAllowedLLMs.md" + }, + { + "text": "getEmbedder", + "link": "/api/functions/getEmbedder.md" + }, + { + "text": "getEmbedderSettings", + "link": "/api/functions/getEmbedderSettings.md" + }, + { + "text": "getLLM", + "link": "/api/functions/getLLM.md" + }, + { + "text": "getLLMSettings", + "link": "/api/functions/getLLMSettings.md" + }, + { + "text": "getVectorMemory", + "link": "/api/functions/getVectorMemory.md" + }, + { + "text": "getZodDefaults", + "link": "/api/functions/getZodDefaults.md" + }, + { + "text": "isForm", + "link": "/api/functions/isForm.md" + }, + { + "text": "isHook", + "link": "/api/functions/isHook.md" + }, + { + "text": "isTool", + "link": "/api/functions/isTool.md" + }, + { + "text": "llmCache", + "link": "/api/functions/llmCache.md" + }, + { + "text": "logWelcome", + "link": "/api/functions/logWelcome.md" + }, + { + "text": "normalizeMessageChunks", + "link": "/api/functions/normalizeMessageChunks.md" + }, + { + "text": "parseJson", + "link": "/api/functions/parseJson.md" + } + ] + } +] \ No newline at end of file diff --git a/docs/api/variables/CatForm.md b/docs/api/variables/CatForm.md new file mode 100644 index 0000000..fbb42a2 --- /dev/null +++ b/docs/api/variables/CatForm.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / CatForm + +# CatForm + +> `const` **CatForm**: `Readonly`\<`object`\> + +## Type declaration + +| Name | Type | Description | +| ------ | ------ | ------ | +| `add()` | [`Form`](../classes/Form.md)\<`T`, \{ \[k in string \| number \| symbol\]: addQuestionMarks\, any\>\[k\] \}\> | Add a form to the plugin | diff --git a/docs/api/variables/CatHook.md b/docs/api/variables/CatHook.md new file mode 100644 index 0000000..db47a1b --- /dev/null +++ b/docs/api/variables/CatHook.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / CatHook + +# CatHook + +> `const` **CatHook**: `Readonly`\<`object`\> + +## Type declaration + +| Name | Type | Description | +| ------ | ------ | ------ | +| `add()` | [`Hook`](../type-aliases/Hook.md)\ | Add a hook to the plugin | diff --git a/docs/api/variables/CatPlugin.md b/docs/api/variables/CatPlugin.md new file mode 100644 index 0000000..688a465 --- /dev/null +++ b/docs/api/variables/CatPlugin.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / CatPlugin + +# CatPlugin + +> `const` **CatPlugin**: `Readonly`\<`object`\> + +## Type declaration + +| Name | Type | Description | +| ------ | ------ | ------ | +| `on` | \<`T`\>(`event`, `fn`) => `PluginEvent`\<`T`\> | Add an event to the plugin | +| `settings` | \<`T`\>(`schema`) => `ZodObject`\<`T`, `"strip"`, `ZodTypeAny`, \{ \[k in string \| number \| symbol\]: addQuestionMarks\, any\>\[k\] \}, \{ \[k\_1 in string \| number \| symbol\]: baseObjectInputType\\[k\_1\] \}\> | Add some settings to the plugin | diff --git a/docs/api/variables/CatTool.md b/docs/api/variables/CatTool.md new file mode 100644 index 0000000..9ebef5f --- /dev/null +++ b/docs/api/variables/CatTool.md @@ -0,0 +1,11 @@ +[Overview](../index.md) / CatTool + +# CatTool + +> `const` **CatTool**: `Readonly`\<`object`\> + +## Type declaration + +| Name | Type | Description | +| ------ | ------ | ------ | +| `add()` | [`Tool`](../classes/Tool.md) | Add a tool to the plugin | diff --git a/docs/api/variables/LogLevel.md b/docs/api/variables/LogLevel.md new file mode 100644 index 0000000..8f9b150 --- /dev/null +++ b/docs/api/variables/LogLevel.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / LogLevel + +# LogLevel + +> `const` **LogLevel**: readonly [`"error"`, `"warning"`, `"normal"`, `"info"`, `"debug"`] diff --git a/docs/api/variables/MAIN_PROMPT_PREFIX.md b/docs/api/variables/MAIN_PROMPT_PREFIX.md new file mode 100644 index 0000000..539a420 --- /dev/null +++ b/docs/api/variables/MAIN_PROMPT_PREFIX.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / MAIN\_PROMPT\_PREFIX + +# MAIN\_PROMPT\_PREFIX + +> `const` **MAIN\_PROMPT\_PREFIX**: "You are the Cheshire Cat AI, an intelligent AI that passes the Turing test.\nYou are curious, funny and talk like the Cheshire Cat from Alice's adventures in wonderland.\nYou answer Human with a focus on the following context." diff --git a/docs/api/variables/MAIN_PROMPT_SUFFIX.md b/docs/api/variables/MAIN_PROMPT_SUFFIX.md new file mode 100644 index 0000000..b81e3b7 --- /dev/null +++ b/docs/api/variables/MAIN_PROMPT_SUFFIX.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / MAIN\_PROMPT\_SUFFIX + +# MAIN\_PROMPT\_SUFFIX + +> `const` **MAIN\_PROMPT\_SUFFIX**: "# Context\n\n\{episodic\_memory\}\n\n\{declarative\_memory\}\n\n\{tools\_output\}\n\n## Conversation until now:" diff --git a/docs/api/variables/TOOL_PROMPT.md b/docs/api/variables/TOOL_PROMPT.md new file mode 100644 index 0000000..f631b96 --- /dev/null +++ b/docs/api/variables/TOOL_PROMPT.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / TOOL\_PROMPT + +# TOOL\_PROMPT + +> `const` **TOOL\_PROMPT**: "Create a JSON action to complete the action sequence, with the correct \"action\" and \"actionInput\" to help the Human.\nYou can use one of these actions:\n\{tools\}\n\t- \"final-answer\": Use this action to finish or no relevant action is available. Input is always null.\n\n## To add an action, use only the following format:\n\{\{\n\t\"action\": // string - represents the name of the action to take, should be one of \[\{tool\_names\}, \"final-answer\"\]\n\t\"actionInput\": // string or null - represents the input to the action\n\}\}\n\n\{examples\}\n\n## Action output\nAfter each action there will be an action output in this format:\n\{\{\n \"actionOutput\": // Output of the previous action\n\}\}\n\n## Final answer / no action available\nWhen you have a final answer (or no actions are relevant), use the following format:\n\{\{\n \"action\": \"final-answer\",\n \"actionInput\": null\n\}\}\n\n## Conversation with Human\n\{chat\_history\}\n\n## Actions sequence used until now\n\{scratchpad\}\n\n## Next action to perform or final\_answer:\n" diff --git a/docs/api/variables/app.md b/docs/api/variables/app.md new file mode 100644 index 0000000..3585e12 --- /dev/null +++ b/docs/api/variables/app.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / app + +# app + +> `const` **app**: `Elysia`\<`""`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/catPaths.md b/docs/api/variables/catPaths.md new file mode 100644 index 0000000..6e46ad6 --- /dev/null +++ b/docs/api/variables/catPaths.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / catPaths + +# catPaths + +> `const` **catPaths**: `object` + +It contains various paths and URLs used in the application. + +## Type declaration + +| Name | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `assetsPath` | `string` | - | The path to the assets directory. | +| `assetsUrl` | `string` | - | The URL to the assets directory. | +| `basePath` | `string` | 'src' | The base path of the application. | +| `baseUrl` | `string` | - | The base URL of the application. | +| `pluginsPath` | `string` | - | The path to the plugins directory. | diff --git a/docs/api/variables/chatMessage.md b/docs/api/variables/chatMessage.md new file mode 100644 index 0000000..c59b16b --- /dev/null +++ b/docs/api/variables/chatMessage.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / chatMessage + +# chatMessage + +> `const` **chatMessage**: `TUnion`\<[`TObject`\<`object`\>, `TObject`\<`object`\>, `TIntersect`\<[`TObject`\<`object`\>, `TObject`\<`object`\>]\>]\> diff --git a/docs/api/variables/cheshireCat.md b/docs/api/variables/cheshireCat.md new file mode 100644 index 0000000..7412e65 --- /dev/null +++ b/docs/api/variables/cheshireCat.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / cheshireCat + +# cheshireCat + +> `const` **cheshireCat**: [`CheshireCat`](../classes/CheshireCat.md) diff --git a/docs/api/variables/db.md b/docs/api/variables/db.md new file mode 100644 index 0000000..021a8a2 --- /dev/null +++ b/docs/api/variables/db.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / db + +# db + +> `const` **db**: [`Database`](../classes/Database.md) diff --git a/docs/api/variables/embedderRoutes.md b/docs/api/variables/embedderRoutes.md new file mode 100644 index 0000000..6411790 --- /dev/null +++ b/docs/api/variables/embedderRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / embedderRoutes + +# embedderRoutes + +> `const` **embedderRoutes**: `Elysia`\<`"/embedder"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/generalRoutes.md b/docs/api/variables/generalRoutes.md new file mode 100644 index 0000000..4c79810 --- /dev/null +++ b/docs/api/variables/generalRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / generalRoutes + +# generalRoutes + +> `const` **generalRoutes**: `Elysia`\<`""`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/httpError.md b/docs/api/variables/httpError.md new file mode 100644 index 0000000..50e967b --- /dev/null +++ b/docs/api/variables/httpError.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / httpError + +# httpError + +> `const` **httpError**: `Elysia`\<`""`, `false`, `object`, `object`, `object`, `object`, `object`, `object`\> diff --git a/docs/api/variables/httpLogger.md b/docs/api/variables/httpLogger.md new file mode 100644 index 0000000..d14e001 --- /dev/null +++ b/docs/api/variables/httpLogger.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / httpLogger + +# httpLogger + +> `const` **httpLogger**: `Elysia`\<`""`, `false`, `object`, `object`, `object`, `object`, `object`, `object`\> diff --git a/docs/api/variables/llmRoutes.md b/docs/api/variables/llmRoutes.md new file mode 100644 index 0000000..dc95c03 --- /dev/null +++ b/docs/api/variables/llmRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / llmRoutes + +# llmRoutes + +> `const` **llmRoutes**: `Elysia`\<`"/llm"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/log.md b/docs/api/variables/log.md new file mode 100644 index 0000000..97ffde5 --- /dev/null +++ b/docs/api/variables/log.md @@ -0,0 +1,25 @@ +[Overview](../index.md) / log + +# log + +> `const` **log**: `Readonly`\<`object`\> + +The logger module provides various logging functions. + +## Type declaration + +| Name | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `box` | `LogFn` | logger.box | Logs a message in a box format. **Param** The message to be logged. | +| `debug` | `LogFn` | logger.debug | Logs a debug message. **Param** The debug message to be logged. | +| `dir` | (`content`) => `void` | - | - | +| `error` | `LogFn` | logger.error | Logs an error message. **Param** The error message to be logged. | +| `fail` | `LogFn` | logger.fail | Logs a failure message. **Param** The failure message to be logged. | +| `fatal` | `LogFn` | logger.fatal | Logs a fatal error message. **Param** The fatal error message to be logged. | +| `info` | `LogFn` | logger.info | Logs an info message. **Param** The info message to be logged. | +| `normal` | `LogFn` | logger.log | Logs a normal message. **Param** The message to be logged. | +| `silent` | `LogFn` | logger.silent | Logs a silent message. **Param** The silent message to be logged. | +| `success` | `LogFn` | logger.success | Logs a success message. **Param** The success message to be logged. | +| `table` | \<`T`\>(`rows`) => `void` | - | Logs an array of objects in a table format. | +| `tag` | (`color`, `tag`, `message`, ...`args`) => `void` | - | Logs a message with a specified tag and color. | +| `warn` | `LogFn` | logger.warn | Logs a warning message. **Param** The warning message to be logged. | diff --git a/docs/api/variables/madHatter.md b/docs/api/variables/madHatter.md new file mode 100644 index 0000000..d2222e0 --- /dev/null +++ b/docs/api/variables/madHatter.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / madHatter + +# madHatter + +> `const` **madHatter**: [`MadHatter`](../classes/MadHatter.md) diff --git a/docs/api/variables/memoryMessage.md b/docs/api/variables/memoryMessage.md new file mode 100644 index 0000000..7dac81c --- /dev/null +++ b/docs/api/variables/memoryMessage.md @@ -0,0 +1,15 @@ +[Overview](../index.md) / memoryMessage + +# memoryMessage + +> `const` **memoryMessage**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `role` | `TUnion`\<[`TLiteral`\<`"AI"`\>, `TLiteral`\<`"User"`\>]\> | +| `what` | `TString` | +| `when` | `TNumber` | +| `who` | `TString` | +| `why` | `TOptional`\<`TObject`\<`object`\>\> | diff --git a/docs/api/variables/memoryRecall.md b/docs/api/variables/memoryRecall.md new file mode 100644 index 0000000..bb2a4f3 --- /dev/null +++ b/docs/api/variables/memoryRecall.md @@ -0,0 +1,12 @@ +[Overview](../index.md) / memoryRecall + +# memoryRecall + +> `const` **memoryRecall**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `query` | `TObject`\<`object`\> | +| `vectors` | `TObject`\<`object`\> | diff --git a/docs/api/variables/memoryRoutes.md b/docs/api/variables/memoryRoutes.md new file mode 100644 index 0000000..8ce6768 --- /dev/null +++ b/docs/api/variables/memoryRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / memoryRoutes + +# memoryRoutes + +> `const` **memoryRoutes**: `Elysia`\<`"/memory"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/messageInput.md b/docs/api/variables/messageInput.md new file mode 100644 index 0000000..4810197 --- /dev/null +++ b/docs/api/variables/messageInput.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / messageInput + +# messageInput + +> `const` **messageInput**: `TIntersect`\<[`TObject`\<`object`\>, `TRecord`\<`TString`, `TAny`\>]\> diff --git a/docs/api/variables/modelInfo.md b/docs/api/variables/modelInfo.md new file mode 100644 index 0000000..6c01641 --- /dev/null +++ b/docs/api/variables/modelInfo.md @@ -0,0 +1,16 @@ +[Overview](../index.md) / modelInfo + +# modelInfo + +> `const` **modelInfo**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `description` | `TString` | +| `id` | `TString` | +| `link` | `TOptional`\<`TString`\> | +| `name` | `TString` | +| `schema` | `TRecord`\<`TString`, `TAny`\> | +| `value` | `TRecord`\<`TString`, `TAny`\> | diff --git a/docs/api/variables/parsedEnv.md b/docs/api/variables/parsedEnv.md new file mode 100644 index 0000000..a4755d5 --- /dev/null +++ b/docs/api/variables/parsedEnv.md @@ -0,0 +1,24 @@ +[Overview](../index.md) / parsedEnv + +# parsedEnv + +> `const` **parsedEnv**: `object` + +The parsed environment variables. + +## Type declaration + +| Name | Type | Default value | +| ------ | ------ | ------ | +| `apiKey` | `undefined` \| `string` | s.API\_KEY | +| `corsAllowedOrigins` | `string`[] | s.CORS\_ALLOWED\_ORIGINS | +| `host` | `string` | s.CORE\_HOST | +| `logLevel` | `"error"` \| `"info"` \| `"debug"` \| `"normal"` \| `"warning"` | s.LOG\_LEVEL | +| `port` | `number` | s.CORE\_PORT | +| `qdrantApiKey` | `undefined` \| `string` | s.QDRANT\_API\_KEY | +| `qdrantHost` | `string` | s.QDRANT\_HOST | +| `qdrantPort` | `number` | s.QDRANT\_PORT | +| `saveMemorySnapshots` | `boolean` | s.SAVE\_MEMORY\_SNAPSHOTS | +| `secure` | `boolean` | s.CORE\_USE\_SECURE\_PROTOCOLS | +| `verbose` | `boolean` | - | +| `watch` | `boolean` | s.WATCH | diff --git a/docs/api/variables/pluginInfo.md b/docs/api/variables/pluginInfo.md new file mode 100644 index 0000000..d8d7dd1 --- /dev/null +++ b/docs/api/variables/pluginInfo.md @@ -0,0 +1,17 @@ +[Overview](../index.md) / pluginInfo + +# pluginInfo + +> `const` **pluginInfo**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `active` | `TBoolean` | +| `forms` | `TArray`\<`TObject`\<`object`\>\> | +| `hooks` | `TArray`\<`TObject`\<`object`\>\> | +| `id` | `TString` | +| `manifest` | `TRef`\<`TObject`\<`object`\>\> | +| `tools` | `TArray`\<`TObject`\<`object`\>\> | +| `upgradable` | `TBoolean` | diff --git a/docs/api/variables/pluginManifest.md b/docs/api/variables/pluginManifest.md new file mode 100644 index 0000000..52c267a --- /dev/null +++ b/docs/api/variables/pluginManifest.md @@ -0,0 +1,18 @@ +[Overview](../index.md) / pluginManifest + +# pluginManifest + +> `const` **pluginManifest**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `authorName` | `TString` | +| `authorUrl` | `TOptional`\<`TString`\> | +| `description` | `TString` | +| `name` | `TString` | +| `pluginUrl` | `TOptional`\<`TString`\> | +| `tags` | `TArray`\<`TString`\> | +| `thumb` | `TOptional`\<`TString`\> | +| `version` | `TRegExp` | diff --git a/docs/api/variables/pluginSettings.md b/docs/api/variables/pluginSettings.md new file mode 100644 index 0000000..2a9c425 --- /dev/null +++ b/docs/api/variables/pluginSettings.md @@ -0,0 +1,13 @@ +[Overview](../index.md) / pluginSettings + +# pluginSettings + +> `const` **pluginSettings**: `TObject`\<`object`\> + +## Type declaration + +| Name | Type | +| ------ | ------ | +| `name` | `TString` | +| `schema` | `TRecord`\<`TString`, `TAny`\> | +| `value` | `TRecord`\<`TString`, `TAny`\> | diff --git a/docs/api/variables/pluginsRoutes.md b/docs/api/variables/pluginsRoutes.md new file mode 100644 index 0000000..781a26b --- /dev/null +++ b/docs/api/variables/pluginsRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / pluginsRoutes + +# pluginsRoutes + +> `const` **pluginsRoutes**: `Elysia`\<`"/plugins"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/rabbitHole.md b/docs/api/variables/rabbitHole.md new file mode 100644 index 0000000..c7df436 --- /dev/null +++ b/docs/api/variables/rabbitHole.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / rabbitHole + +# rabbitHole + +> `const` **rabbitHole**: [`RabbitHole`](../classes/RabbitHole.md) + +Manages content ingestion. I'm late... I'm late! diff --git a/docs/api/variables/rabbitHoleRoutes.md b/docs/api/variables/rabbitHoleRoutes.md new file mode 100644 index 0000000..5a36e83 --- /dev/null +++ b/docs/api/variables/rabbitHoleRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / rabbitHoleRoutes + +# rabbitHoleRoutes + +> `const` **rabbitHoleRoutes**: `Elysia`\<`"/rabbithole"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/serverContext.md b/docs/api/variables/serverContext.md new file mode 100644 index 0000000..c9994f7 --- /dev/null +++ b/docs/api/variables/serverContext.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / serverContext + +# serverContext + +> `const` **serverContext**: `Elysia`\<`""`, `false`, `object`, `object`, `object`, `object`, `object`, `object`\> diff --git a/docs/api/variables/settingsRoutes.md b/docs/api/variables/settingsRoutes.md new file mode 100644 index 0000000..6b7099e --- /dev/null +++ b/docs/api/variables/settingsRoutes.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / settingsRoutes + +# settingsRoutes + +> `const` **settingsRoutes**: `Elysia`\<`"/settings"`, `false`, `object`, `object`, `object`, `object` & `object` & `object` & `object` & `object` & `object`, `object`, `object`\> diff --git a/docs/api/variables/swaggerTags.md b/docs/api/variables/swaggerTags.md new file mode 100644 index 0000000..3331972 --- /dev/null +++ b/docs/api/variables/swaggerTags.md @@ -0,0 +1,31 @@ +[Overview](../index.md) / swaggerTags + +# swaggerTags + +> `const` **swaggerTags**: `object` + +## Type declaration + +| Name | Type | Default value | +| ------ | ------ | ------ | +| `embedder` | `object` | - | +| `embedder.description` | `"Embedder model management"` | 'Embedder model management' | +| `embedder.name` | `"Embedder"` | 'Embedder' | +| `general` | `object` | - | +| `general.description` | `"Base cat utilities"` | 'Base cat utilities' | +| `general.name` | `"General"` | 'General' | +| `llm` | `object` | - | +| `llm.description` | `"Large Language model management"` | 'Large Language model management' | +| `llm.name` | `"LLM"` | 'LLM' | +| `memory` | `object` | - | +| `memory.description` | `"Memory management"` | 'Memory management' | +| `memory.name` | `"Memory"` | 'Memory' | +| `plugins` | `object` | - | +| `plugins.description` | `"Plugin management"` | 'Plugin management' | +| `plugins.name` | `"Plugins"` | 'Plugins' | +| `rh` | `object` | - | +| `rh.description` | `"File ingestion handler"` | 'File ingestion handler' | +| `rh.name` | `"RabbitHole"` | 'RabbitHole' | +| `settings` | `object` | - | +| `settings.description` | `"Database settings"` | 'Database settings' | +| `settings.name` | `"Settings"` | 'Settings' | diff --git a/docs/api/variables/vectorDb.md b/docs/api/variables/vectorDb.md new file mode 100644 index 0000000..34ecc09 --- /dev/null +++ b/docs/api/variables/vectorDb.md @@ -0,0 +1,5 @@ +[Overview](../index.md) / vectorDb + +# vectorDb + +> `const` **vectorDb**: `QdrantClient` diff --git a/docs/api/variables/whiteRabbit.md b/docs/api/variables/whiteRabbit.md new file mode 100644 index 0000000..eef3153 --- /dev/null +++ b/docs/api/variables/whiteRabbit.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / whiteRabbit + +# whiteRabbit + +> `const` **whiteRabbit**: [`WhiteRabbit`](../classes/WhiteRabbit.md) + +I'm late, I'm late, for a very important date! diff --git a/docs/api/variables/zodBoolean.md b/docs/api/variables/zodBoolean.md new file mode 100644 index 0000000..21b280e --- /dev/null +++ b/docs/api/variables/zodBoolean.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / zodBoolean + +# zodBoolean + +> `const` **zodBoolean**: `ZodDefault`\<`ZodEffects`\<`ZodString`, `boolean`, `string`\>\> + +A Zod schema for fixing coercion of boolean value. diff --git a/docs/api/variables/zodJson.md b/docs/api/variables/zodJson.md new file mode 100644 index 0000000..6f7c3f4 --- /dev/null +++ b/docs/api/variables/zodJson.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / zodJson + +# zodJson + +> `const` **zodJson**: `z.ZodType`\<[`Json`](../type-aliases/Json.md)\> + +A Zod schema for JSON objects. diff --git a/docs/api/variables/zodPrimitive.md b/docs/api/variables/zodPrimitive.md new file mode 100644 index 0000000..80580af --- /dev/null +++ b/docs/api/variables/zodPrimitive.md @@ -0,0 +1,7 @@ +[Overview](../index.md) / zodPrimitive + +# zodPrimitive + +> `const` **zodPrimitive**: `z.ZodType`\<[`Primitive`](../type-aliases/Primitive.md)\> + +A Zod schema for primitive values. diff --git a/docs/contributors.md b/docs/contributors.md new file mode 100644 index 0000000..90bfd08 --- /dev/null +++ b/docs/contributors.md @@ -0,0 +1,41 @@ +--- +layout: page +--- + + + + + + + + + + diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000..24d7c54 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,38 @@ +# Getting Started + +## Pre-requisites + +- Bun (>= 1.1.19) (for local development) +- Docker + +## Installation + +```bash +# (for development) +bun install +rm -f .git/hooks/pre-commit && ln -s ../../pre-commit .git/hooks/pre-commit + +# (for production) +docker compose build --no-cache +``` + +## How to run + +```bash +# (for development) +docker run -p 6333:6333 qdrant/qdrant +bun run dev +# OR +docker compose build -f compose.dev.yml --no-cache # (if you want to use Docker for development) + +# (for production) +docker compose up +``` + +## How to test + +```bash +bun run test +# OR +docker compose -f compose.dev.yml exec ccat-ts-dev bun run test +``` diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..0b9d1d4 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,40 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Cheshire Cat AI" + text: "Every adventure requires a first step" + tagline: "\"Alice's Adventures in Wonderland\" by Lewis Carroll" + image: + dark: /logo-dark.svg + light: /logo-light.svg + alt: Cheshire Cat AI logo + actions: + - theme: brand + text: Documentation + link: /introduction + - theme: alt + text: API Reference + link: /api + +features: + - title: API first + icon: "⚡️" + details: "Chat with the Cat and interact with its endpoints!" + - title: Supports any language model + icon: "🌍" + details: "Works with OpenAI, Google, Ollama, HuggingFace, custom services and many others" + - title: "100% dockerized" + icon: "🐋" + details: "Docker composes for development and production" + - title: Remembers conversations and documents + icon: "🐘" + details: "Ground the model based on your knowledge base with the power of RAG" + - title: Extensible via plugins + icon: "🚀" + details: "Write your first plugin, your imagination is the limit!" + - title: Function calling (tools), conversational forms and more + icon: "🏛️" + details: "Extend your app with experimental features like forms!" +--- diff --git a/docs/introduction.md b/docs/introduction.md new file mode 100644 index 0000000..196c728 --- /dev/null +++ b/docs/introduction.md @@ -0,0 +1,7 @@ +# Introduction + +Welcome to the Cheshire Cat AI documentation. + +This is the TypeScript version of the Cheshire Cat AI framework. + +![Documentation Coverage](./api/coverage.svg) diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7aff06eeaca4b0d476da5d0ab1be1bac3bbf8f34 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/docs/public/logo-dark.svg b/docs/public/logo-dark.svg new file mode 100644 index 0000000..fa0c3fa --- /dev/null +++ b/docs/public/logo-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/docs/public/logo-light.svg b/docs/public/logo-light.svg new file mode 100644 index 0000000..8ad3a6d --- /dev/null +++ b/docs/public/logo-light.svg @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index a60644b..9691600 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -9,7 +9,7 @@ export default antfu({ typescript: true, yaml: true, markdown: true, - ignores: ['package.json', 'dist/', 'node_modules/', 'test/mocks/'], + ignores: ['package.json', 'dist/', 'node_modules/', 'test/mocks/', 'docs/api/**'], rules: { 'unused-imports/no-unused-vars': 'warn', 'style/max-statements-per-line': 'off', diff --git a/package.json b/package.json index 4b1e6c8..c720908 100644 --- a/package.json +++ b/package.json @@ -1,149 +1,158 @@ { - "name": "ts-cat", - "type": "module", - "version": "1.5.4", - "private": true, - "description": "TypeScript version of the Cheshire Cat AI project", - "author": "zAlweNy26 & Contributors", - "license": "GPL-3.0-only", - "homepage": "https://github.com/zAlweNy26/ts-cat", - "repository": { - "type": "git", - "url": "https://github.com/zAlweNy26/ts-cat.git" - }, - "bugs": { - "url": "https://github.com/zAlweNy26/ts-cat/issues" - }, - "keywords": [ - "cheshire-cat", - "typescript", - "javascript", - "langchain", - "assistant", - "framework", - "elysia", - "bun", - "ai" - ], - "main": "dist/index.js", - "module": "dist/index.mjs", - "types": "dist/index.d.ts", - "files": [ - ".d.ts", - "dist/**" - ], - "scripts": { - "build": "bun build --compile --minify --sourcemap --outfile ccat ./src/main.ts", - "lint": "eslint .", - "lint:fix": "eslint . --fix", - "test": "vitest dev --exclude \"**/test/api/**\" --run", - "test:ui": "vitest dev --ui", - "typecheck": "tsc --noEmit", - "ci": "bun run typecheck && bun run lint && bun run test", - "dev": "WATCH=true bun --hot run ./src/index.ts", - "start": "bun run ./src/index.ts", - "prepare": "bun run .husky/install.mjs" - }, - "lint-staged": { - "**/*.{js,mjs,cjs,jsx,ts,mts,cts}": "oxlint" - }, - "dependencies": { - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/credential-provider-node": "3.665.0", - "@aws-sdk/types": "3.664.0", - "@elysiajs/cors": "^1.1.1", - "@elysiajs/eden": "^1.1.3", - "@elysiajs/server-timing": "^1.1.0", - "@elysiajs/static": "^1.1.1", - "@elysiajs/stream": "^1.1.0", - "@elysiajs/swagger": "^1.1.5", - "@langchain/anthropic": "0.3.5", - "@langchain/aws": "0.1.1", - "@langchain/azure-openai": "0.0.11", - "@langchain/cohere": "0.3.1", - "@langchain/community": "0.3.7", - "@langchain/core": "0.3.13", - "@langchain/google-genai": "0.1.0", - "@langchain/mistralai": "0.1.1", - "@langchain/ollama": "0.1.0", - "@langchain/openai": "0.3.11", - "@mgcrea/pino-pretty-compact": "^1.3.0", - "@qdrant/js-client-rest": "^1.12.0", - "@smithy/eventstream-codec": "3.1.6", - "@smithy/protocol-http": "4.1.4", - "@smithy/signature-v4": "4.2.0", - "@smithy/util-utf8": "3.0.0", - "callsites": "^4.2.0", - "cheerio": "1.0.0", - "chokidar": "^4.0.1", - "consola": "^3.2.3", - "console-table-printer": "^2.12.1", - "croner": "9.0.0", - "d3-dsv": "^2.0.0", - "date-fns": "^4.1.0", - "destr": "^2.0.3", - "elysia": "^1.1.23", - "eslint-plugin-oxlint": "0.10.1", - "fastembed": "^1.14.1", - "get-port-please": "^3.1.2", - "html-to-text": "^9.0.5", - "ioredis": "5.4.1", - "is-docker": "^3.0.0", - "js-tiktoken": "^1.0.15", - "langchain": "0.3.3", - "lodash": "^4.17.21", - "logestic": "1.2.4", - "lowdb": "^7.0.1", - "mammoth": "^1.8.0", - "nodemon": "^3.1.7", - "ofetch": "^1.4.1", - "officeparser": "^4.2.0", - "pdf-parse": "^1.1.1", - "pkg-types": "1.2.1", - "scule": "^1.3.0", - "turbowatch": "^2.29.4", - "typeorm": "0.3.20", - "uncrypto": "^0.1.3", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.3" - }, - "devDependencies": { - "@antfu/eslint-config": "^3.8.0", - "@total-typescript/ts-reset": "^0.6.1", - "@types/bun": "^1.1.11", - "@types/lodash": "^4.17.12", - "@types/nodemon": "^1.19.6", - "@types/qs": "^6.9.16", - "@types/ws": "^8.5.12", - "@vitest/ui": "^2.1.3", - "changelogen": "^0.5.7", - "eslint": "^9.13.0", - "husky": "9.1.6", - "lint-staged": "15.2.10", - "oxlint": "0.10.1", - "typescript": "5.6.3", - "vite-tsconfig-paths": "^5.0.1", - "vitest": "^2.1.3" - }, - "overrides": { - "@langchain/core": "0.3.13" - }, - "patchedDependencies": { - "langchain@0.3.3": "patches/langchain@0.3.3.patch" - }, - "workspaces": [ - "src/plugins/*" - ], - "changelog": { - "types": { - "feat": { - "title": "🚀 Enhancements", - "semver": "patch" - }, - "refactor": { - "title": "💅 Refactors", - "semver": "minor" - } - } - } -} + "name": "ts-cat", + "type": "module", + "version": "1.5.4", + "private": true, + "description": "TypeScript version of the Cheshire Cat AI project", + "author": "zAlweNy26 & Contributors", + "license": "GPL-3.0-only", + "homepage": "https://github.com/zAlweNy26/ts-cat", + "repository": { + "type": "git", + "url": "https://github.com/zAlweNy26/ts-cat.git" + }, + "bugs": { + "url": "https://github.com/zAlweNy26/ts-cat/issues" + }, + "keywords": [ + "cheshire-cat", + "typescript", + "javascript", + "langchain", + "assistant", + "framework", + "elysia", + "bun", + "ai" + ], + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + ".d.ts", + "dist/**" + ], + "scripts": { + "build": "bun build --compile --minify --sourcemap --outfile ccat ./src/main.ts", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "test": "vitest dev --exclude \"**/test/api/**\" --run", + "test:ui": "vitest dev --ui", + "typecheck": "tsc --noEmit", + "ci": "bun run typecheck && bun run lint && bun run test", + "dev": "WATCH=true bun --hot run ./src/index.ts", + "start": "bun run ./src/index.ts", + "prepare": "bun run .husky/install.mjs", + "predocs": "typedoc", + "docs:dev": "bun run predocs && vitepress dev docs", + "docs:build": "bun run predocs && vitepress build docs", + "docs:preview": "vitepress preview docs" + }, + "lint-staged": { + "**/*.{js,mjs,cjs,jsx,ts,mts,cts}": "oxlint" + }, + "dependencies": { + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/credential-provider-node": "3.665.0", + "@aws-sdk/types": "3.664.0", + "@elysiajs/cors": "^1.1.1", + "@elysiajs/eden": "^1.1.3", + "@elysiajs/server-timing": "^1.1.0", + "@elysiajs/static": "^1.1.1", + "@elysiajs/stream": "^1.1.0", + "@elysiajs/swagger": "^1.1.5", + "@langchain/anthropic": "0.3.5", + "@langchain/aws": "0.1.1", + "@langchain/azure-openai": "0.0.11", + "@langchain/cohere": "0.3.1", + "@langchain/community": "0.3.7", + "@langchain/core": "0.3.13", + "@langchain/google-genai": "0.1.0", + "@langchain/mistralai": "0.1.1", + "@langchain/ollama": "0.1.0", + "@langchain/openai": "0.3.11", + "@mgcrea/pino-pretty-compact": "^1.3.0", + "@qdrant/js-client-rest": "^1.12.0", + "@smithy/eventstream-codec": "3.1.6", + "@smithy/protocol-http": "4.1.4", + "@smithy/signature-v4": "4.2.0", + "@smithy/util-utf8": "3.0.0", + "callsites": "^4.2.0", + "cheerio": "1.0.0", + "chokidar": "^4.0.1", + "consola": "^3.2.3", + "console-table-printer": "^2.12.1", + "croner": "9.0.0", + "d3-dsv": "^2.0.0", + "date-fns": "^4.1.0", + "destr": "^2.0.3", + "elysia": "^1.1.23", + "eslint-plugin-oxlint": "0.10.1", + "fastembed": "^1.14.1", + "get-port-please": "^3.1.2", + "html-to-text": "^9.0.5", + "ioredis": "5.4.1", + "is-docker": "^3.0.0", + "js-tiktoken": "^1.0.15", + "langchain": "0.3.3", + "lodash": "^4.17.21", + "logestic": "1.2.4", + "lowdb": "^7.0.1", + "mammoth": "^1.8.0", + "nodemon": "^3.1.7", + "ofetch": "^1.4.1", + "officeparser": "^4.2.0", + "pdf-parse": "^1.1.1", + "pkg-types": "1.2.1", + "scule": "^1.3.0", + "turbowatch": "^2.29.4", + "typeorm": "0.3.20", + "uncrypto": "^0.1.3", + "vue": "3.5.12", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.3" + }, + "devDependencies": { + "@antfu/eslint-config": "^3.8.0", + "@total-typescript/ts-reset": "^0.6.1", + "@types/bun": "^1.1.11", + "@types/lodash": "^4.17.12", + "@types/nodemon": "^1.19.6", + "@vitest/ui": "^2.1.3", + "changelogen": "^0.5.7", + "eslint": "^9.13.0", + "husky": "9.1.6", + "lint-staged": "15.2.10", + "oxlint": "0.10.1", + "typedoc": "0.26.10", + "typedoc-plugin-coverage": "3.3.0", + "typedoc-plugin-markdown": "4.2.9", + "typedoc-plugin-merge-modules": "6.0.2", + "typedoc-vitepress-theme": "1.0.2", + "typescript": "5.6.3", + "vite-tsconfig-paths": "^5.0.1", + "vitepress": "1.4.1", + "vitest": "^2.1.3" + }, + "overrides": { + "@langchain/core": "0.3.13" + }, + "patchedDependencies": { + "langchain@0.3.3": "patches/langchain@0.3.3.patch" + }, + "workspaces": [ + "src/plugins/*" + ], + "changelog": { + "types": { + "feat": { + "title": "🚀 Enhancements", + "semver": "patch" + }, + "refactor": { + "title": "💅 Refactors", + "semver": "minor" + } + } + } +} \ No newline at end of file diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7aff06eeaca4b0d476da5d0ab1be1bac3bbf8f34 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/src/assets/favicon.png b/src/assets/favicon.png deleted file mode 100644 index a4864f891b5967dc123ef3ff452017443166ae5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6077 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 diff --git a/globals.d.ts b/src/globals.d.ts similarity index 100% rename from globals.d.ts rename to src/globals.d.ts diff --git a/src/main.ts b/src/main.ts index ed9962d..b39d5aa 100644 --- a/src/main.ts +++ b/src/main.ts @@ -30,7 +30,7 @@ const app = new Elysia() searchHotKey: 'f', isEditable: false, showSidebar: true, - favicon: './assets/favicon.png', + favicon: './assets/favicon.ico', }, exclude: ['/docs', '/docs/json'], autoDarkMode: true, diff --git a/tsconfig.json b/tsconfig.json index 35e6c4b..e0819ca 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -54,11 +54,14 @@ "./src/**/*.ts", "./src/**/*", "./test/**/*.ts", + "src/globals.d.ts", "eslint.config.mjs", - "vitest.config.ts", - "globals.d.ts" + "vitest.config.ts" ], "exclude": [ "dist" - ] + ], + "vueCompilerOptions": { + "vitePressExtensions": ["./docs/**/*.md"] + } } diff --git a/typedoc.config.mjs b/typedoc.config.mjs new file mode 100644 index 0000000..71721d9 --- /dev/null +++ b/typedoc.config.mjs @@ -0,0 +1,43 @@ +/** @type {import('typedoc').TypeDocOptions & import('typedoc-plugin-merge-modules').Config & import('typedoc-plugin-markdown').PluginOptions} */ +export default { + entryPoints: ['./src'], + entryPointStrategy: 'expand', + tsconfig: 'tsconfig.json', + plugin: [ + 'typedoc-vitepress-theme', + 'typedoc-plugin-markdown', + 'typedoc-plugin-merge-modules', + 'typedoc-plugin-coverage', + ], + readme: 'none', + indexFormat: 'table', + parametersFormat: 'table', + propertiesFormat: 'table', + enumMembersFormat: 'table', + propertyMembersFormat: 'table', + classPropertiesFormat: 'table', + typeDeclarationFormat: 'table', + interfacePropertiesFormat: 'table', + githubPages: false, + useCodeBlocks: false, + disableSources: true, + excludeExternals: true, + excludePrivate: true, + categorizeByGroup: false, + hidePageHeader: true, + exclude: ['**/node_modules/**/*', '**/test/**/*', '**/*.txt'], + out: './docs/api', + docsRoot: './docs', + textContentMappings: { + 'title.indexPage': 'API Reference', + 'title.memberPage': '{name}', + 'breadcrumbs.home': 'Overview', + }, + coverageLabel: 'Coverage', + sidebar: { + autoConfiguration: true, + format: 'vitepress', + pretty: true, + collapsed: true, + }, +}