diff --git a/packages/aiCore/patches/@ai-sdk__google-vertex.patch b/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch similarity index 100% rename from packages/aiCore/patches/@ai-sdk__google-vertex.patch rename to .yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch diff --git a/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch b/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch new file mode 100644 index 0000000000..aaa70c733e --- /dev/null +++ b/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch @@ -0,0 +1,94 @@ +diff --git a/dist/index.js b/dist/index.js +index 287fe679c32d30a9745270a00589eb90de8da786..5892d4526529e89fca868251ee0c1b081748c358 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -321,8 +321,8 @@ var OpenAICompatibleChatLanguageModel = class { + } : { type: "json_object" } : void 0, + stop: stopSequences, + seed, +- ...providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName], + reasoning_effort: (_d = (_b = providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName]) == null ? void 0 : _b.reasoningEffort) != null ? _d : (_c = providerMetadata == null ? void 0 : providerMetadata["openai-compatible"]) == null ? void 0 : _c.reasoningEffort, ++ ...providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName], + // messages: + messages: convertToOpenAICompatibleChatMessages(prompt) + }; +@@ -510,7 +510,7 @@ var OpenAICompatibleChatLanguageModel = class { + ...args, + stream: true, + // only include stream_options when in strict compatibility mode: +- stream_options: this.config.includeUsage ? { include_usage: true } : void 0 ++ ...(this.config.includeUsage ? { stream_options: { include_usage: true } } : {}) + }; + const metadataExtractor = (_a = this.config.metadataExtractor) == null ? void 0 : _a.createStreamExtractor(); + const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({ +@@ -1324,10 +1324,11 @@ function createOpenAICompatible(options) { + headers: getHeaders, + fetch: options.fetch + }); +- const createLanguageModel = (modelId, settings = {}) => createChatModel(modelId, settings); +- const createChatModel = (modelId, settings = {}) => new OpenAICompatibleChatLanguageModel(modelId, settings, { ++ const createLanguageModel = (modelId, settings = {}, config = {}) => createChatModel(modelId, settings, config); ++ const createChatModel = (modelId, settings = {}, config = {}) => new OpenAICompatibleChatLanguageModel(modelId, settings, { + ...getCommonModelConfig("chat"), +- defaultObjectGenerationMode: "tool" ++ defaultObjectGenerationMode: "tool", ++ ...config + }); + const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel( + modelId, +@@ -1344,7 +1345,7 @@ function createOpenAICompatible(options) { + settings, + getCommonModelConfig("image") + ); +- const provider = (modelId, settings) => createLanguageModel(modelId, settings); ++ const provider = (modelId, settings, config) => createLanguageModel(modelId, settings, config); + provider.languageModel = createLanguageModel; + provider.chatModel = createChatModel; + provider.completionModel = createCompletionModel; +diff --git a/dist/index.mjs b/dist/index.mjs +index 6446ad8d3a96c798bea3a17c1802810139d24143..7bb81eb126992cc64453134cc2581c2314c022c1 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -305,8 +305,8 @@ var OpenAICompatibleChatLanguageModel = class { + } : { type: "json_object" } : void 0, + stop: stopSequences, + seed, +- ...providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName], + reasoning_effort: (_d = (_b = providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName]) == null ? void 0 : _b.reasoningEffort) != null ? _d : (_c = providerMetadata == null ? void 0 : providerMetadata["openai-compatible"]) == null ? void 0 : _c.reasoningEffort, ++ ...providerMetadata == null ? void 0 : providerMetadata[this.providerOptionsName], + // messages: + messages: convertToOpenAICompatibleChatMessages(prompt) + }; +@@ -494,7 +494,7 @@ var OpenAICompatibleChatLanguageModel = class { + ...args, + stream: true, + // only include stream_options when in strict compatibility mode: +- stream_options: this.config.includeUsage ? { include_usage: true } : void 0 ++ ...(this.config.includeUsage ? { stream_options: { include_usage: true } } : {}) + }; + const metadataExtractor = (_a = this.config.metadataExtractor) == null ? void 0 : _a.createStreamExtractor(); + const { responseHeaders, value: response } = await postJsonToApi({ +@@ -1331,10 +1331,11 @@ function createOpenAICompatible(options) { + headers: getHeaders, + fetch: options.fetch + }); +- const createLanguageModel = (modelId, settings = {}) => createChatModel(modelId, settings); +- const createChatModel = (modelId, settings = {}) => new OpenAICompatibleChatLanguageModel(modelId, settings, { ++ const createLanguageModel = (modelId, settings = {}, config = {}) => createChatModel(modelId, settings, config); ++ const createChatModel = (modelId, settings = {}, config = {}) => new OpenAICompatibleChatLanguageModel(modelId, settings, { + ...getCommonModelConfig("chat"), +- defaultObjectGenerationMode: "tool" ++ defaultObjectGenerationMode: "tool", ++ ...config + }); + const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel( + modelId, +@@ -1351,7 +1352,7 @@ function createOpenAICompatible(options) { + settings, + getCommonModelConfig("image") + ); +- const provider = (modelId, settings) => createLanguageModel(modelId, settings); ++ const provider = (modelId, settings, config) => createLanguageModel(modelId, settings, config); + provider.languageModel = createLanguageModel; + provider.chatModel = createChatModel; + provider.completionModel = createCompletionModel; diff --git a/package.json b/package.json index 3fb89dcdba..329a527914 100644 --- a/package.json +++ b/package.json @@ -231,7 +231,9 @@ "app-builder-lib@npm:26.0.13": "patch:app-builder-lib@npm%3A26.0.13#~/.yarn/patches/app-builder-lib-npm-26.0.13-a064c9e1d0.patch", "openai@npm:^4.87.3": "patch:openai@npm%3A5.1.0#~/.yarn/patches/openai-npm-5.1.0-0e7b3ccb07.patch", "app-builder-lib@npm:26.0.15": "patch:app-builder-lib@npm%3A26.0.15#~/.yarn/patches/app-builder-lib-npm-26.0.15-360e5b0476.patch", - "@langchain/core@npm:^0.3.26": "patch:@langchain/core@npm%3A0.3.44#~/.yarn/patches/@langchain-core-npm-0.3.44-41d5c3cb0a.patch" + "@langchain/core@npm:^0.3.26": "patch:@langchain/core@npm%3A0.3.44#~/.yarn/patches/@langchain-core-npm-0.3.44-41d5c3cb0a.patch", + "@ai-sdk/openai-compatible@npm:0.2.14": "patch:@ai-sdk/openai-compatible@npm%3A0.2.14#~/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch", + "@ai-sdk/google-vertex@npm:2.2.24": "patch:@ai-sdk/google-vertex@npm%3A2.2.24#~/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch" }, "packageManager": "yarn@4.9.1", "lint-staged": { diff --git a/packages/aiCore/package.json b/packages/aiCore/package.json index df031597a0..74485846fd 100644 --- a/packages/aiCore/package.json +++ b/packages/aiCore/package.json @@ -5,7 +5,7 @@ "main": "src/index.ts", "types": "src/index.ts", "scripts": { - "build": "tsc", + "build": "tsdown", "dev": "tsc -w", "clean": "rm -rf dist" }, @@ -31,12 +31,13 @@ "@ai-sdk/fal": "^0.1.12", "@ai-sdk/fireworks": "^0.2.14", "@ai-sdk/google": "^1.2.19", - "@ai-sdk/google-vertex": "^2.2.24", + "@ai-sdk/google-vertex": "patch:@ai-sdk/google-vertex@npm%3A2.2.24#~/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch", "@ai-sdk/groq": "^1.2.9", "@ai-sdk/mistral": "^1.2.8", "@ai-sdk/openai": "^1.3.22", - "@ai-sdk/openai-compatible": "^0.2.14", + "@ai-sdk/openai-compatible": "patch:@ai-sdk/openai-compatible@npm%3A0.2.14#~/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch", "@ai-sdk/perplexity": "^1.1.9", + "@ai-sdk/provider": "^1.1.3", "@ai-sdk/replicate": "^0.2.8", "@ai-sdk/togetherai": "^0.2.14", "@ai-sdk/vercel": "^0.0.1", @@ -108,6 +109,7 @@ } }, "devDependencies": { + "tsdown": "^0.12.9", "typescript": "^5.0.0" }, "files": [ diff --git a/packages/aiCore/pnpm-lock.yaml b/packages/aiCore/pnpm-lock.yaml deleted file mode 100644 index 929b55d666..0000000000 --- a/packages/aiCore/pnpm-lock.yaml +++ /dev/null @@ -1,1027 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -patchedDependencies: - '@ai-sdk/google-vertex': - hash: b7c4a8a2274e90367ea6efb1e3056a9c6c83cb14329086354e8d20db1139e2f1 - path: patches/@ai-sdk__google-vertex.patch - -importers: - - .: - dependencies: - '@ai-sdk/amazon-bedrock': - specifier: ^2.2.10 - version: 2.2.10(zod@3.25.67) - '@ai-sdk/anthropic': - specifier: ^1.2.12 - version: 1.2.12(zod@3.25.67) - '@ai-sdk/azure': - specifier: ^1.3.23 - version: 1.3.23(zod@3.25.67) - '@ai-sdk/cerebras': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.67) - '@ai-sdk/cohere': - specifier: ^1.2.10 - version: 1.2.10(zod@3.25.67) - '@ai-sdk/deepinfra': - specifier: ^0.2.15 - version: 0.2.15(zod@3.25.67) - '@ai-sdk/deepseek': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.67) - '@ai-sdk/fal': - specifier: ^0.1.12 - version: 0.1.12(zod@3.25.67) - '@ai-sdk/fireworks': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.67) - '@ai-sdk/google': - specifier: ^1.2.19 - version: 1.2.19(zod@3.25.67) - '@ai-sdk/google-vertex': - specifier: ^2.2.24 - version: 2.2.24(patch_hash=b7c4a8a2274e90367ea6efb1e3056a9c6c83cb14329086354e8d20db1139e2f1)(zod@3.25.67) - '@ai-sdk/groq': - specifier: ^1.2.9 - version: 1.2.9(zod@3.25.67) - '@ai-sdk/mistral': - specifier: ^1.2.8 - version: 1.2.8(zod@3.25.67) - '@ai-sdk/openai': - specifier: ^1.3.22 - version: 1.3.22(zod@3.25.67) - '@ai-sdk/openai-compatible': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.67) - '@ai-sdk/perplexity': - specifier: ^1.1.9 - version: 1.1.9(zod@3.25.67) - '@ai-sdk/replicate': - specifier: ^0.2.8 - version: 0.2.8(zod@3.25.67) - '@ai-sdk/togetherai': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.67) - '@ai-sdk/vercel': - specifier: ^0.0.1 - version: 0.0.1(zod@3.25.67) - '@ai-sdk/xai': - specifier: ^1.2.16 - version: 1.2.16(zod@3.25.67) - '@openrouter/ai-sdk-provider': - specifier: ^0.1.0 - version: 0.1.0(zod@3.25.67) - ai: - specifier: ^4.3.16 - version: 4.3.16(react@19.1.0)(zod@3.25.67) - anthropic-vertex-ai: - specifier: ^1.0.2 - version: 1.0.2(zod@3.25.67) - ollama-ai-provider: - specifier: ^1.2.0 - version: 1.2.0(zod@3.25.67) - qwen-ai-provider: - specifier: ^0.1.0 - version: 0.1.0(zod@3.25.67) - zhipu-ai-provider: - specifier: ^0.1.1 - version: 0.1.1(zod@3.25.67) - devDependencies: - typescript: - specifier: ^5.0.0 - version: 5.8.3 - -packages: - - '@ai-sdk/amazon-bedrock@2.2.10': - resolution: {integrity: sha512-icLGO7Q0NinnHIPgT+y1QjHVwH4HwV+brWbvM+FfCG2Afpa89PyKa3Ret91kGjZpBgM/xnj1B7K5eM+rRlsXQA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/anthropic@1.2.12': - resolution: {integrity: sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/azure@1.3.23': - resolution: {integrity: sha512-vpsaPtU24RBVk/IMM5UylR/N4RtAuL2NZLWc7LJ3tvMTHu6pI46a7w+1qIwR3F6yO9ehWR8qvfLaBefJNFxaVw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/cerebras@0.2.14': - resolution: {integrity: sha512-BIDf9hfgAEEu3xhNUyBWvAzeSgt7A7cSMj7UcKS4jhBDybRoKjoEGWHC7916j8LS/5Hkdmo6jwaxWxn/gZJYbQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/cohere@1.2.10': - resolution: {integrity: sha512-OaUwd5xj4bxSO8hdCbX1a5uUlTouU8FcodSuRON6xDSsmjZIvQL4O2G1XzcidxiQVL8JQuA+M0tHZOwGxSL96A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/deepinfra@0.2.15': - resolution: {integrity: sha512-oRWZydmKg0G6KZTh4mOi0Kb3rW4v6hMBv/dGUH5xfo/nNyV6gAwgtoXtZ96KRbkjqCgVQgebfN1OCba1lflP0A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/deepseek@0.2.14': - resolution: {integrity: sha512-TISD1FzBWuQkHEHoVustoJILV33ZNgfYxeTkq1xU2vHEZuWTGZV7/IlXixyFsfqDCdVgrbLeIABk5FuCw7niLg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/fal@0.1.12': - resolution: {integrity: sha512-Z0pUUR3qwLTj4HXgGJSes5fwjUbSowsMiKbpYKGl6V51sQeUk2EjZctdN4+a+GBuDNCP6Y32Wi8ejM54OMee+w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/fireworks@0.2.14': - resolution: {integrity: sha512-0xlh95Y+L9ccc7hwrjdFKi4u8dirx24FLc70ySXA53u1zZP6R1W35TBYGaLzFpTVhhBhDTOca0mE+/EjJihcxw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/google-vertex@2.2.24': - resolution: {integrity: sha512-zi1ZN6jQEBRke/WMbZv0YkeqQ3nOs8ihxjVh/8z1tUn+S1xgRaYXf4+r6+Izh2YqVHIMNwjhUYryQRBGq20cgQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/google@1.2.19': - resolution: {integrity: sha512-Xgl6eftIRQ4srUdCzxM112JuewVMij5q4JLcNmHcB68Bxn9dpr3MVUSPlJwmameuiQuISIA8lMB+iRiRbFsaqA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/groq@1.2.9': - resolution: {integrity: sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/mistral@1.2.8': - resolution: {integrity: sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai-compatible@0.2.14': - resolution: {integrity: sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai@1.3.22': - resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/perplexity@1.1.9': - resolution: {integrity: sha512-Ytolh/v2XupXbTvjE18EFBrHLoNMH0Ueji3lfSPhCoRUfkwrgZ2D9jlNxvCNCCRiGJG5kfinSHvzrH5vGDklYA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/provider-utils@1.0.20': - resolution: {integrity: sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/provider-utils@2.1.10': - resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/provider-utils@2.1.5': - resolution: {integrity: sha512-PcNR7E4ovZGV/J47gUqaFlvzorgca6uUfN5WzfXJSFWeOeLunN+oxRVwgUOwj0zbmO0yGQTHQD+FHVw8s3Rz8w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/provider-utils@2.2.8': - resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/provider@0.0.24': - resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==} - engines: {node: '>=18'} - - '@ai-sdk/provider@1.0.6': - resolution: {integrity: sha512-hwj/gFNxpDgEfTaYzCYoslmw01IY9kWLKl/wf8xuPvHtQIzlfXWmmUwc8PnCwxyt8cKzIuV0dfUghCf68HQ0SA==} - engines: {node: '>=18'} - - '@ai-sdk/provider@1.0.9': - resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==} - engines: {node: '>=18'} - - '@ai-sdk/provider@1.1.3': - resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} - engines: {node: '>=18'} - - '@ai-sdk/react@1.2.12': - resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/replicate@0.2.8': - resolution: {integrity: sha512-l9t4+RzbAn8osstkbWs6l++Nava+4LO4dsaddnE0GQM5E0BEIgMTJ14hoyfE02Ep0rJZ0M2HlXGqv5heW47P8A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/togetherai@0.2.14': - resolution: {integrity: sha512-tdCe5kawsQrnMZB8aF1iL1P3+NfrPwILH9UudAZ5cNVY5dTFl+mXk3R37YJS+mkWeAoedr8Cb7mAuGxR47bsFw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/ui-utils@1.2.11': - resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/vercel@0.0.1': - resolution: {integrity: sha512-hHDZotTYVpmNyiSiWySSv/XbSjkL9exmKkBR7FwR1zp41ml+LV6WBlfwatBWZ5m22hSSDrztx4abvvd/MFF0yg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/xai@1.2.16': - resolution: {integrity: sha512-UOZT8td9PWwMi2dF9a0U44t/Oltmf6QmIJdSvrOcLG4mvpRc1UJn6YJaR0HtXs3YnW6SvY1zRdIDrW4GFpv4NA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/types@3.821.0': - resolution: {integrity: sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA==} - engines: {node: '>=18.0.0'} - - '@openrouter/ai-sdk-provider@0.1.0': - resolution: {integrity: sha512-kETuMSFu31Z9ND1lEl8cmXy+csCZBopKEpe33Pxz/B6J/AYOlGxvmdPKWlMqwkvE1dISuPMh9IL97Q6dof2Liw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@smithy/eventstream-codec@4.0.4': - resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.3.1': - resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} - - '@types/diff-match-patch@1.0.36': - resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - - ai@4.3.16: - resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - react: - optional: true - - anthropic-vertex-ai@1.0.2: - resolution: {integrity: sha512-4YuK04KMmBGkx6fi2UjnHkE4mhaIov7tnT5La9+DMn/gw/NSOLZoWNUx+13VY3mkcaseKBMEn1DBzdXXJFIP7A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - aws4fetch@1.0.20: - resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - bignumber.js@9.3.0: - resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==} - - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - diff-match-patch@1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - eventsource-parser@1.1.2: - resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==} - engines: {node: '>=14.18'} - - eventsource-parser@3.0.2: - resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} - engines: {node: '>=18.0.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - jsondiffpatch@0.6.0: - resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - ollama-ai-provider@1.2.0: - resolution: {integrity: sha512-jTNFruwe3O/ruJeppI/quoOUxG7NA6blG3ZyQj3lei4+NnJo7bi3eIRWqlVpRlu/mbzbFXeJSBuYQWF6pzGKww==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - - partial-json@0.1.7: - resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} - - qwen-ai-provider@0.1.0: - resolution: {integrity: sha512-ylzb71U0WreJPyNOHJTwXvE9+jVSsFhnam5aDfB7hBSUuEajYFIGcvhhuQUgUE43OIpxINMgGHKSicpwJ8x/XQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.24.1 - - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} - engines: {node: '>=0.10.0'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - - swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - zhipu-ai-provider@0.1.1: - resolution: {integrity: sha512-cVwvvGtPiQqgsGdBzHCHC5oQ7z6slEQTbXJ5+42gQGX4N5uRUvYj+YYLp7Cr1HPQGF3zR2p8vNbT5etPHD4NbA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.25.67: - resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} - -snapshots: - - '@ai-sdk/amazon-bedrock@2.2.10(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - '@smithy/eventstream-codec': 4.0.4 - '@smithy/util-utf8': 4.0.0 - aws4fetch: 1.0.20 - zod: 3.25.67 - - '@ai-sdk/anthropic@1.2.12(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/azure@1.3.23(zod@3.25.67)': - dependencies: - '@ai-sdk/openai': 1.3.22(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/cerebras@0.2.14(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/cohere@1.2.10(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/deepinfra@0.2.15(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/deepseek@0.2.14(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/fal@0.1.12(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/fireworks@0.2.14(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/google-vertex@2.2.24(patch_hash=b7c4a8a2274e90367ea6efb1e3056a9c6c83cb14329086354e8d20db1139e2f1)(zod@3.25.67)': - dependencies: - '@ai-sdk/anthropic': 1.2.12(zod@3.25.67) - '@ai-sdk/google': 1.2.19(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - google-auth-library: 9.15.1 - zod: 3.25.67 - transitivePeerDependencies: - - encoding - - supports-color - - '@ai-sdk/google@1.2.19(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/groq@1.2.9(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/mistral@1.2.8(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/openai-compatible@0.2.14(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/openai@1.3.22(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/perplexity@1.1.9(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/provider-utils@1.0.20(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 0.0.24 - eventsource-parser: 1.1.2 - nanoid: 3.3.6 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.25.67 - - '@ai-sdk/provider-utils@2.1.10(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.0.9 - eventsource-parser: 3.0.2 - nanoid: 3.3.11 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.25.67 - - '@ai-sdk/provider-utils@2.1.5(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.0.6 - eventsource-parser: 3.0.2 - nanoid: 3.3.11 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.25.67 - - '@ai-sdk/provider-utils@2.2.8(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - nanoid: 3.3.11 - secure-json-parse: 2.7.0 - zod: 3.25.67 - - '@ai-sdk/provider@0.0.24': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@1.0.6': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@1.0.9': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@1.1.3': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/react@1.2.12(react@19.1.0)(zod@3.25.67)': - dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67) - react: 19.1.0 - swr: 2.3.3(react@19.1.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.25.67 - - '@ai-sdk/replicate@0.2.8(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/togetherai@0.2.14(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/ui-utils@1.2.11(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) - - '@ai-sdk/vercel@0.0.1(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@ai-sdk/xai@1.2.16(zod@3.25.67)': - dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.67) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.821.0 - tslib: 2.8.1 - - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.821.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/types@3.821.0': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@openrouter/ai-sdk-provider@0.1.0(zod@3.25.67)': - dependencies: - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.5(zod@3.25.67) - zod: 3.25.67 - - '@opentelemetry/api@1.9.0': {} - - '@smithy/eventstream-codec@4.0.4': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.3.1 - '@smithy/util-hex-encoding': 4.0.0 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/types@4.3.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.0.0': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-utf8@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - tslib: 2.8.1 - - '@types/diff-match-patch@1.0.36': {} - - agent-base@7.1.3: {} - - ai@4.3.16(react@19.1.0)(zod@3.25.67): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - '@ai-sdk/react': 1.2.12(react@19.1.0)(zod@3.25.67) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - zod: 3.25.67 - optionalDependencies: - react: 19.1.0 - - anthropic-vertex-ai@1.0.2(zod@3.25.67): - dependencies: - '@ai-sdk/provider': 0.0.24 - '@ai-sdk/provider-utils': 1.0.20(zod@3.25.67) - google-auth-library: 9.15.1 - zod: 3.25.67 - transitivePeerDependencies: - - encoding - - supports-color - - aws4fetch@1.0.20: {} - - base64-js@1.5.1: {} - - bignumber.js@9.3.0: {} - - buffer-equal-constant-time@1.0.1: {} - - chalk@5.4.1: {} - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - dequal@2.0.3: {} - - diff-match-patch@1.0.5: {} - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - eventsource-parser@1.1.2: {} - - eventsource-parser@3.0.2: {} - - extend@3.0.2: {} - - gaxios@6.7.1: - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@6.1.1: - dependencies: - gaxios: 6.7.1 - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-auth-library@9.15.1: - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1 - gcp-metadata: 6.1.1 - gtoken: 7.1.0 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - - gtoken@7.1.0: - dependencies: - gaxios: 6.7.1 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - is-stream@2.0.1: {} - - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.0 - - json-schema@0.4.0: {} - - jsondiffpatch@0.6.0: - dependencies: - '@types/diff-match-patch': 1.0.36 - chalk: 5.4.1 - diff-match-patch: 1.0.5 - - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - - ms@2.1.3: {} - - nanoid@3.3.11: {} - - nanoid@3.3.6: {} - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - ollama-ai-provider@1.2.0(zod@3.25.67): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - partial-json: 0.1.7 - optionalDependencies: - zod: 3.25.67 - - partial-json@0.1.7: {} - - qwen-ai-provider@0.1.0(zod@3.25.67): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) - zod: 3.25.67 - - react@19.1.0: {} - - safe-buffer@5.2.1: {} - - secure-json-parse@2.7.0: {} - - swr@2.3.3(react@19.1.0): - dependencies: - dequal: 2.0.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) - - throttleit@2.1.0: {} - - tr46@0.0.3: {} - - tslib@2.8.1: {} - - typescript@5.8.3: {} - - use-sync-external-store@1.5.0(react@19.1.0): - dependencies: - react: 19.1.0 - - uuid@9.0.1: {} - - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - zhipu-ai-provider@0.1.1(zod@3.25.67): - dependencies: - '@ai-sdk/provider': 1.0.9 - '@ai-sdk/provider-utils': 2.1.10(zod@3.25.67) - zod: 3.25.67 - - zod-to-json-schema@3.24.5(zod@3.25.67): - dependencies: - zod: 3.25.67 - - zod@3.25.67: {} diff --git a/packages/aiCore/pnpm-workspace.yaml b/packages/aiCore/pnpm-workspace.yaml deleted file mode 100644 index e9ddfafb21..0000000000 --- a/packages/aiCore/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -patchedDependencies: - '@ai-sdk/google-vertex': patches/@ai-sdk__google-vertex.patch diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index edb6d93900..8c493e675b 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -162,16 +162,8 @@ export default class ModernAiProvider { } try { - // 合并传入的配置和实例配置 - const finalConfig: AiSdkMiddlewareConfig = { - ...middlewareConfig, - provider: this.provider, - // 工具相关信息从 params 中获取 - enableTool: !!Object.keys(params.tools || {}).length - } - // 动态构建中间件数组 - const middlewares = buildAiSdkMiddlewares(finalConfig) + const middlewares = buildAiSdkMiddlewares(middlewareConfig) console.log('构建的中间件:', middlewares) // 创建带有中间件的执行器 @@ -179,27 +171,29 @@ export default class ModernAiProvider { // 流式处理 - 使用适配器 const adapter = new AiSdkToChunkAdapter(middlewareConfig.onChunk) // 创建MCP Prompt插件 - const mcpPromptPlugin = createMCPPromptPlugin({ - enabled: true, - createSystemMessage: (systemPrompt, params, context) => { - console.log('createSystemMessage_context', context.isRecursiveCall) - if (context.modelId.includes('o1-mini') || context.modelId.includes('o1-preview')) { - if (context.isRecursiveCall) { + if (middlewareConfig.enableTool) { + const mcpPromptPlugin = createMCPPromptPlugin({ + enabled: true, + createSystemMessage: (systemPrompt, params, context) => { + console.log('createSystemMessage_context', context.isRecursiveCall) + if (context.modelId.includes('o1-mini') || context.modelId.includes('o1-preview')) { + if (context.isRecursiveCall) { + return null + } + params.messages = [ + { + role: 'assistant', + content: systemPrompt + }, + ...params.messages + ] return null } - params.messages = [ - { - role: 'assistant', - content: systemPrompt - }, - ...params.messages - ] - return null + return systemPrompt } - return systemPrompt - } - }) - this.modernExecutor.pluginEngine.use(mcpPromptPlugin) + }) + this.modernExecutor.pluginEngine.use(mcpPromptPlugin) + } const streamResult = await this.modernExecutor.streamText( modelId, params, diff --git a/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts b/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts index 77efe9a7e6..02a440979e 100644 --- a/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts +++ b/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts @@ -18,6 +18,7 @@ export interface AiSdkMiddlewareConfig { model?: Model provider?: Provider enableReasoning?: boolean + // 是否开启提示词工具调用 enableTool?: boolean enableWebSearch?: boolean mcpTools?: MCPTool[] diff --git a/src/renderer/src/aiCore/middleware/aisdk/ThinkingTimeMiddleware.ts b/src/renderer/src/aiCore/middleware/aisdk/ThinkingTimeMiddleware.ts index 3da2676c4b..2fa7f4dac9 100644 --- a/src/renderer/src/aiCore/middleware/aisdk/ThinkingTimeMiddleware.ts +++ b/src/renderer/src/aiCore/middleware/aisdk/ThinkingTimeMiddleware.ts @@ -39,9 +39,8 @@ export default function thinkingTimeMiddleware(): LanguageModelV1Middleware { hasThinkingContent = false thinkingStartTime = 0 accumulatedThinkingContent = '' - } else { - controller.enqueue(chunk) } + controller.enqueue(chunk) } }, flush(controller) { diff --git a/src/renderer/src/aiCore/provider/factory.ts b/src/renderer/src/aiCore/provider/factory.ts index 3ad3684407..aa2456849e 100644 --- a/src/renderer/src/aiCore/provider/factory.ts +++ b/src/renderer/src/aiCore/provider/factory.ts @@ -11,18 +11,18 @@ const PROVIDER_MAPPING: Record = { } export function getAiSdkProviderId(provider: Provider): ProviderId | 'openai-compatible' { - const providerType = PROVIDER_MAPPING[provider.type] // 有些第三方需要映射到aicore对应sdk - - if (providerType) { - return providerType - } - const providerId = PROVIDER_MAPPING[provider.id] if (providerId) { return providerId } + const providerType = PROVIDER_MAPPING[provider.type] // 有些第三方需要映射到aicore对应sdk + + if (providerType) { + return providerType + } + if (AiCore.isSupported(provider.id)) { return provider.id as ProviderId as ProviderId } diff --git a/src/renderer/src/aiCore/transformParameters.ts b/src/renderer/src/aiCore/transformParameters.ts index 8566d03016..8f4154e640 100644 --- a/src/renderer/src/aiCore/transformParameters.ts +++ b/src/renderer/src/aiCore/transformParameters.ts @@ -4,7 +4,6 @@ */ import { type CoreMessage, type StreamTextParams } from '@cherrystudio/ai-core' -import { aiSdk } from '@cherrystudio/ai-core' import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant' import { isGenerateImageModel, @@ -18,18 +17,16 @@ import { isWebSearchModel } from '@renderer/config/models' import { getAssistantSettings, getDefaultModel } from '@renderer/services/AssistantService' -import type { Assistant, MCPTool, MCPToolInputSchema, MCPToolResponse, Message, Model } from '@renderer/types' +import type { Assistant, MCPTool, Message, Model } from '@renderer/types' import { FileTypes } from '@renderer/types' -import { callMCPTool } from '@renderer/utils/mcp-tools' import { findFileBlocks, findImageBlocks, getMainTextContent } from '@renderer/utils/messageUtils/find' import { buildSystemPrompt } from '@renderer/utils/prompt' import { defaultTimeout } from '@shared/config/constant' + // import { jsonSchemaToZod } from 'json-schema-to-zod' -import { jsonSchema } from 'ai' +import { setupToolsConfig } from './utils/mcp' +import { buildProviderOptions } from './utils/options' -import { buildProviderOptions } from './utils/reasoning' - -const { tool } = aiSdk /** * 获取温度参数 */ @@ -190,7 +187,6 @@ export async function buildStreamTextParams( assistant: Assistant, options: { mcpTools?: MCPTool[] - // FIXME: 上游没传 enableTools?: boolean requestOptions?: { signal?: AbortSignal @@ -199,7 +195,7 @@ export async function buildStreamTextParams( } } = {} ): Promise<{ params: StreamTextParams; modelId: string }> { - const { mcpTools } = options + const { mcpTools, enableTools } = options const model = assistant.model || getDefaultModel() @@ -221,11 +217,11 @@ export async function buildStreamTextParams( (isSupportedDisableGenerationModel(model) ? assistant.enableGenerateImage || false : true) // 构建系统提示 - let systemPrompt = assistant.prompt || '' - // TODO:根据调用类型判断是否添加systemPrompt - if (mcpTools && mcpTools.length > 0 && assistant.settings?.toolUseMode === 'prompt') { - systemPrompt = await buildSystemPromptWithTools(systemPrompt, mcpTools, assistant) - } + const { tools } = setupToolsConfig({ + mcpTools, + model, + enableToolUse: enableTools + }) // 构建真正的 providerOptions const providerOptions = buildProviderOptions(assistant, model, { @@ -240,22 +236,14 @@ export async function buildStreamTextParams( maxTokens: maxTokens || DEFAULT_MAX_TOKENS, temperature: getTemperature(assistant, model), topP: getTopP(assistant, model), - system: systemPrompt || undefined, + system: assistant.prompt || '', abortSignal: options.requestOptions?.signal, headers: options.requestOptions?.headers, providerOptions, + tools, maxSteps: 10 } - const tools = mcpTools ? convertMcpToolsToAiSdkTools(mcpTools) : {} - console.log('tools', tools) - console.log('enableTools', assistant?.mcpServers?.length) - // console.log('tools.length > 0', tools.length > 0) - // 添加工具(如果启用且有工具) - if (!!assistant?.mcpServers?.length && Object.keys(tools).length > 0) { - params.tools = tools - } - return { params, modelId: model.id } } @@ -273,76 +261,3 @@ export async function buildGenerateTextParams( // 复用流式参数的构建逻辑 return await buildStreamTextParams(messages, assistant, options) } - -/** - * 将 MCPToolInputSchema 转换为 JSONSchema7 格式 - */ -function convertMcpSchemaToJsonSchema7(schema: MCPToolInputSchema): any { - // 创建符合 JSONSchema7 的对象 - const jsonSchema7: Record = { - type: 'object', - properties: schema.properties || {}, - required: schema.required || [] - } - - // 如果有 description,添加它 - if (schema.description) { - jsonSchema7.description = schema.description - } - - // 如果有 title,添加它 - if (schema.title) { - jsonSchema7.title = schema.title - } - - return jsonSchema7 -} - -/** - * 将 MCPTool 转换为 AI SDK 工具格式 - */ -export function convertMcpToolsToAiSdkTools(mcpTools: MCPTool[]): Record { - const tools: Record = {} - - for (const mcpTool of mcpTools) { - console.log('mcpTool', mcpTool.inputSchema) - tools[mcpTool.name] = tool({ - description: mcpTool.description || `Tool from ${mcpTool.serverName}`, - parameters: jsonSchema>(convertMcpSchemaToJsonSchema7(mcpTool.inputSchema)), - execute: async (params) => { - console.log('execute_params', params) - // 创建适配的 MCPToolResponse 对象 - const toolResponse: MCPToolResponse = { - id: `tool_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, - tool: mcpTool, - arguments: params, - status: 'invoking', - toolCallId: `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}` - } - - try { - // 复用现有的 callMCPTool 函数 - const result = await callMCPTool(toolResponse) - - // 返回结果,AI SDK 会处理序列化 - if (result.isError) { - throw new Error(result.content?.[0]?.text || 'Tool execution failed') - } - console.log('result', result) - // 返回工具执行结果 - return { - success: true, - data: result - } - } catch (error) { - console.error(`MCP Tool execution failed: ${mcpTool.name}`, error) - throw new Error( - `Tool ${mcpTool.name} execution failed: ${error instanceof Error ? error.message : String(error)}` - ) - } - } - }) - } - - return tools -} diff --git a/src/renderer/src/aiCore/utils/mcp.ts b/src/renderer/src/aiCore/utils/mcp.ts new file mode 100644 index 0000000000..09153698a3 --- /dev/null +++ b/src/renderer/src/aiCore/utils/mcp.ts @@ -0,0 +1,88 @@ +import { aiSdk, Tool } from '@cherrystudio/ai-core' +import { SYSTEM_PROMPT_THRESHOLD } from '@renderer/config/constant' +import { isFunctionCallingModel } from '@renderer/config/models' +import { MCPCallToolResponse, MCPTool, MCPToolResponse, Model } from '@renderer/types' +import { callMCPTool } from '@renderer/utils/mcp-tools' +import { JSONSchema7 } from 'json-schema' + +type ToolCallResult = { + success: boolean + data: MCPCallToolResponse +} + +type AiSdkTool = Tool + +// Setup tools configuration based on provided parameters +export function setupToolsConfig(params: { mcpTools?: MCPTool[]; model: Model; enableToolUse?: boolean }): { + tools: Record + useSystemPromptForTools?: boolean +} { + const { mcpTools, model, enableToolUse } = params + + let tools: Record = {} + + if (!mcpTools?.length) { + return { tools } + } + + tools = convertMcpToolsToAiSdkTools(mcpTools) + + if (mcpTools.length > SYSTEM_PROMPT_THRESHOLD) { + return { tools, useSystemPromptForTools: true } + } + + if (isFunctionCallingModel(model) && enableToolUse) { + return { tools, useSystemPromptForTools: false } + } + + return { tools, useSystemPromptForTools: true } +} + +/** + * 将 MCPTool 转换为 AI SDK 工具格式 + */ +export function convertMcpToolsToAiSdkTools(mcpTools: MCPTool[]): Record> { + const tools: Record> = {} + + for (const mcpTool of mcpTools) { + console.log('mcpTool', mcpTool.inputSchema) + tools[mcpTool.name] = aiSdk.tool({ + description: mcpTool.description || `Tool from ${mcpTool.serverName}`, + parameters: aiSdk.jsonSchema(mcpTool.inputSchema as JSONSchema7), + execute: async (params): Promise => { + console.log('execute_params', params) + // 创建适配的 MCPToolResponse 对象 + const toolResponse: MCPToolResponse = { + id: `tool_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, + tool: mcpTool, + arguments: params, + status: 'invoking', + toolCallId: `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}` + } + + try { + // 复用现有的 callMCPTool 函数 + const result = await callMCPTool(toolResponse) + + // 返回结果,AI SDK 会处理序列化 + if (result.isError) { + throw new Error(result.content?.[0]?.text || 'Tool execution failed') + } + console.log('result', result) + // 返回工具执行结果 + return { + success: true, + data: result + } + } catch (error) { + console.error(`MCP Tool execution failed: ${mcpTool.name}`, error) + throw new Error( + `Tool ${mcpTool.name} execution failed: ${error instanceof Error ? error.message : String(error)}` + ) + } + } + }) + } + + return tools +} diff --git a/src/renderer/src/aiCore/utils/options.ts b/src/renderer/src/aiCore/utils/options.ts new file mode 100644 index 0000000000..299a4fb806 --- /dev/null +++ b/src/renderer/src/aiCore/utils/options.ts @@ -0,0 +1,203 @@ +import { getProviderByModel } from '@renderer/services/AssistantService' +import { Assistant, Model } from '@renderer/types' + +import { getAiSdkProviderId } from '../provider/factory' +import { + getAnthropicReasoningParams, + getCustomParameters, + getGeminiReasoningParams, + getOpenAIReasoningParams, + getReasoningEffort +} from './reasoning' + +/** + * 构建 AI SDK 的 providerOptions + * 按 provider 类型分离,保持类型安全 + * 返回格式:{ 'providerId': providerOptions } + */ +export function buildProviderOptions( + assistant: Assistant, + model: Model, + capabilities: { + enableReasoning: boolean + enableWebSearch: boolean + enableGenerateImage: boolean + } +): Record { + const provider = getProviderByModel(model) + const providerId = getAiSdkProviderId(provider) + + // 构建 provider 特定的选项 + let providerSpecificOptions: Record = {} + + // 根据 provider 类型分离构建逻辑 + switch (provider.type) { + case 'openai-response': + case 'azure-openai': + providerSpecificOptions = buildOpenAIProviderOptions(assistant, model, capabilities) + break + + case 'anthropic': + providerSpecificOptions = buildAnthropicProviderOptions(assistant, model, capabilities) + break + + case 'gemini': + case 'vertexai': + providerSpecificOptions = buildGeminiProviderOptions(assistant, model, capabilities) + break + + default: + // 对于其他 provider,使用通用的构建逻辑 + providerSpecificOptions = buildGenericProviderOptions(assistant, model, capabilities) + break + } + + // 合并自定义参数到 provider 特定的选项中 + providerSpecificOptions = { + ...providerSpecificOptions, + ...getCustomParameters(assistant) + } + + // 返回 AI Core SDK 要求的格式:{ 'providerId': providerOptions } + return { + [providerId]: providerSpecificOptions + } +} + +/** + * 构建 OpenAI 特定的 providerOptions + */ +function buildOpenAIProviderOptions( + assistant: Assistant, + model: Model, + capabilities: { + enableReasoning: boolean + enableWebSearch: boolean + enableGenerateImage: boolean + } +): Record { + const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities + let providerOptions: Record = {} + + // OpenAI 推理参数 + if (enableReasoning) { + const reasoningParams = getOpenAIReasoningParams(assistant, model) + providerOptions = { + ...providerOptions, + ...reasoningParams + } + } + + // Web 搜索和图像生成暂时使用通用格式 + if (enableWebSearch) { + providerOptions.webSearch = { enabled: true } + } + + if (enableGenerateImage) { + providerOptions.generateImage = { enabled: true } + } + + return providerOptions +} + +/** + * 构建 Anthropic 特定的 providerOptions + */ +function buildAnthropicProviderOptions( + assistant: Assistant, + model: Model, + capabilities: { + enableReasoning: boolean + enableWebSearch: boolean + enableGenerateImage: boolean + } +): Record { + const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities + let providerOptions: Record = {} + + // Anthropic 推理参数 + if (enableReasoning) { + const reasoningParams = getAnthropicReasoningParams(assistant, model) + providerOptions = { + ...providerOptions, + ...reasoningParams + } + } + + if (enableWebSearch) { + providerOptions.webSearch = { enabled: true } + } + + if (enableGenerateImage) { + providerOptions.generateImage = { enabled: true } + } + + return providerOptions +} + +/** + * 构建 Gemini 特定的 providerOptions + */ +function buildGeminiProviderOptions( + assistant: Assistant, + model: Model, + capabilities: { + enableReasoning: boolean + enableWebSearch: boolean + enableGenerateImage: boolean + } +): Record { + const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities + const providerOptions: Record = {} + + // Gemini 推理参数 + if (enableReasoning) { + const reasoningParams = getGeminiReasoningParams(assistant, model) + Object.assign(providerOptions, reasoningParams) + } + + if (enableWebSearch) { + providerOptions.webSearch = { enabled: true } + } + + if (enableGenerateImage) { + providerOptions.generateImage = { enabled: true } + } + + return providerOptions +} + +/** + * 构建通用的 providerOptions(用于其他 provider) + */ +function buildGenericProviderOptions( + assistant: Assistant, + model: Model, + capabilities: { + enableReasoning: boolean + enableWebSearch: boolean + enableGenerateImage: boolean + } +): Record { + const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities + let providerOptions: Record = {} + + // 使用原有的通用推理逻辑 + if (enableReasoning) { + const reasoningParams = getReasoningEffort(assistant, model) + providerOptions = { + ...providerOptions, + ...reasoningParams + } + } + + if (enableWebSearch) { + providerOptions.webSearch = { enabled: true } + } + + if (enableGenerateImage) { + providerOptions.generateImage = { enabled: true } + } + + return providerOptions +} diff --git a/src/renderer/src/aiCore/utils/reasoning.ts b/src/renderer/src/aiCore/utils/reasoning.ts index 80471e75e6..6de34dfdbe 100644 --- a/src/renderer/src/aiCore/utils/reasoning.ts +++ b/src/renderer/src/aiCore/utils/reasoning.ts @@ -17,8 +17,6 @@ import { getAssistantSettings, getProviderByModel } from '@renderer/services/Ass import { Assistant, EFFORT_RATIO, Model } from '@renderer/types' import { ReasoningEffortOptionalParams } from '@renderer/types/sdk' -import { getAiSdkProviderId } from '../provider/factory' - export function getReasoningEffort(assistant: Assistant, model: Model): ReasoningEffortOptionalParams { const provider = getProviderByModel(model) if (provider.id === 'groq') { @@ -138,192 +136,11 @@ export function getReasoningEffort(assistant: Assistant, model: Model): Reasonin return {} } -/** - * 构建 AI SDK 的 providerOptions - * 按 provider 类型分离,保持类型安全 - * 返回格式:{ 'providerId': providerOptions } - */ -export function buildProviderOptions( - assistant: Assistant, - model: Model, - capabilities: { - enableReasoning: boolean - enableWebSearch: boolean - enableGenerateImage: boolean - } -): Record { - const provider = getProviderByModel(model) - const providerId = getAiSdkProviderId(provider) - - // 构建 provider 特定的选项 - let providerSpecificOptions: Record = {} - - // 根据 provider 类型分离构建逻辑 - switch (provider.type) { - case 'openai': - case 'azure-openai': - providerSpecificOptions = buildOpenAIProviderOptions(assistant, model, capabilities) - break - - case 'anthropic': - providerSpecificOptions = buildAnthropicProviderOptions(assistant, model, capabilities) - break - - case 'gemini': - case 'vertexai': - providerSpecificOptions = buildGeminiProviderOptions(assistant, model, capabilities) - break - - default: - // 对于其他 provider,使用通用的构建逻辑 - providerSpecificOptions = buildGenericProviderOptions(assistant, model, capabilities) - break - } - - // 合并自定义参数到 provider 特定的选项中 - const customParameters = getCustomParameters(assistant) - Object.assign(providerSpecificOptions, customParameters) - - // 返回 AI Core SDK 要求的格式:{ 'providerId': providerOptions } - return { - [providerId]: providerSpecificOptions - } -} - -/** - * 构建 OpenAI 特定的 providerOptions - */ -function buildOpenAIProviderOptions( - assistant: Assistant, - model: Model, - capabilities: { - enableReasoning: boolean - enableWebSearch: boolean - enableGenerateImage: boolean - } -): Record { - const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities - const providerOptions: Record = {} - - // OpenAI 推理参数 - if (enableReasoning) { - const reasoningParams = getOpenAIReasoningParams(assistant, model) - Object.assign(providerOptions, reasoningParams) - } - - // Web 搜索和图像生成暂时使用通用格式 - if (enableWebSearch) { - providerOptions.webSearch = { enabled: true } - } - - if (enableGenerateImage) { - providerOptions.generateImage = { enabled: true } - } - - return providerOptions -} - -/** - * 构建 Anthropic 特定的 providerOptions - */ -function buildAnthropicProviderOptions( - assistant: Assistant, - model: Model, - capabilities: { - enableReasoning: boolean - enableWebSearch: boolean - enableGenerateImage: boolean - } -): Record { - const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities - const providerOptions: Record = {} - - // Anthropic 推理参数 - if (enableReasoning) { - const reasoningParams = getAnthropicReasoningParams(assistant, model) - Object.assign(providerOptions, reasoningParams) - } - - if (enableWebSearch) { - providerOptions.webSearch = { enabled: true } - } - - if (enableGenerateImage) { - providerOptions.generateImage = { enabled: true } - } - - return providerOptions -} - -/** - * 构建 Gemini 特定的 providerOptions - */ -function buildGeminiProviderOptions( - assistant: Assistant, - model: Model, - capabilities: { - enableReasoning: boolean - enableWebSearch: boolean - enableGenerateImage: boolean - } -): Record { - const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities - const providerOptions: Record = {} - - // Gemini 推理参数 - if (enableReasoning) { - const reasoningParams = getGeminiReasoningParams(assistant, model) - Object.assign(providerOptions, reasoningParams) - } - - if (enableWebSearch) { - providerOptions.webSearch = { enabled: true } - } - - if (enableGenerateImage) { - providerOptions.generateImage = { enabled: true } - } - - return providerOptions -} - -/** - * 构建通用的 providerOptions(用于其他 provider) - */ -function buildGenericProviderOptions( - assistant: Assistant, - model: Model, - capabilities: { - enableReasoning: boolean - enableWebSearch: boolean - enableGenerateImage: boolean - } -): Record { - const { enableReasoning, enableWebSearch, enableGenerateImage } = capabilities - const providerOptions: Record = {} - - // 使用原有的通用推理逻辑 - if (enableReasoning) { - const reasoningParams = getReasoningEffort(assistant, model) - Object.assign(providerOptions, reasoningParams) - } - - if (enableWebSearch) { - providerOptions.webSearch = { enabled: true } - } - - if (enableGenerateImage) { - providerOptions.generateImage = { enabled: true } - } - - return providerOptions -} - /** * 获取 OpenAI 推理参数 * 从 OpenAIResponseAPIClient 和 OpenAIAPIClient 中提取的逻辑 */ -function getOpenAIReasoningParams(assistant: Assistant, model: Model): Record { +export function getOpenAIReasoningParams(assistant: Assistant, model: Model): Record { if (!isReasoningModel(model)) { return {} } @@ -348,7 +165,7 @@ function getOpenAIReasoningParams(assistant: Assistant, model: Model): Record { +export function getAnthropicReasoningParams(assistant: Assistant, model: Model): Record { if (!isReasoningModel(model)) { return {} } @@ -394,7 +211,7 @@ function getAnthropicReasoningParams(assistant: Assistant, model: Model): Record * 获取 Gemini 推理参数 * 从 GeminiAPIClient 中提取的逻辑 */ -function getGeminiReasoningParams(assistant: Assistant, model: Model): Record { +export function getGeminiReasoningParams(assistant: Assistant, model: Model): Record { if (!isReasoningModel(model)) { return {} } @@ -440,7 +257,7 @@ function getGeminiReasoningParams(assistant: Assistant, model: Model): Record { +export function getCustomParameters(assistant: Assistant): Record { return ( assistant?.settings?.customParameters?.reduce((acc, param) => { if (!param.name?.trim()) { diff --git a/src/renderer/src/config/constant.ts b/src/renderer/src/config/constant.ts index 05f9bfbc19..4a23aede3a 100644 --- a/src/renderer/src/config/constant.ts +++ b/src/renderer/src/config/constant.ts @@ -1,6 +1,7 @@ export const DEFAULT_TEMPERATURE = 1.0 export const DEFAULT_CONTEXTCOUNT = 5 export const DEFAULT_MAX_TOKENS = 4096 +export const SYSTEM_PROMPT_THRESHOLD = 128 export const DEFAULT_KNOWLEDGE_DOCUMENT_COUNT = 6 export const DEFAULT_KNOWLEDGE_THRESHOLD = 0.0 diff --git a/src/renderer/src/services/ApiService.ts b/src/renderer/src/services/ApiService.ts index 8d4308cf97..da73ac4c23 100644 --- a/src/renderer/src/services/ApiService.ts +++ b/src/renderer/src/services/ApiService.ts @@ -20,6 +20,7 @@ import { type Chunk, ChunkType } from '@renderer/types/chunk' import { Message } from '@renderer/types/newMessage' import { SdkModel } from '@renderer/types/sdk' import { removeSpecialCharactersForTopicName } from '@renderer/utils' +import { isEnabledToolUse } from '@renderer/utils/mcp-tools' import { findFileBlocks, getMainTextContent } from '@renderer/utils/messageUtils/find' import { isEmpty, takeRight } from 'lodash' @@ -302,6 +303,7 @@ export async function fetchChatCompletion({ // 使用 transformParameters 模块构建参数 const { params: aiSdkParams, modelId } = await buildStreamTextParams(messages, assistant, { mcpTools: mcpTools, + enableTools: isEnabledToolUse(assistant), requestOptions: options }) @@ -311,6 +313,7 @@ export async function fetchChatCompletion({ model: assistant.model, provider: provider, enableReasoning: assistant.settings?.reasoning_effort !== undefined, + enableTool: assistant.settings?.toolUseMode === 'prompt', mcpTools } diff --git a/yarn.lock b/yarn.lock index b3d6bf6e57..1fdbe679b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -190,7 +190,7 @@ __metadata: languageName: node linkType: hard -"@ai-sdk/google-vertex@npm:^2.2.24": +"@ai-sdk/google-vertex@npm:2.2.24": version: 2.2.24 resolution: "@ai-sdk/google-vertex@npm:2.2.24" dependencies: @@ -205,6 +205,21 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/google-vertex@patch:@ai-sdk/google-vertex@npm%3A2.2.24#~/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch": + version: 2.2.24 + resolution: "@ai-sdk/google-vertex@patch:@ai-sdk/google-vertex@npm%3A2.2.24#~/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch::version=2.2.24&hash=ec30c6" + dependencies: + "@ai-sdk/anthropic": "npm:1.2.12" + "@ai-sdk/google": "npm:1.2.19" + "@ai-sdk/provider": "npm:1.1.3" + "@ai-sdk/provider-utils": "npm:2.2.8" + google-auth-library: "npm:^9.15.0" + peerDependencies: + zod: ^3.0.0 + checksum: 10c0/6afbb0557e5c82e09fa9fed5b9cb77e7a4b667023e4dce883524ad5df41607b416a5e1a0487367434909fb60971d956c1bad6350d5d261fafaf7e4ac123ac0bd + languageName: node + linkType: hard + "@ai-sdk/google@npm:1.2.19, @ai-sdk/google@npm:^1.2.19": version: 1.2.19 resolution: "@ai-sdk/google@npm:1.2.19" @@ -241,7 +256,7 @@ __metadata: languageName: node linkType: hard -"@ai-sdk/openai-compatible@npm:0.2.14, @ai-sdk/openai-compatible@npm:^0.2.14": +"@ai-sdk/openai-compatible@npm:0.2.14": version: 0.2.14 resolution: "@ai-sdk/openai-compatible@npm:0.2.14" dependencies: @@ -253,6 +268,18 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/openai-compatible@patch:@ai-sdk/openai-compatible@npm%3A0.2.14#~/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch": + version: 0.2.14 + resolution: "@ai-sdk/openai-compatible@patch:@ai-sdk/openai-compatible@npm%3A0.2.14#~/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch::version=0.2.14&hash=f24fda" + dependencies: + "@ai-sdk/provider": "npm:1.1.3" + "@ai-sdk/provider-utils": "npm:2.2.8" + peerDependencies: + zod: ^3.0.0 + checksum: 10c0/ba49e5fc1434c6fdd8482c82dba98c9775753333c7854300801b3003d503784bfc628acc4abc100e956f72287a14990d65773d3dfab17389d1ff152e749068ab + languageName: node + linkType: hard + "@ai-sdk/openai@npm:1.3.22, @ai-sdk/openai@npm:^1.3.22": version: 1.3.22 resolution: "@ai-sdk/openai@npm:1.3.22" @@ -368,7 +395,7 @@ __metadata: languageName: node linkType: hard -"@ai-sdk/provider@npm:1.1.3, @ai-sdk/provider@npm:^1.0.0, @ai-sdk/provider@npm:^1.0.7": +"@ai-sdk/provider@npm:1.1.3, @ai-sdk/provider@npm:^1.0.0, @ai-sdk/provider@npm:^1.0.7, @ai-sdk/provider@npm:^1.1.3": version: 1.1.3 resolution: "@ai-sdk/provider@npm:1.1.3" dependencies: @@ -710,6 +737,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.27.5": + version: 7.27.5 + resolution: "@babel/generator@npm:7.27.5" + dependencies: + "@babel/parser": "npm:^7.27.5" + "@babel/types": "npm:^7.27.3" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/8f649ef4cd81765c832bb11de4d6064b035ffebdecde668ba7abee68a7b0bce5c9feabb5dc5bb8aeba5bd9e5c2afa3899d852d2bd9ca77a711ba8c8379f416f0 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.26.5": version: 7.27.0 resolution: "@babel/helper-compilation-targets@npm:7.27.0" @@ -820,6 +860,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.27.3, @babel/parser@npm:^7.27.5": + version: 7.27.7 + resolution: "@babel/parser@npm:7.27.7" + dependencies: + "@babel/types": "npm:^7.27.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/f6202faeb873f0b3083022e50a5046fe07266d337c0a3bd80a491f8435ba6d9e383d49725e3dcd666b3b52c0dccb4e0f1f1004915762345f7eeed5ba54ea9fd2 + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" @@ -893,6 +944,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/types@npm:7.27.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/1d1dcb5fa7cfba2b4034a3ab99ba17049bfc4af9e170935575246cdb1cee68b04329a0111506d9ae83fb917c47dbd4394a6db5e32fbd041b7834ffbb17ca086b + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^1.0.2": version: 1.0.2 resolution: "@bcoe/v8-coverage@npm:1.0.2" @@ -940,12 +1001,13 @@ __metadata: "@ai-sdk/fal": "npm:^0.1.12" "@ai-sdk/fireworks": "npm:^0.2.14" "@ai-sdk/google": "npm:^1.2.19" - "@ai-sdk/google-vertex": "npm:^2.2.24" + "@ai-sdk/google-vertex": "patch:@ai-sdk/google-vertex@npm%3A2.2.24#~/.yarn/patches/@ai-sdk-google-vertex-npm-2.2.24-b89772c4de.patch" "@ai-sdk/groq": "npm:^1.2.9" "@ai-sdk/mistral": "npm:^1.2.8" "@ai-sdk/openai": "npm:^1.3.22" - "@ai-sdk/openai-compatible": "npm:^0.2.14" + "@ai-sdk/openai-compatible": "patch:@ai-sdk/openai-compatible@npm%3A0.2.14#~/.yarn/patches/@ai-sdk-openai-compatible-npm-0.2.14-bb0a64a4be.patch" "@ai-sdk/perplexity": "npm:^1.1.9" + "@ai-sdk/provider": "npm:^1.1.3" "@ai-sdk/replicate": "npm:^0.2.8" "@ai-sdk/togetherai": "npm:^0.2.14" "@ai-sdk/vercel": "npm:^0.0.1" @@ -955,6 +1017,7 @@ __metadata: anthropic-vertex-ai: "npm:^1.0.2" ollama-ai-provider: "npm:^1.2.0" qwen-ai-provider: "npm:^0.1.0" + tsdown: "npm:^0.12.9" typescript: "npm:^5.0.0" zhipu-ai-provider: "npm:^0.1.1" peerDependenciesMeta: @@ -1897,6 +1960,34 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.4.3": + version: 1.4.3 + resolution: "@emnapi/core@npm:1.4.3" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.2" + tslib: "npm:^2.4.0" + checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.3": + version: 1.4.3 + resolution: "@emnapi/runtime@npm:1.4.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.2": + version: 1.0.2 + resolution: "@emnapi/wasi-threads@npm:1.0.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e + languageName: node + linkType: hard + "@emotion/hash@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/hash@npm:0.8.0" @@ -3573,6 +3664,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^0.2.4": + version: 0.2.11 + resolution: "@napi-rs/wasm-runtime@npm:0.2.11" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10c0/049bd14c58b99fbe0967b95e9921c5503df196b59be22948d2155f17652eb305cff6728efd8685338b855da7e476dd2551fbe3a313fc2d810938f0717478441e + languageName: node + linkType: hard + "@neon-rs/load@npm:^0.0.4": version: 0.0.4 resolution: "@neon-rs/load@npm:0.0.4" @@ -3707,6 +3809,20 @@ __metadata: languageName: node linkType: hard +"@oxc-project/runtime@npm:0.71.0": + version: 0.71.0 + resolution: "@oxc-project/runtime@npm:0.71.0" + checksum: 10c0/37823f241ebb74c902d34c784a1f0d963572812a59129436a9a34c7a8a8ea08a23ec9b13fdff9807482f3715832dd2b96e6d364c038ce91ca05c4d86114464c5 + languageName: node + linkType: hard + +"@oxc-project/types@npm:0.71.0": + version: 0.71.0 + resolution: "@oxc-project/types@npm:0.71.0" + checksum: 10c0/899f3af74f6aaee1ef5611ce78d85867948a5676829b4dce61d4ee6ea75755b574a2cf4671858f1d6015dd7ae66c9aeedb6f89cf61278c319fa0fb2b2abaae89 + languageName: node + linkType: hard + "@parcel/watcher-android-arm64@npm:2.5.1": version: 2.5.1 resolution: "@parcel/watcher-android-arm64@npm:2.5.1" @@ -3883,6 +3999,15 @@ __metadata: languageName: node linkType: hard +"@quansync/fs@npm:^0.1.1": + version: 0.1.3 + resolution: "@quansync/fs@npm:0.1.3" + dependencies: + quansync: "npm:^0.2.10" + checksum: 10c0/15d9914328d296df6626b6b2d5e9f455f618d5c8ffff09270ca3ce42c1bd21e4a91b53d6c1d857fbcae3be8c07b33ab82a83532870f2c5bf74904fe0ac60a3d1 + languageName: node + linkType: hard + "@rc-component/async-validator@npm:^5.0.3": version: 5.0.4 resolution: "@rc-component/async-validator@npm:5.0.4" @@ -4091,6 +4216,99 @@ __metadata: languageName: node linkType: hard +"@rolldown/binding-darwin-arm64@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.9-commit.d91dfb5" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.4" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.9-commit.d91dfb5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:1.0.0-beta.9-commit.d91dfb5": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.9-commit.d91dfb5" + checksum: 10c0/63fa64fdd98a2cc99f21dab5c1819ffec172d2282cbff5dcb1089a84d2bb5c556dc6af503e778058f4a038d1941c0179f677ceddd0e30f024b57c543f21042f0 + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.40.0": version: 4.40.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.0" @@ -4705,6 +4923,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d + languageName: node + linkType: hard + "@types/aria-query@npm:^5.0.1": version: 5.0.4 resolution: "@types/aria-query@npm:5.0.4" @@ -6564,6 +6791,13 @@ __metadata: languageName: node linkType: hard +"ansis@npm:^4.0.0, ansis@npm:^4.1.0": + version: 4.1.0 + resolution: "ansis@npm:4.1.0" + checksum: 10c0/df62d017a7791babdaf45b93f930d2cfd6d1dab5568b610735c11434c9a5ef8f513740e7cfd80bcbc3530fc8bd892b88f8476f26621efc251230e53cbd1a2c24 + languageName: node + linkType: hard + "antd@npm:^5.22.5": version: 5.24.7 resolution: "antd@npm:5.24.7" @@ -6825,6 +7059,16 @@ __metadata: languageName: node linkType: hard +"ast-kit@npm:^2.1.0": + version: 2.1.0 + resolution: "ast-kit@npm:2.1.0" + dependencies: + "@babel/parser": "npm:^7.27.3" + pathe: "npm:^2.0.3" + checksum: 10c0/67246f34745f40b6a5bee2467a1a00f7f006a051f80d7cda7e3b7fe5f7d7a1f262521b72643fcbffb21d33f36aa59868636229a769b2802355d687815ad7b13d + languageName: node + linkType: hard + "ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" @@ -6980,6 +7224,13 @@ __metadata: languageName: node linkType: hard +"birpc@npm:^2.4.0": + version: 2.4.0 + resolution: "birpc@npm:2.4.0" + checksum: 10c0/6ecda217b540189221913f215055baf4f10f264a1a8f0000ef6db3ecb0ccc5e4fde135b5f0719c389f1a593e64af3041404019711225ab31badf23c2a98d7778 + languageName: node + linkType: hard + "bl@npm:^1.0.0": version: 1.2.3 resolution: "bl@npm:1.2.3" @@ -7491,7 +7742,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^4.0.0": +"chokidar@npm:^4.0.0, chokidar@npm:^4.0.3": version: 4.0.3 resolution: "chokidar@npm:4.0.3" dependencies: @@ -8528,6 +8779,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.4.1": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + "decamelize@npm:1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -8717,6 +8980,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 10c0/2d6cc366262dc0cb8096e429368e44052fdf43ed48e53ad84cc7c9407f890301aa5fcb80d0995abaaf842b3949f154d060be4160f7a46cb2bc2f7726c81526f5 + languageName: node + linkType: hard + "degenerator@npm:^5.0.0": version: 5.0.1 resolution: "degenerator@npm:5.0.1" @@ -8843,6 +9113,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^8.0.2": + version: 8.0.2 + resolution: "diff@npm:8.0.2" + checksum: 10c0/abfb387f033e089df3ec3be960205d17b54df8abf0924d982a7ced3a94c557a4e6cbff2e78b121f216b85f466b3d8d041673a386177c311aaea41459286cc9bc + languageName: node + linkType: hard + "dingbat-to-unicode@npm:^1.0.1": version: 1.0.1 resolution: "dingbat-to-unicode@npm:1.0.1" @@ -9020,6 +9297,18 @@ __metadata: languageName: node linkType: hard +"dts-resolver@npm:^2.1.1": + version: 2.1.1 + resolution: "dts-resolver@npm:2.1.1" + peerDependencies: + oxc-resolver: ">=11.0.0" + peerDependenciesMeta: + oxc-resolver: + optional: true + checksum: 10c0/bc36d71822d39f23cfe274b6781fae4b1729bd8b0a07e4a011fe243a73c5dbbb30ea067fb0d6248fdfedc29cf4dfc0ff19f0dd38950158444409d109c1c55b7e + languageName: node + linkType: hard + "duck@npm:^0.1.12": version: 0.1.12 resolution: "duck@npm:0.1.12" @@ -9243,6 +9532,13 @@ __metadata: languageName: node linkType: hard +"empathic@npm:^2.0.0": + version: 2.0.0 + resolution: "empathic@npm:2.0.0" + checksum: 10c0/7d3b14b04a93b35c47bcc950467ec914fd241cd9acc0269b0ea160f13026ec110f520c90fae64720fde72cc1757b57f3f292fb606617b7fccac1f4d008a76506 + languageName: node + linkType: hard + "encodeurl@npm:^2.0.0": version: 2.0.0 resolution: "encodeurl@npm:2.0.0" @@ -10808,6 +11104,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.10.1": + version: 4.10.1 + resolution: "get-tsconfig@npm:4.10.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21 + languageName: node + linkType: hard + "get-uri@npm:^6.0.1": version: 6.0.4 resolution: "get-uri@npm:6.0.4" @@ -11286,6 +11591,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^5.5.3": + version: 5.5.3 + resolution: "hookable@npm:5.5.3" + checksum: 10c0/275f4cc84d27f8d48c5a5cd5685b6c0fea9291be9deea5bff0cfa72856ed566abde1dcd8cb1da0f9a70b4da3d7ec0d60dc3554c4edbba647058cc38816eced3d + languageName: node + linkType: hard + "hosted-git-info@npm:^4.1.0": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" @@ -12019,6 +12331,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.4.2": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331 + languageName: node + linkType: hard + "js-base64@npm:^3.7.5": version: 3.7.7 resolution: "js-base64@npm:3.7.7" @@ -15641,7 +15962,7 @@ __metadata: languageName: node linkType: hard -"quansync@npm:^0.2.8": +"quansync@npm:^0.2.10, quansync@npm:^0.2.8": version: 0.2.10 resolution: "quansync@npm:0.2.10" checksum: 10c0/f86f1d644f812a3a7c42de79eb401c47a5a67af82a9adff8a8afb159325e03e00f77cebbf42af6340a0bd47bd0c1fbe999e7caf7e1bbb30d7acb00c8729b7530 @@ -16850,6 +17171,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + "responselike@npm:^2.0.0": version: 2.0.1 resolution: "responselike@npm:2.0.1" @@ -16959,6 +17287,85 @@ __metadata: languageName: node linkType: hard +"rolldown-plugin-dts@npm:^0.13.12": + version: 0.13.12 + resolution: "rolldown-plugin-dts@npm:0.13.12" + dependencies: + "@babel/generator": "npm:^7.27.5" + "@babel/parser": "npm:^7.27.5" + "@babel/types": "npm:^7.27.6" + ast-kit: "npm:^2.1.0" + birpc: "npm:^2.4.0" + debug: "npm:^4.4.1" + dts-resolver: "npm:^2.1.1" + get-tsconfig: "npm:^4.10.1" + peerDependencies: + "@typescript/native-preview": ">=7.0.0-dev.20250601.1" + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~2.2.0 + peerDependenciesMeta: + "@typescript/native-preview": + optional: true + typescript: + optional: true + vue-tsc: + optional: true + checksum: 10c0/811d1bef1649119895aaf7f87f0a23bd73438680d839c9c8331791995184ae4983deee67ed9b21abfc5521f4bda704f3ebbb84fda2259d6789d15d0c4411e36f + languageName: node + linkType: hard + +"rolldown@npm:^1.0.0-beta.19": + version: 1.0.0-beta.9-commit.d91dfb5 + resolution: "rolldown@npm:1.0.0-beta.9-commit.d91dfb5" + dependencies: + "@oxc-project/runtime": "npm:0.71.0" + "@oxc-project/types": "npm:0.71.0" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-darwin-x64": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-win32-ia32-msvc": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-beta.9-commit.d91dfb5" + "@rolldown/pluginutils": "npm:1.0.0-beta.9-commit.d91dfb5" + ansis: "npm:^4.0.0" + dependenciesMeta: + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-ia32-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: bin/cli.mjs + checksum: 10c0/fae589d1e3de6174a00bc02954abc6418fe1df70b109e709c0bc7d95ac51b9d18c478137948dc89283967c1e1e5fb02d3a79c1c448496d14d02ad117d03b761d + languageName: node + linkType: hard + "rollup-plugin-visualizer@npm:^5.12.0": version: 5.14.0 resolution: "rollup-plugin-visualizer@npm:5.14.0" @@ -17255,6 +17662,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + "send@npm:^1.1.0, send@npm:^1.2.0": version: 1.2.0 resolution: "send@npm:1.2.0" @@ -18219,6 +18635,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.14": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + "tinypool@npm:^1.0.2": version: 1.0.2 resolution: "tinypool@npm:1.0.2" @@ -18437,6 +18863,46 @@ __metadata: languageName: node linkType: hard +"tsdown@npm:^0.12.9": + version: 0.12.9 + resolution: "tsdown@npm:0.12.9" + dependencies: + ansis: "npm:^4.1.0" + cac: "npm:^6.7.14" + chokidar: "npm:^4.0.3" + debug: "npm:^4.4.1" + diff: "npm:^8.0.2" + empathic: "npm:^2.0.0" + hookable: "npm:^5.5.3" + rolldown: "npm:^1.0.0-beta.19" + rolldown-plugin-dts: "npm:^0.13.12" + semver: "npm:^7.7.2" + tinyexec: "npm:^1.0.1" + tinyglobby: "npm:^0.2.14" + unconfig: "npm:^7.3.2" + peerDependencies: + "@arethetypeswrong/core": ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + "@arethetypeswrong/core": + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + bin: + tsdown: dist/run.mjs + checksum: 10c0/5dd4842982815181f5a79bc87fff1dd9afc6952aaec065dcececde5ba76887163a01de313272964003ea90df8ac23efdfc8aabb290c5b8f8dae5332e9905c05b + languageName: node + linkType: hard + "tslib@npm:2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -18568,6 +19034,18 @@ __metadata: languageName: node linkType: hard +"unconfig@npm:^7.3.2": + version: 7.3.2 + resolution: "unconfig@npm:7.3.2" + dependencies: + "@quansync/fs": "npm:^0.1.1" + defu: "npm:^6.1.4" + jiti: "npm:^2.4.2" + quansync: "npm:^0.2.8" + checksum: 10c0/245a0add92413b9a04a0bad879c7ee4d6904e58c9d091dbb1ea89fb7491d22d0f2ad17bd561329e006cb1954b5ece00f4cd9f9300a72af5013a927dc7fd5d27b + languageName: node + linkType: hard + "underscore@npm:^1.13.1": version: 1.13.7 resolution: "underscore@npm:1.13.7"