From 807603f3a272d7c1b87e936794a68d0a6f2876a2 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Mon, 13 Oct 2025 23:28:08 +0100 Subject: [PATCH] WIP --- apps/server/package.json | 7 +- .../server/src/database/types/db.interface.ts | 4 +- .../src/database/types/embeddings.types.ts | 6 +- .../server/src/database/types/entity.types.ts | 8 +- apps/server/src/ee | 2 +- .../environment/environment.service.ts | 51 +++- pnpm-lock.yaml | 280 +++++++++++++++++- 7 files changed, 323 insertions(+), 35 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 56adba66..e15d93f7 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -30,6 +30,10 @@ "test:e2e": "jest --config test/jest-e2e.json" }, "dependencies": { + "@ai-sdk/amazon-bedrock": "^3.0.35", + "@ai-sdk/azure": "^2.0.47", + "@ai-sdk/google": "^2.0.18", + "@ai-sdk/openai": "^2.0.46", "@aws-sdk/client-s3": "3.701.0", "@aws-sdk/lib-storage": "3.701.0", "@aws-sdk/s3-request-presigner": "3.701.0", @@ -56,6 +60,8 @@ "@react-email/components": "0.0.28", "@react-email/render": "1.0.2", "@socket.io/redis-adapter": "^8.3.0", + "ai": "^5.0.65", + "ai-sdk-ollama": "^0.12.0", "bcrypt": "^5.1.1", "bullmq": "^5.61.0", "cache-manager": "^6.4.3", @@ -75,7 +81,6 @@ "nanoid": "3.3.11", "nestjs-kysely": "^1.2.0", "nodemailer": "^7.0.3", - "openai": "^5.12.2", "openid-client": "^5.7.1", "otpauth": "^9.4.0", "p-limit": "^6.2.0", diff --git a/apps/server/src/database/types/db.interface.ts b/apps/server/src/database/types/db.interface.ts index bf9c4ea5..969e2059 100644 --- a/apps/server/src/database/types/db.interface.ts +++ b/apps/server/src/database/types/db.interface.ts @@ -20,7 +20,7 @@ import { WorkspaceInvitations, Workspaces, } from '@docmost/db/types/db'; -import { Embeddings } from '@docmost/db/types/embeddings.types'; +import { PageEmbeddings } from '@docmost/db/types/embeddings.types'; export interface DbInterface { attachments: Attachments; @@ -32,7 +32,7 @@ export interface DbInterface { fileTasks: FileTasks; groups: Groups; groupUsers: GroupUsers; - embeddings: Embeddings; + pageEmbeddings: PageEmbeddings; pageHistory: PageHistory; pages: Pages; shares: Shares; diff --git a/apps/server/src/database/types/embeddings.types.ts b/apps/server/src/database/types/embeddings.types.ts index 71be6197..2f4e1509 100644 --- a/apps/server/src/database/types/embeddings.types.ts +++ b/apps/server/src/database/types/embeddings.types.ts @@ -1,13 +1,15 @@ import { Json, Timestamp, Generated } from '@docmost/db/types/db'; // embeddings type -export interface Embeddings { +export interface PageEmbeddings { id: Generated; pageId: string; spaceId: string; + modelName: string; + modelDimensions: number; workspaceId: string; attachmentId: string; - embedding: number[] | Buffer | string; + embedding: number[]; chunkIndex: Generated; chunkStart: Generated; chunkLength: Generated; diff --git a/apps/server/src/database/types/entity.types.ts b/apps/server/src/database/types/entity.types.ts index db68a8d7..7f273dce 100644 --- a/apps/server/src/database/types/entity.types.ts +++ b/apps/server/src/database/types/entity.types.ts @@ -21,7 +21,7 @@ import { UserMfa as _UserMFA, ApiKeys, } from './db'; -import { Embeddings } from '@docmost/db/types/embeddings.types'; +import { PageEmbeddings } from '@docmost/db/types/embeddings.types'; // Workspace export type Workspace = Selectable; @@ -128,6 +128,6 @@ export type InsertableApiKey = Insertable; export type UpdatableApiKey = Updateable>; // Page Embedding -export type Embedding = Selectable; -export type InsertableEmbedding = Insertable; -export type UpdatableEmbedding = Updateable>; +export type PageEmbedding = Selectable; +export type InsertablePageEmbedding = Insertable; +export type UpdatablePageEmbedding = Updateable>; diff --git a/apps/server/src/ee b/apps/server/src/ee index 9525907c..d34e59d7 160000 --- a/apps/server/src/ee +++ b/apps/server/src/ee @@ -1 +1 @@ -Subproject commit 9525907c630b049d112288903c1c11f610f66853 +Subproject commit d34e59d708c1ca268a146c3f7cc35cc23fe6a617 diff --git a/apps/server/src/integrations/environment/environment.service.ts b/apps/server/src/integrations/environment/environment.service.ts index 4c917aac..01031a93 100644 --- a/apps/server/src/integrations/environment/environment.service.ts +++ b/apps/server/src/integrations/environment/environment.service.ts @@ -231,7 +231,31 @@ export class EnvironmentService { } getTypesenseLocale(): string { - return this.configService.get('TYPESENSE_LOCALE', 'en').toLowerCase(); + return this.configService + .get('TYPESENSE_LOCALE', 'en') + .toLowerCase(); + } + + getAiDriver(): string { + return this.configService.get('AI_DRIVER', 'openai'); + } + + getAiEmbeddingModel(): string { + return this.configService.get( + 'AI_EMBEDDING_MODEL', + 'text-embedding-3-small', + ); + } + + getAiCompletionModel(): string { + return this.configService.get('AI_COMPLETION_MODEL', 'gpt-4o-mini'); + } + + getAiEmbeddingDimension(): number { + return parseInt( + this.configService.get('AI_EMBEDDING_DIMENSION', '1536'), + 10, + ); } getOpenAiApiKey(): string { @@ -242,18 +266,27 @@ export class EnvironmentService { return this.configService.get('OPENAI_API_URL'); } - getOpenAiEmbeddingModel(): string { + getGoogleAiApiKey(): string { + return this.configService.get('GOOGLE_AI_API_KEY'); + } + + getOllamaApiUrl(): string { return this.configService.get( - 'OPENAI_EMBEDDING_MODEL', - 'text-embedding-3-small', + 'OLLAMA_API_URL', + 'http://localhost:11434', ); } - getOpenAiCompletionModel(): string { - return this.configService.get( - 'OPENAI_COMPLETION_MODEL', - 'gpt-4o-mini', - ); + getAwsAccessKeyId(): string { + return this.configService.get('AWS_ACCESS_KEY_ID'); + } + + getAwsSecretAccessKey(): string { + return this.configService.get('AWS_SECRET_ACCESS_KEY'); + } + + getAwsBedrockRegion(): string { + return this.configService.get('AWS_BEDROCK_REGION'); } isAIEnabled(): string { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f736dc9..8a67b375 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -429,6 +429,18 @@ importers: apps/server: dependencies: + '@ai-sdk/amazon-bedrock': + specifier: ^3.0.35 + version: 3.0.35(zod@3.25.56) + '@ai-sdk/azure': + specifier: ^2.0.47 + version: 2.0.47(zod@3.25.56) + '@ai-sdk/google': + specifier: ^2.0.18 + version: 2.0.18(zod@3.25.56) + '@ai-sdk/openai': + specifier: ^2.0.46 + version: 2.0.46(zod@3.25.56) '@aws-sdk/client-s3': specifier: 3.701.0 version: 3.701.0 @@ -452,7 +464,7 @@ importers: version: 8.2.0 '@langchain/textsplitters': specifier: ^0.1.0 - version: 0.1.0(@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56))) + version: 0.1.0(@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56))) '@nestjs-labs/nestjs-ioredis': specifier: ^11.0.4 version: 11.0.4(@nestjs/common@11.1.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.3)(ioredis@5.4.1) @@ -507,6 +519,12 @@ importers: '@socket.io/redis-adapter': specifier: ^8.3.0 version: 8.3.0(socket.io-adapter@2.5.4) + ai: + specifier: ^5.0.65 + version: 5.0.65(zod@3.25.56) + ai-sdk-ollama: + specifier: ^0.12.0 + version: 0.12.0(ai@5.0.65(zod@3.25.56))(zod@3.25.56) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -564,9 +582,6 @@ importers: nodemailer: specifier: ^7.0.3 version: 7.0.3 - openai: - specifier: ^5.12.2 - version: 5.12.2(ws@8.18.2)(zod@3.25.56) openid-client: specifier: ^5.7.1 version: 5.7.1 @@ -739,6 +754,58 @@ packages: '@adobe/css-tools@4.3.3': resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + '@ai-sdk/amazon-bedrock@3.0.35': + resolution: {integrity: sha512-p3MjsZ+CvFgdzV2gf5J1pn5EzC/GVI8sHgL26f9RwAbUSyytPVnGevqcqmFXkWXZ7BtNgkB8M+Gd+1hH2hg5IA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/anthropic@2.0.27': + resolution: {integrity: sha512-tGXdWNs+dMZLsn6yVroz9PqPZbCY6kqwGl/xxFVxJWDrTPGj3+1t1vE7pzTZ3vDOiG05iVC7wzlXwV2Or650YA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/azure@2.0.47': + resolution: {integrity: sha512-rPvjnBWVTVRCDs47qfBWxXxx4i4h7itemyKux21qibB7y24rubqmZGx9lYcI5pyBL057uROhBa9Y5VVHf/ESYw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/gateway@1.0.36': + resolution: {integrity: sha512-G/CLHzyOy9mhbimSBmV+o59M7ao/NfRFrrhC+eHGp+0qT0diP3IDW5VdkPHKFmDp4Iq7wb4/yOCe7Yk2fQtSrg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@2.0.18': + resolution: {integrity: sha512-ycGAqouueHjU0hB6JHYmUhXYCnN67PqI8+9jCv13MbuE0g+b9w78HiPuab5ResakY0cq3ynFDvbiu8jAGo1RZQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@2.0.46': + resolution: {integrity: sha512-3FHZdiTLbjnHw0rbu1yOPW8FruHrzN6SlJYsaLSQgbxYfE5y+60Nj4Xp8/k7rtD3FmrjkKcp/XTMSbAJWfoJig==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@3.0.11': + resolution: {integrity: sha512-4hgHj89VqyOHzGaV85TkcgvO8WjecVF35TOUVg+C56vnzpWSgdIZu/ZWZNdZ6BTrv8y0N1toBWW7XcWiRRicLg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@3.0.12': + resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider@2.0.0': + resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} + engines: {node: '>=18'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -3783,6 +3850,10 @@ packages: '@smithy/eventstream-codec@3.1.10': resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==} + '@smithy/eventstream-codec@4.2.0': + resolution: {integrity: sha512-XE7CtKfyxYiNZ5vz7OvyTf1osrdbJfmUy+rbh+NLQmZumMGvY0mT0Cq1qKSfhrvLtRYzMsOBuRpi10dyI0EBPg==} + engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-browser@3.0.14': resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==} engines: {node: '>=16.0.0'} @@ -3824,6 +3895,10 @@ packages: resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} engines: {node: '>=16.0.0'} + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} + '@smithy/md5-js@3.0.11': resolution: {integrity: sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==} @@ -3895,6 +3970,10 @@ packages: resolution: {integrity: sha512-+1iaIQHthDh9yaLhRzaoQxRk+l9xlk+JjMFxGRhNLz+m9vKOkjNeU8QuB4w3xvzHyVR/BVlp/4AXDHjoRIkfgQ==} engines: {node: '>=18.0.0'} + '@smithy/types@4.6.0': + resolution: {integrity: sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@3.0.11': resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==} @@ -3917,6 +3996,10 @@ packages: resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} engines: {node: '>=16.0.0'} + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@3.0.0': resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} engines: {node: '>=16.0.0'} @@ -3937,6 +4020,10 @@ packages: resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + '@smithy/util-middleware@3.0.11': resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==} engines: {node: '>=16.0.0'} @@ -3961,6 +4048,10 @@ packages: resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} engines: {node: '>=16.0.0'} + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + '@smithy/util-waiter@3.2.0': resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==} engines: {node: '>=16.0.0'} @@ -3974,6 +4065,9 @@ packages: peerDependencies: socket.io-adapter: ^2.5.4 + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@swc/core-darwin-arm64@1.5.25': resolution: {integrity: sha512-YbD0SBgVJS2DM0vwJTU5m7+wOyCjHPBDMf3nCBJQzFZzOLzK11eRW7SzU2jhJHr9HI9sKcNFfN4lIC2Sj+4inA==} engines: {node: '>=10'} @@ -4836,6 +4930,10 @@ packages: '@ucast/mongo@2.4.3': resolution: {integrity: sha512-XcI8LclrHWP83H+7H2anGCEeDq0n+12FU2mXCTz6/Tva9/9ddK/iacvvhCyW6cijAAOILmt0tWplRyRhVyZLsA==} + '@vercel/oidc@3.0.2': + resolution: {integrity: sha512-JekxQ0RApo4gS4un/iMGsIL1/k4KUBe3HmnGcDvzHuFBdQdudEJgTqcsJC7y6Ul4Yw5CeykgvQbX2XeEJd0+DA==} + engines: {node: '>= 20'} + '@vitejs/plugin-react@4.4.1': resolution: {integrity: sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4966,6 +5064,18 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + ai-sdk-ollama@0.12.0: + resolution: {integrity: sha512-EEKIfIpkyAavrlEKlZ7nZCxTUPq4yBThBLLU3kTD4l7htpdqMjhOEyqm5DlKdQvLEW0MgCMsptw7yXbevRSfIQ==} + engines: {node: '>=22'} + peerDependencies: + ai: ^5.0.60 + + ai@5.0.65: + resolution: {integrity: sha512-orwsNKAoAmTwHkoy7TG/7nc65SD3hy7k+x8xVHIzfw8CibZm/U2cdbR1ZUex6H2Rpf+uoZpvyQ05FWBJNw7V8A==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -5125,6 +5235,9 @@ packages: avvio@9.1.0: resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -6277,6 +6390,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -7233,6 +7350,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -7997,6 +8117,9 @@ packages: resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} engines: {node: ^10.13.0 || >=12.0.0} + ollama@0.6.0: + resolution: {integrity: sha512-FHjdU2Ok5x2HZsxPui/MBJZ5J+HzmxoWYa/p9wk736eT+uAhS8nvIICar5YgwlG5MFNjDR6UA5F3RSKq+JseOA==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -8015,12 +8138,12 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@5.12.2: - resolution: {integrity: sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==} + openai@6.2.0: + resolution: {integrity: sha512-qqjzHls7F5xkXNGy9P1Ei1rorI5LWupUUFWP66zPU8FlZbiITX8SFcHMKNZg/NATJ0LpIZcMUFxSwQmdeQPwSw==} hasBin: true peerDependencies: ws: ^8.18.0 - zod: ^3.23.8 + zod: ^3.25 || ^4.0 peerDependenciesMeta: ws: optional: true @@ -9870,6 +9993,9 @@ packages: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -10142,6 +10268,66 @@ snapshots: '@adobe/css-tools@4.3.3': {} + '@ai-sdk/amazon-bedrock@3.0.35(zod@3.25.56)': + dependencies: + '@ai-sdk/anthropic': 2.0.27(zod@3.25.56) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@3.25.56) + '@smithy/eventstream-codec': 4.2.0 + '@smithy/util-utf8': 4.2.0 + aws4fetch: 1.0.20 + zod: 3.25.56 + + '@ai-sdk/anthropic@2.0.27(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@3.25.56) + zod: 3.25.56 + + '@ai-sdk/azure@2.0.47(zod@3.25.56)': + dependencies: + '@ai-sdk/openai': 2.0.46(zod@3.25.56) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + zod: 3.25.56 + + '@ai-sdk/gateway@1.0.36(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + '@vercel/oidc': 3.0.2 + zod: 3.25.56 + + '@ai-sdk/google@2.0.18(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + zod: 3.25.56 + + '@ai-sdk/openai@2.0.46(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + zod: 3.25.56 + + '@ai-sdk/provider-utils@3.0.11(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.56 + + '@ai-sdk/provider-utils@3.0.12(zod@3.25.56)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.56 + + '@ai-sdk/provider@2.0.0': + dependencies: + json-schema: 0.4.0 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -12870,14 +13056,14 @@ snapshots: dependencies: buffer: 6.0.3 - '@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56))': + '@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.61(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56)) + langsmith: 0.3.61(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -12890,9 +13076,9 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56)))': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.72(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56)))': dependencies: - '@langchain/core': 0.3.72(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56)) + '@langchain/core': 0.3.72(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56)) js-tiktoken: 1.0.21 '@lifeomic/attempt@3.0.3': {} @@ -13407,8 +13593,7 @@ snapshots: '@one-ini/wasm@0.1.1': {} - '@opentelemetry/api@1.9.0': - optional: true + '@opentelemetry/api@1.9.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -13898,6 +14083,13 @@ snapshots: '@smithy/util-hex-encoding': 3.0.0 tslib: 2.8.1 + '@smithy/eventstream-codec@4.2.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.6.0 + '@smithy/util-hex-encoding': 4.2.0 + tslib: 2.8.1 + '@smithy/eventstream-serde-browser@3.0.14': dependencies: '@smithy/eventstream-serde-universal': 3.0.13 @@ -13962,6 +14154,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/md5-js@3.0.11': dependencies: '@smithy/types': 3.7.2 @@ -14081,6 +14277,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/types@4.6.0': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@3.0.11': dependencies: '@smithy/querystring-parser': 3.0.11 @@ -14111,6 +14311,11 @@ snapshots: '@smithy/is-array-buffer': 3.0.0 tslib: 2.8.1 + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 + '@smithy/util-config-provider@3.0.0': dependencies: tslib: 2.8.1 @@ -14143,6 +14348,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/util-hex-encoding@4.2.0': + dependencies: + tslib: 2.8.1 + '@smithy/util-middleware@3.0.11': dependencies: '@smithy/types': 3.7.2 @@ -14179,6 +14388,11 @@ snapshots: '@smithy/util-buffer-from': 3.0.0 tslib: 2.8.1 + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + '@smithy/util-waiter@3.2.0': dependencies: '@smithy/abort-controller': 3.1.9 @@ -14196,6 +14410,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@standard-schema/spec@1.0.0': {} + '@swc/core-darwin-arm64@1.5.25': optional: true @@ -15169,6 +15385,8 @@ snapshots: dependencies: '@ucast/core': 1.10.2 + '@vercel/oidc@3.0.2': {} + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.10.0)(jiti@1.21.0)(less@4.2.0)(sass@1.51.0)(sugarss@4.0.1(postcss@8.4.49))(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 @@ -15316,6 +15534,23 @@ snapshots: transitivePeerDependencies: - supports-color + ai-sdk-ollama@0.12.0(ai@5.0.65(zod@3.25.56))(zod@3.25.56): + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + ai: 5.0.65(zod@3.25.56) + ollama: 0.6.0 + transitivePeerDependencies: + - zod + + ai@5.0.65(zod@3.25.56): + dependencies: + '@ai-sdk/gateway': 1.0.36(zod@3.25.56) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.11(zod@3.25.56) + '@opentelemetry/api': 1.9.0 + zod: 3.25.56 + ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: ajv: 8.12.0 @@ -15489,6 +15724,8 @@ snapshots: '@fastify/error': 4.0.0 fastq: 1.17.1 + aws4fetch@1.0.20: {} + axios@1.9.0: dependencies: follow-redirects: 1.15.6 @@ -16916,6 +17153,8 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.6: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -18116,6 +18355,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} @@ -18220,7 +18461,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 - langsmith@0.3.61(@opentelemetry/api@1.9.0)(openai@5.12.2(ws@8.18.2)(zod@3.25.56)): + langsmith@0.3.61(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.18.2)(zod@3.25.56)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -18231,7 +18472,7 @@ snapshots: uuid: 10.0.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - openai: 5.12.2(ws@8.18.2)(zod@3.25.56) + openai: 6.2.0(ws@8.18.2)(zod@3.25.56) layout-base@1.0.2: {} @@ -18991,6 +19232,10 @@ snapshots: oidc-token-hash@5.0.3: {} + ollama@0.6.0: + dependencies: + whatwg-fetch: 3.6.20 + on-exit-leak-free@2.1.2: {} once@1.4.0: @@ -19009,10 +19254,11 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@5.12.2(ws@8.18.2)(zod@3.25.56): + openai@6.2.0(ws@8.18.2)(zod@3.25.56): optionalDependencies: ws: 8.18.2 zod: 3.25.56 + optional: true openid-client@5.7.1: dependencies: @@ -20980,6 +21226,8 @@ snapshots: dependencies: iconv-lite: 0.6.3 + whatwg-fetch@3.6.20: {} + whatwg-mimetype@3.0.0: {} whatwg-mimetype@4.0.0: {}