diff --git a/app/components/chat/UserMessage.tsx b/app/components/chat/UserMessage.tsx
index 3e6485b..6fd6fc0 100644
--- a/app/components/chat/UserMessage.tsx
+++ b/app/components/chat/UserMessage.tsx
@@ -12,42 +12,36 @@ interface UserMessageProps {
export function UserMessage({ content }: UserMessageProps) {
if (Array.isArray(content)) {
const textItem = content.find((item) => item.type === 'text');
- const textContent = sanitizeUserMessage(textItem?.text || '');
+ const textContent = stripMetadata(textItem?.text || '');
const images = content.filter((item) => item.type === 'image' && item.image);
return (
-
-
- {textContent}
-
- {images.length > 0 && (
-
- {images.map((item, index) => (
-
-

-
- ))}
-
- )}
+
+ {textContent &&
{textContent}}
+ {images.map((item, index) => (
+

+ ))}
);
}
- const textContent = sanitizeUserMessage(content);
+ const textContent = stripMetadata(content);
return (
- {textContent}
+ {textContent}
);
}
-function sanitizeUserMessage(content: string) {
+function stripMetadata(content: string) {
return content.replace(MODEL_REGEX, '').replace(PROVIDER_REGEX, '');
}
diff --git a/app/components/settings/features/FeaturesTab.tsx b/app/components/settings/features/FeaturesTab.tsx
index 410f7ca..c5e1b3a 100644
--- a/app/components/settings/features/FeaturesTab.tsx
+++ b/app/components/settings/features/FeaturesTab.tsx
@@ -3,8 +3,8 @@ import { Switch } from '~/components/ui/Switch';
import { useSettings } from '~/lib/hooks/useSettings';
export default function FeaturesTab() {
- const { debug, enableDebugMode, isLocalModel, enableLocalModels, enableEventLogs, latestBranch, enableLatestBranch } =
- useSettings();
+
+ const { debug, enableDebugMode, isLocalModel, enableLocalModels, enableEventLogs, latestBranch, enableLatestBranch } = useSettings();
const handleToggle = (enabled: boolean) => {
enableDebugMode(enabled);
diff --git a/app/lib/hooks/useSettings.tsx b/app/lib/hooks/useSettings.tsx
index 36eefb4..d093d5f 100644
--- a/app/lib/hooks/useSettings.tsx
+++ b/app/lib/hooks/useSettings.tsx
@@ -99,7 +99,6 @@ export function useSettings() {
if (checkCommit === undefined) {
checkCommit = commit.commit;
}
-
if (savedLatestBranch === undefined || checkCommit !== commit.commit) {
// If setting hasn't been set by user, check version
checkIsStableVersion().then((isStable) => {
diff --git a/app/routes/api.chat.ts b/app/routes/api.chat.ts
index 87ca5c7..2c47054 100644
--- a/app/routes/api.chat.ts
+++ b/app/routes/api.chat.ts
@@ -1,4 +1,5 @@
import { type ActionFunctionArgs } from '@remix-run/cloudflare';
+import { createDataStream } from 'ai';
import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants';
import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts';
import { streamText, type Messages, type StreamingOptions } from '~/lib/.server/llm/stream-text';
@@ -9,17 +10,15 @@ export async function action(args: ActionFunctionArgs) {
return chatAction(args);
}
-function parseCookies(cookieHeader: string) {
- const cookies: any = {};
+function parseCookies(cookieHeader: string): Record
{
+ const cookies: Record = {};
- // Split the cookie string by semicolons and spaces
const items = cookieHeader.split(';').map((cookie) => cookie.trim());
items.forEach((item) => {
const [name, ...rest] = item.split('=');
if (name && rest) {
- // Decode the name and value, and join value parts in case it contains '='
const decodedName = decodeURIComponent(name.trim());
const decodedValue = decodeURIComponent(rest.join('=').trim());
cookies[decodedName] = decodedValue;
@@ -36,8 +35,6 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
}>();
const cookieHeader = request.headers.get('Cookie');
-
- // Parse the cookie's value (returns an object or null if no cookie exists)
const apiKeys = JSON.parse(parseCookies(cookieHeader || '').apiKeys || '{}');
const providerSettings: Record = JSON.parse(
parseCookies(cookieHeader || '').providers || '{}',
@@ -45,12 +42,42 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
const stream = new SwitchableStream();
+ const cumulativeUsage = {
+ completionTokens: 0,
+ promptTokens: 0,
+ totalTokens: 0,
+ };
+
try {
const options: StreamingOptions = {
toolChoice: 'none',
- onFinish: async ({ text: content, finishReason }) => {
+ onFinish: async ({ text: content, finishReason, usage }) => {
+ console.log('usage', usage);
+
+ if (usage) {
+ cumulativeUsage.completionTokens += usage.completionTokens || 0;
+ cumulativeUsage.promptTokens += usage.promptTokens || 0;
+ cumulativeUsage.totalTokens += usage.totalTokens || 0;
+ }
+
if (finishReason !== 'length') {
- return stream.close();
+ return stream
+ .switchSource(
+ createDataStream({
+ async execute(dataStream) {
+ dataStream.writeMessageAnnotation({
+ type: 'usage',
+ value: {
+ completionTokens: cumulativeUsage.completionTokens,
+ promptTokens: cumulativeUsage.promptTokens,
+ totalTokens: cumulativeUsage.totalTokens,
+ },
+ });
+ },
+ onError: (error: any) => `Custom error: ${error.message}`,
+ }),
+ )
+ .then(() => stream.close());
}
if (stream.switches >= MAX_RESPONSE_SEGMENTS) {
@@ -73,7 +100,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
providerSettings,
});
- return stream.switchSource(result.toAIStream());
+ return stream.switchSource(result.toDataStream());
},
};
@@ -86,7 +113,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
providerSettings,
});
- stream.switchSource(result.toAIStream());
+ stream.switchSource(result.toDataStream());
return new Response(stream.readable, {
status: 200,
@@ -95,7 +122,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) {
},
});
} catch (error: any) {
- console.log(error);
+ console.error(error);
if (error.message?.includes('API key')) {
throw new Response('Invalid or missing API key', {
diff --git a/app/routes/api.enhancer.ts b/app/routes/api.enhancer.ts
index cc51116..c2dbba4 100644
--- a/app/routes/api.enhancer.ts
+++ b/app/routes/api.enhancer.ts
@@ -1,5 +1,6 @@
import { type ActionFunctionArgs } from '@remix-run/cloudflare';
-import { StreamingTextResponse, parseStreamPart } from 'ai';
+
+//import { StreamingTextResponse, parseStreamPart } from 'ai';
import { streamText } from '~/lib/.server/llm/stream-text';
import { stripIndents } from '~/utils/stripIndent';
import type { IProviderSetting, ProviderInfo } from '~/types/model';
@@ -73,32 +74,32 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) {
`[Model: ${model}]\n\n[Provider: ${providerName}]\n\n` +
stripIndents`
You are a professional prompt engineer specializing in crafting precise, effective prompts.
- Your task is to enhance prompts by making them more specific, actionable, and effective.
+ Your task is to enhance prompts by making them more specific, actionable, and effective.
- I want you to improve the user prompt that is wrapped in \`\` tags.
+ I want you to improve the user prompt that is wrapped in \`\` tags.
- For valid prompts:
- - Make instructions explicit and unambiguous
- - Add relevant context and constraints
- - Remove redundant information
- - Maintain the core intent
- - Ensure the prompt is self-contained
- - Use professional language
+ For valid prompts:
+ - Make instructions explicit and unambiguous
+ - Add relevant context and constraints
+ - Remove redundant information
+ - Maintain the core intent
+ - Ensure the prompt is self-contained
+ - Use professional language
- For invalid or unclear prompts:
- - Respond with a clear, professional guidance message
- - Keep responses concise and actionable
- - Maintain a helpful, constructive tone
- - Focus on what the user should provide
- - Use a standard template for consistency
+ For invalid or unclear prompts:
+ - Respond with clear, professional guidance
+ - Keep responses concise and actionable
+ - Maintain a helpful, constructive tone
+ - Focus on what the user should provide
+ - Use a standard template for consistency
- IMPORTANT: Your response must ONLY contain the enhanced prompt text.
- Do not include any explanations, metadata, or wrapper tags.
+ IMPORTANT: Your response must ONLY contain the enhanced prompt text.
+ Do not include any explanations, metadata, or wrapper tags.
-
- ${message}
-
- `,
+
+ ${message}
+
+ `,
},
],
env: context.cloudflare.env,
@@ -113,7 +114,7 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) {
for (const line of lines) {
try {
- const parsed = parseStreamPart(line);
+ const parsed = JSON.parse(line);
if (parsed.type === 'text') {
controller.enqueue(encoder.encode(parsed.value));
@@ -128,7 +129,12 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) {
const transformedStream = result.toDataStream().pipeThrough(transformStream);
- return new StreamingTextResponse(transformedStream);
+ return new Response(transformedStream, {
+ status: 200,
+ headers: {
+ 'Content-Type': 'text/plain; charset=utf-8',
+ },
+ });
} catch (error: unknown) {
console.log(error);
diff --git a/package.json b/package.json
index 878c44c..6b197f8 100644
--- a/package.json
+++ b/package.json
@@ -73,7 +73,7 @@
"@xterm/addon-fit": "^0.10.0",
"@xterm/addon-web-links": "^0.11.0",
"@xterm/xterm": "^5.5.0",
- "ai": "^3.4.33",
+ "ai": "^4.0.13",
"date-fns": "^3.6.0",
"diff": "^5.2.0",
"file-saver": "^2.0.5",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 17bdc89..efec898 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -141,8 +141,8 @@ importers:
specifier: ^5.5.0
version: 5.5.0
ai:
- specifier: ^3.4.33
- version: 3.4.33(react@18.3.1)(sswr@2.1.0(svelte@5.4.0))(svelte@5.4.0)(vue@3.5.13(typescript@5.7.2))(zod@3.23.8)
+ specifier: ^4.0.13
+ version: 4.0.18(react@18.3.1)(zod@3.23.8)
date-fns:
specifier: ^3.6.0
version: 3.6.0
@@ -351,15 +351,6 @@ packages:
zod:
optional: true
- '@ai-sdk/provider-utils@1.0.22':
- resolution: {integrity: sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.0.0
- peerDependenciesMeta:
- zod:
- optional: true
-
'@ai-sdk/provider-utils@1.0.9':
resolution: {integrity: sha512-yfdanjUiCJbtGoRGXrcrmXn0pTyDfRIeY6ozDG96D66f2wupZaZvAgKptUa3zDYXtUCQQvcNJ+tipBBfQD/UYA==}
engines: {node: '>=18'}
@@ -378,6 +369,15 @@ packages:
zod:
optional: true
+ '@ai-sdk/provider-utils@2.0.4':
+ resolution: {integrity: sha512-GMhcQCZbwM6RoZCri0MWeEWXRt/T+uCxsmHEsTwNvEH3GDjNzchfX25C8ftry2MeEOOn6KfqCLSKomcgK6RoOg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.0.0
+ peerDependenciesMeta:
+ zod:
+ optional: true
+
'@ai-sdk/provider@0.0.12':
resolution: {integrity: sha512-oOwPQD8i2Ynpn22cur4sk26FW3mSy6t6/X/K1Ay2yGBKYiSpRyLfObhOrZEGsXDx+3euKy4nEZ193R36NM+tpQ==}
engines: {node: '>=18'}
@@ -390,16 +390,16 @@ packages:
resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==}
engines: {node: '>=18'}
- '@ai-sdk/provider@0.0.26':
- resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==}
- engines: {node: '>=18'}
-
'@ai-sdk/provider@1.0.1':
resolution: {integrity: sha512-mV+3iNDkzUsZ0pR2jG0sVzU6xtQY5DtSCBy3JFycLp6PwjyLw/iodfL3MwdmMCRJWgs3dadcHejRnMvF9nGTBg==}
engines: {node: '>=18'}
- '@ai-sdk/react@0.0.70':
- resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==}
+ '@ai-sdk/provider@1.0.2':
+ resolution: {integrity: sha512-YYtP6xWQyaAf5LiWLJ+ycGTOeBLWrED7LUrvc+SQIWhGaneylqbaGsyQL7VouQUeQ4JZ1qKYZuhmi3W56HADPA==}
+ engines: {node: '>=18'}
+
+ '@ai-sdk/react@1.0.6':
+ resolution: {integrity: sha512-8Hkserq0Ge6AEi7N4hlv2FkfglAGbkoAXEZ8YSp255c3PbnZz6+/5fppw+aROmZMOfNwallSRuy1i/iPa2rBpQ==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
@@ -410,26 +410,8 @@ packages:
zod:
optional: true
- '@ai-sdk/solid@0.0.54':
- resolution: {integrity: sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==}
- engines: {node: '>=18'}
- peerDependencies:
- solid-js: ^1.7.7
- peerDependenciesMeta:
- solid-js:
- optional: true
-
- '@ai-sdk/svelte@0.0.57':
- resolution: {integrity: sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==}
- engines: {node: '>=18'}
- peerDependencies:
- svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
- peerDependenciesMeta:
- svelte:
- optional: true
-
- '@ai-sdk/ui-utils@0.0.50':
- resolution: {integrity: sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==}
+ '@ai-sdk/ui-utils@1.0.5':
+ resolution: {integrity: sha512-DGJSbDf+vJyWmFNexSPUsS1AAy7gtsmFmoSyNbNbJjwl9hRIf2dknfA1V0ahx6pg3NNklNYFm53L8Nphjovfvg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
@@ -437,15 +419,6 @@ packages:
zod:
optional: true
- '@ai-sdk/vue@0.0.59':
- resolution: {integrity: sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==}
- engines: {node: '>=18'}
- peerDependencies:
- vue: ^3.3.4
- peerDependenciesMeta:
- vue:
- optional: true
-
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -2370,35 +2343,6 @@ packages:
'@vitest/utils@2.1.8':
resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==}
- '@vue/compiler-core@3.5.13':
- resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
-
- '@vue/compiler-dom@3.5.13':
- resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
-
- '@vue/compiler-sfc@3.5.13':
- resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
-
- '@vue/compiler-ssr@3.5.13':
- resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
-
- '@vue/reactivity@3.5.13':
- resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
-
- '@vue/runtime-core@3.5.13':
- resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
-
- '@vue/runtime-dom@3.5.13':
- resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
-
- '@vue/server-renderer@3.5.13':
- resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
- peerDependencies:
- vue: 3.5.13
-
- '@vue/shared@3.5.13':
- resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
-
'@web3-storage/multipart-parser@1.0.0':
resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==}
@@ -2434,11 +2378,6 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn-typescript@1.4.13:
- resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==}
- peerDependencies:
- acorn: '>=8.9.0'
-
acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
@@ -2452,24 +2391,15 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- ai@3.4.33:
- resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==}
+ ai@4.0.18:
+ resolution: {integrity: sha512-BTWzalLNE1LQphEka5xzJXDs5v4xXy1Uzr7dAVk+C/CnO3WNpuMBgrCymwUv0VrWaWc8xMQuh+OqsT7P7JyekQ==}
engines: {node: '>=18'}
peerDependencies:
- openai: ^4.42.0
react: ^18 || ^19 || ^19.0.0-rc
- sswr: ^2.1.0
- svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
zod: ^3.0.0
peerDependenciesMeta:
- openai:
- optional: true
react:
optional: true
- sswr:
- optional: true
- svelte:
- optional: true
zod:
optional: true
@@ -2506,10 +2436,6 @@ packages:
resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
engines: {node: '>=10'}
- aria-query@5.3.2:
- resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
- engines: {node: '>= 0.4'}
-
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
@@ -2537,10 +2463,6 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- axobject-query@4.1.0:
- resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
- engines: {node: '>= 0.4'}
-
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -3149,9 +3071,6 @@ packages:
jiti:
optional: true
- esm-env@1.2.1:
- resolution: {integrity: sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==}
-
espree@10.3.0:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -3164,9 +3083,6 @@ packages:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
- esrap@1.2.3:
- resolution: {integrity: sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==}
-
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@@ -3820,9 +3736,6 @@ packages:
resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
engines: {node: '>=14'}
- locate-character@3.0.0:
- resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
-
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -5190,11 +5103,6 @@ packages:
resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- sswr@2.1.0:
- resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==}
- peerDependencies:
- svelte: ^4.0.0 || ^5.0.0-next.0
-
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
@@ -5285,23 +5193,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svelte@5.4.0:
- resolution: {integrity: sha512-2I/mjD8cXDpKfdfUK+T6yo/OzugMXIm8lhyJUFM5F/gICMYnkl3C/+4cOSpia8TqpDsi6Qfm5+fdmBNMNmaf2g==}
- engines: {node: '>=18'}
-
swr@2.2.5:
resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
- swrev@4.0.0:
- resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
-
- swrv@1.0.4:
- resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
- peerDependencies:
- vue: '>=3.2.26 < 4'
-
sync-child-process@1.0.2:
resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
engines: {node: '>=16.0.0'}
@@ -5721,14 +5617,6 @@ packages:
vm-browserify@1.1.2:
resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
- vue@3.5.13:
- resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
@@ -5843,9 +5731,6 @@ packages:
youch@3.3.4:
resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==}
- zimmerframe@1.1.2:
- resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
-
zod-to-json-schema@3.23.5:
resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==}
peerDependencies:
@@ -5908,15 +5793,6 @@ snapshots:
optionalDependencies:
zod: 3.23.8
- '@ai-sdk/provider-utils@1.0.22(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 0.0.26
- eventsource-parser: 1.1.2
- nanoid: 3.3.8
- secure-json-parse: 2.7.0
- optionalDependencies:
- zod: 3.23.8
-
'@ai-sdk/provider-utils@1.0.9(zod@3.23.8)':
dependencies:
'@ai-sdk/provider': 0.0.17
@@ -5935,6 +5811,15 @@ snapshots:
optionalDependencies:
zod: 3.23.8
+ '@ai-sdk/provider-utils@2.0.4(zod@3.23.8)':
+ dependencies:
+ '@ai-sdk/provider': 1.0.2
+ eventsource-parser: 3.0.0
+ nanoid: 3.3.8
+ secure-json-parse: 2.7.0
+ optionalDependencies:
+ zod: 3.23.8
+
'@ai-sdk/provider@0.0.12':
dependencies:
json-schema: 0.4.0
@@ -5947,61 +5832,32 @@ snapshots:
dependencies:
json-schema: 0.4.0
- '@ai-sdk/provider@0.0.26':
- dependencies:
- json-schema: 0.4.0
-
'@ai-sdk/provider@1.0.1':
dependencies:
json-schema: 0.4.0
- '@ai-sdk/react@0.0.70(react@18.3.1)(zod@3.23.8)':
+ '@ai-sdk/provider@1.0.2':
dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
+ json-schema: 0.4.0
+
+ '@ai-sdk/react@1.0.6(react@18.3.1)(zod@3.23.8)':
+ dependencies:
+ '@ai-sdk/provider-utils': 2.0.4(zod@3.23.8)
+ '@ai-sdk/ui-utils': 1.0.5(zod@3.23.8)
swr: 2.2.5(react@18.3.1)
throttleit: 2.1.0
optionalDependencies:
react: 18.3.1
zod: 3.23.8
- '@ai-sdk/solid@0.0.54(zod@3.23.8)':
+ '@ai-sdk/ui-utils@1.0.5(zod@3.23.8)':
dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/svelte@0.0.57(svelte@5.4.0)(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- sswr: 2.1.0(svelte@5.4.0)
- optionalDependencies:
- svelte: 5.4.0
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/ui-utils@0.0.50(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 0.0.26
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- json-schema: 0.4.0
- secure-json-parse: 2.7.0
+ '@ai-sdk/provider': 1.0.2
+ '@ai-sdk/provider-utils': 2.0.4(zod@3.23.8)
zod-to-json-schema: 3.23.5(zod@3.23.8)
optionalDependencies:
zod: 3.23.8
- '@ai-sdk/vue@0.0.59(vue@3.5.13(typescript@5.7.2))(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- swrv: 1.0.4(vue@3.5.13(typescript@5.7.2))
- optionalDependencies:
- vue: 3.5.13(typescript@5.7.2)
- transitivePeerDependencies:
- - zod
-
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.5
@@ -8045,60 +7901,6 @@ snapshots:
loupe: 3.1.2
tinyrainbow: 1.2.0
- '@vue/compiler-core@3.5.13':
- dependencies:
- '@babel/parser': 7.26.2
- '@vue/shared': 3.5.13
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.13':
- dependencies:
- '@vue/compiler-core': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/compiler-sfc@3.5.13':
- dependencies:
- '@babel/parser': 7.26.2
- '@vue/compiler-core': 3.5.13
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- estree-walker: 2.0.2
- magic-string: 0.30.14
- postcss: 8.4.49
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.13':
- dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/reactivity@3.5.13':
- dependencies:
- '@vue/shared': 3.5.13
-
- '@vue/runtime-core@3.5.13':
- dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/runtime-dom@3.5.13':
- dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/runtime-core': 3.5.13
- '@vue/shared': 3.5.13
- csstype: 3.1.3
-
- '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))':
- dependencies:
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- vue: 3.5.13(typescript@5.7.2)
-
- '@vue/shared@3.5.13': {}
-
'@web3-storage/multipart-parser@1.0.0': {}
'@webcontainer/api@1.3.0-internal.10': {}
@@ -8129,10 +7931,6 @@ snapshots:
dependencies:
acorn: 8.14.0
- acorn-typescript@1.4.13(acorn@8.14.0):
- dependencies:
- acorn: 8.14.0
-
acorn-walk@8.3.4:
dependencies:
acorn: 8.14.0
@@ -8144,29 +7942,18 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
- ai@3.4.33(react@18.3.1)(sswr@2.1.0(svelte@5.4.0))(svelte@5.4.0)(vue@3.5.13(typescript@5.7.2))(zod@3.23.8):
+ ai@4.0.18(react@18.3.1)(zod@3.23.8):
dependencies:
- '@ai-sdk/provider': 0.0.26
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8)
- '@ai-sdk/solid': 0.0.54(zod@3.23.8)
- '@ai-sdk/svelte': 0.0.57(svelte@5.4.0)(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.7.2))(zod@3.23.8)
+ '@ai-sdk/provider': 1.0.2
+ '@ai-sdk/provider-utils': 2.0.4(zod@3.23.8)
+ '@ai-sdk/react': 1.0.6(react@18.3.1)(zod@3.23.8)
+ '@ai-sdk/ui-utils': 1.0.5(zod@3.23.8)
'@opentelemetry/api': 1.9.0
- eventsource-parser: 1.1.2
- json-schema: 0.4.0
jsondiffpatch: 0.6.0
- secure-json-parse: 2.7.0
zod-to-json-schema: 3.23.5(zod@3.23.8)
optionalDependencies:
react: 18.3.1
- sswr: 2.1.0(svelte@5.4.0)
- svelte: 5.4.0
zod: 3.23.8
- transitivePeerDependencies:
- - solid-js
- - vue
ajv@6.12.6:
dependencies:
@@ -8198,8 +7985,6 @@ snapshots:
dependencies:
tslib: 2.8.1
- aria-query@5.3.2: {}
-
array-flatten@1.1.1: {}
as-table@1.0.55:
@@ -8230,8 +8015,6 @@ snapshots:
dependencies:
possible-typed-array-names: 1.0.0
- axobject-query@4.1.0: {}
-
bail@2.0.2: {}
balanced-match@1.0.2: {}
@@ -8931,8 +8714,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- esm-env@1.2.1: {}
-
espree@10.3.0:
dependencies:
acorn: 8.14.0
@@ -8949,11 +8730,6 @@ snapshots:
dependencies:
estraverse: 5.3.0
- esrap@1.2.3:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
- '@types/estree': 1.0.6
-
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
@@ -9680,8 +9456,6 @@ snapshots:
mlly: 1.7.3
pkg-types: 1.2.1
- locate-character@3.0.0: {}
-
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -11492,11 +11266,6 @@ snapshots:
dependencies:
minipass: 7.1.2
- sswr@2.1.0(svelte@5.4.0):
- dependencies:
- svelte: 5.4.0
- swrev: 4.0.0
-
stackback@0.0.2: {}
stacktracey@2.1.8:
@@ -11587,34 +11356,12 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- svelte@5.4.0:
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@jridgewell/sourcemap-codec': 1.5.0
- '@types/estree': 1.0.6
- acorn: 8.14.0
- acorn-typescript: 1.4.13(acorn@8.14.0)
- aria-query: 5.3.2
- axobject-query: 4.1.0
- esm-env: 1.2.1
- esrap: 1.2.3
- is-reference: 3.0.3
- locate-character: 3.0.0
- magic-string: 0.30.14
- zimmerframe: 1.1.2
-
swr@2.2.5(react@18.3.1):
dependencies:
client-only: 0.0.1
react: 18.3.1
use-sync-external-store: 1.2.2(react@18.3.1)
- swrev@4.0.0: {}
-
- swrv@1.0.4(vue@3.5.13(typescript@5.7.2)):
- dependencies:
- vue: 3.5.13(typescript@5.7.2)
-
sync-child-process@1.0.2:
dependencies:
sync-message-port: 1.1.3
@@ -12092,16 +11839,6 @@ snapshots:
vm-browserify@1.1.2: {}
- vue@3.5.13(typescript@5.7.2):
- dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-sfc': 3.5.13
- '@vue/runtime-dom': 3.5.13
- '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2))
- '@vue/shared': 3.5.13
- optionalDependencies:
- typescript: 5.7.2
-
w3c-keyname@2.2.8: {}
wcwidth@1.0.1:
@@ -12214,8 +11951,6 @@ snapshots:
mustache: 4.2.0
stacktracey: 2.1.8
- zimmerframe@1.1.2: {}
-
zod-to-json-schema@3.23.5(zod@3.23.8):
dependencies:
zod: 3.23.8