Cole Medin commited on
Commit
90a206f
·
1 Parent(s): ffa9f11

Added the ability to use practically any LLM you can dream of within Bolt.new

Browse files
.env.example ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Rename this file to .env.local once you have filled in the below environment variables!
2
+
3
+ # Get your GROQ API Key here -
4
+ # https://console.groq.com/keys
5
+ # You only need this environment variable set if you want to use Groq models
6
+ GROQ_API_KEY=
7
+
8
+ # Get your Open AI API Key by following these instructions -
9
+ # https://help.openai.com/en/articles/4936850-where-do-i-find-my-openai-api-key
10
+ # You only need this environment variable set if you want to use GPT models
11
+ OPENAI_API_KEY=
12
+
13
+ # Get your Anthropic API Key in your account settings -
14
+ # https://console.anthropic.com/settings/keys
15
+ # You only need this environment variable set if you want to use Claude models
16
+ ANTHROPIC_API_KEY=
17
+
18
+ # Include this environment variable if you want more logging for debugging locally
19
+ VITE_LOG_LEVEL=debug
.gitignore CHANGED
@@ -24,7 +24,8 @@ dist-ssr
24
 
25
  /.cache
26
  /build
27
- .env*
 
28
  *.vars
29
  .wrangler
30
  _worker.bundle
 
24
 
25
  /.cache
26
  /build
27
+ .env.local
28
+ .env
29
  *.vars
30
  .wrangler
31
  _worker.bundle
README.md CHANGED
@@ -1,5 +1,9 @@
1
  [![Bolt.new: AI-Powered Full-Stack Web Development in the Browser](./public/social_preview_index.jpg)](https://bolt.new)
2
 
 
 
 
 
3
  # Bolt.new: AI-Powered Full-Stack Web Development in the Browser
4
 
5
  Bolt.new is an AI-powered web development agent that allows you to prompt, run, edit, and deploy full-stack applications directly from your browser—no local setup required. If you're here to build your own AI-powered web dev agent using the Bolt open source codebase, [click here to get started!](./CONTRIBUTING.md)
@@ -21,34 +25,80 @@ Whether you’re an experienced developer, a PM or designer, Bolt.new allows you
21
 
22
  For developers interested in building their own AI-powered development tools with WebContainers, check out the open-source Bolt codebase in this repo!
23
 
24
- ## Tips and Tricks
25
 
26
- Here are some tips to get the most out of Bolt.new:
27
 
28
- - **Be specific about your stack**: If you want to use specific frameworks or libraries (like Astro, Tailwind, ShadCN, or any other popular JavaScript framework), mention them in your initial prompt to ensure Bolt scaffolds the project accordingly.
 
29
 
30
- - **Use the enhance prompt icon**: Before sending your prompt, try clicking the 'enhance' icon to have the AI model help you refine your prompt, then edit the results before submitting.
31
 
32
- - **Scaffold the basics first, then add features**: Make sure the basic structure of your application is in place before diving into more advanced functionality. This helps Bolt understand the foundation of your project and ensure everything is wired up right before building out more advanced functionality.
33
 
34
- - **Batch simple instructions**: Save time by combining simple instructions into one message. For example, you can ask Bolt to change the color scheme, add mobile responsiveness, and restart the dev server, all in one go saving you time and reducing API credit consumption significantly.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
- ## FAQs
37
 
38
- **Where do I sign up for a paid plan?**
39
- Bolt.new is free to get started. If you need more AI tokens or want private projects, you can purchase a paid subscription in your [Bolt.new](https://bolt.new) settings, in the lower-left hand corner of the application.
40
 
41
- **What happens if I hit the free usage limit?**
42
- Once your free daily token limit is reached, AI interactions are paused until the next day or until you upgrade your plan.
43
 
44
- **Is Bolt in beta?**
45
- Yes, Bolt.new is in beta, and we are actively improving it based on feedback.
46
 
47
- **How can I report Bolt.new issues?**
48
- Check out the [Issues section](https://github.com/bolt.new/issues) to report an issue or request a new feature. Please use the search feature to check if someone else has already submitted the same issue/request.
49
 
50
- **What frameworks/libraries currently work on Bolt?**
51
- Bolt.new supports most popular JavaScript frameworks and libraries. If it runs on StackBlitz, it will run on Bolt.new as well.
 
 
 
 
 
 
52
 
53
- **How can I add make sure my framework/project works well in bolt?**
54
- We are excited to work with the JavaScript ecosystem to improve functionality in Bolt. Reach out to us via [[email protected]](mailto:[email protected]) to discuss how we can partner!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  [![Bolt.new: AI-Powered Full-Stack Web Development in the Browser](./public/social_preview_index.jpg)](https://bolt.new)
2
 
3
+ # Bolt.new Fork by Cole Medin
4
+
5
+ This fork of bolt.new allows you to choose the LLM that you use for each prompt! Currently you can use OpenAI, Anthropic, Ollama, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK! See instructions below for running this locally and extending to include more models.
6
+
7
  # Bolt.new: AI-Powered Full-Stack Web Development in the Browser
8
 
9
  Bolt.new is an AI-powered web development agent that allows you to prompt, run, edit, and deploy full-stack applications directly from your browser—no local setup required. If you're here to build your own AI-powered web dev agent using the Bolt open source codebase, [click here to get started!](./CONTRIBUTING.md)
 
25
 
26
  For developers interested in building their own AI-powered development tools with WebContainers, check out the open-source Bolt codebase in this repo!
27
 
28
+ ## Prerequisites
29
 
30
+ Before you begin, ensure you have the following installed:
31
 
32
+ - Node.js (v20.15.1)
33
+ - pnpm (v9.4.0)
34
 
35
+ ## Setup
36
 
37
+ 1. Clone the repository (if you haven't already):
38
 
39
+ ```bash
40
+ git clone https://github.com/coleam00/bolt.new-any-llm.git
41
+ ```
42
+
43
+ 2. Install dependencies:
44
+
45
+ ```bash
46
+ pnpm install
47
+ ```
48
+
49
+ 3. Rename `.env.example` to .env.local and add your LLM API keys (you only have to set the ones you want to use and Ollama doesn't need an API key because it runs locally on your computer):
50
+
51
+ ```
52
+ GROQ_API_KEY=XXX
53
+ OPENAI_API_KEY=XXX
54
+ ANTHROPIC_API_KEY=XXX
55
+ ```
56
+
57
+ Optionally, you can set the debug level:
58
+
59
+ ```
60
+ VITE_LOG_LEVEL=debug
61
+ ```
62
+
63
+ **Important**: Never commit your `.env.local` file to version control. It's already included in .gitignore.
64
 
65
+ ## Adding New LLMs:
66
 
67
+ To make new LLMs available to use in this version of Bolt.new, head on over to `app/utils/constants.ts` and find the constant MODEL_LIST. Each element in this array is an object that has the model ID for the name (get this from the provider's API documentation), a lable for the frontend model dropdown, and the provider.
 
68
 
69
+ By default, Anthropic, OpenAI, Groq, and Ollama are implemented as providers, but the YouTube video for this repo covers how to extend this to work with more providers if you wish!
 
70
 
71
+ When you add a new model to the MODEL_LIST array, it will immediately be available to use when you run the app locally or reload it. For Ollama models, make sure you have the model installed already before trying to use it here!
 
72
 
73
+ ## Available Scripts
 
74
 
75
+ - `pnpm run dev`: Starts the development server.
76
+ - `pnpm run build`: Builds the project.
77
+ - `pnpm run start`: Runs the built application locally using Wrangler Pages. This script uses `bindings.sh` to set up necessary bindings so you don't have to duplicate environment variables.
78
+ - `pnpm run preview`: Builds the project and then starts it locally, useful for testing the production build. Note, HTTP streaming currently doesn't work as expected with `wrangler pages dev`.
79
+ - `pnpm test`: Runs the test suite using Vitest.
80
+ - `pnpm run typecheck`: Runs TypeScript type checking.
81
+ - `pnpm run typegen`: Generates TypeScript types using Wrangler.
82
+ - `pnpm run deploy`: Builds the project and deploys it to Cloudflare Pages.
83
 
84
+ ## Development
85
+
86
+ To start the development server:
87
+
88
+ ```bash
89
+ pnpm run dev
90
+ ```
91
+
92
+ This will start the Remix Vite development server. You will need Google Chrome Canary to run this locally! It's a very easy install and a good browser for web development anyway.
93
+
94
+ ## Tips and Tricks
95
+
96
+ Here are some tips to get the most out of Bolt.new:
97
+
98
+ - **Be specific about your stack**: If you want to use specific frameworks or libraries (like Astro, Tailwind, ShadCN, or any other popular JavaScript framework), mention them in your initial prompt to ensure Bolt scaffolds the project accordingly.
99
+
100
+ - **Use the enhance prompt icon**: Before sending your prompt, try clicking the 'enhance' icon to have the AI model help you refine your prompt, then edit the results before submitting.
101
+
102
+ - **Scaffold the basics first, then add features**: Make sure the basic structure of your application is in place before diving into more advanced functionality. This helps Bolt understand the foundation of your project and ensure everything is wired up right before building out more advanced functionality.
103
+
104
+ - **Batch simple instructions**: Save time by combining simple instructions into one message. For example, you can ask Bolt to change the color scheme, add mobile responsiveness, and restart the dev server, all in one go saving you time and reducing API credit consumption significantly.
app/components/chat/BaseChat.tsx CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import type { Message } from 'ai';
2
  import React, { type RefCallback } from 'react';
3
  import { ClientOnly } from 'remix-utils/client-only';
@@ -5,11 +7,22 @@ import { Menu } from '~/components/sidebar/Menu.client';
5
  import { IconButton } from '~/components/ui/IconButton';
6
  import { Workbench } from '~/components/workbench/Workbench.client';
7
  import { classNames } from '~/utils/classNames';
 
8
  import { Messages } from './Messages.client';
9
  import { SendButton } from './SendButton.client';
10
 
11
  import styles from './BaseChat.module.scss';
12
 
 
 
 
 
 
 
 
 
 
 
13
  interface BaseChatProps {
14
  textareaRef?: React.RefObject<HTMLTextAreaElement> | undefined;
15
  messageRef?: RefCallback<HTMLDivElement> | undefined;
@@ -21,22 +34,14 @@ interface BaseChatProps {
21
  enhancingPrompt?: boolean;
22
  promptEnhanced?: boolean;
23
  input?: string;
 
 
24
  handleStop?: () => void;
25
  sendMessage?: (event: React.UIEvent, messageInput?: string) => void;
26
  handleInputChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
27
  enhancePrompt?: () => void;
28
  }
29
 
30
- const EXAMPLE_PROMPTS = [
31
- { text: 'Build a todo app in React using Tailwind' },
32
- { text: 'Build a simple blog using Astro' },
33
- { text: 'Create a cookie consent form using Material UI' },
34
- { text: 'Make a space invaders game' },
35
- { text: 'How do I center a div?' },
36
- ];
37
-
38
- const TEXTAREA_MIN_HEIGHT = 76;
39
-
40
  export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
41
  (
42
  {
@@ -50,6 +55,8 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
50
  promptEnhanced = false,
51
  messages,
52
  input = '',
 
 
53
  sendMessage,
54
  handleInputChange,
55
  enhancePrompt,
@@ -103,6 +110,20 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
103
  'sticky bottom-0': chatStarted,
104
  })}
105
  >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  <div
107
  className={classNames(
108
  'shadow-sm border border-bolt-elements-borderColor bg-bolt-elements-prompt-background backdrop-filter backdrop-blur-[8px] rounded-lg overflow-hidden',
@@ -210,4 +231,4 @@ export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
210
  </div>
211
  );
212
  },
213
- );
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import type { Message } from 'ai';
4
  import React, { type RefCallback } from 'react';
5
  import { ClientOnly } from 'remix-utils/client-only';
 
7
  import { IconButton } from '~/components/ui/IconButton';
8
  import { Workbench } from '~/components/workbench/Workbench.client';
9
  import { classNames } from '~/utils/classNames';
10
+ import { MODEL_LIST } from '~/utils/constants';
11
  import { Messages } from './Messages.client';
12
  import { SendButton } from './SendButton.client';
13
 
14
  import styles from './BaseChat.module.scss';
15
 
16
+ const EXAMPLE_PROMPTS = [
17
+ { text: 'Build a todo app in React using Tailwind' },
18
+ { text: 'Build a simple blog using Astro' },
19
+ { text: 'Create a cookie consent form using Material UI' },
20
+ { text: 'Make a space invaders game' },
21
+ { text: 'How do I center a div?' },
22
+ ];
23
+
24
+ const TEXTAREA_MIN_HEIGHT = 76;
25
+
26
  interface BaseChatProps {
27
  textareaRef?: React.RefObject<HTMLTextAreaElement> | undefined;
28
  messageRef?: RefCallback<HTMLDivElement> | undefined;
 
34
  enhancingPrompt?: boolean;
35
  promptEnhanced?: boolean;
36
  input?: string;
37
+ model: string;
38
+ setModel: (model: string) => void;
39
  handleStop?: () => void;
40
  sendMessage?: (event: React.UIEvent, messageInput?: string) => void;
41
  handleInputChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
42
  enhancePrompt?: () => void;
43
  }
44
 
 
 
 
 
 
 
 
 
 
 
45
  export const BaseChat = React.forwardRef<HTMLDivElement, BaseChatProps>(
46
  (
47
  {
 
55
  promptEnhanced = false,
56
  messages,
57
  input = '',
58
+ model,
59
+ setModel,
60
  sendMessage,
61
  handleInputChange,
62
  enhancePrompt,
 
110
  'sticky bottom-0': chatStarted,
111
  })}
112
  >
113
+ {/* Model selection dropdown */}
114
+ <div className="mb-2">
115
+ <select
116
+ value={model}
117
+ onChange={(e) => setModel(e.target.value)}
118
+ className="w-full p-2 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary focus:outline-none"
119
+ >
120
+ {MODEL_LIST.map((modelOption) => (
121
+ <option key={modelOption.name} value={modelOption.name}>
122
+ {modelOption.label}
123
+ </option>
124
+ ))}
125
+ </select>
126
+ </div>
127
  <div
128
  className={classNames(
129
  'shadow-sm border border-bolt-elements-borderColor bg-bolt-elements-prompt-background backdrop-filter backdrop-blur-[8px] rounded-lg overflow-hidden',
 
231
  </div>
232
  );
233
  },
234
+ );
app/components/chat/Chat.client.tsx CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import { useStore } from '@nanostores/react';
2
  import type { Message } from 'ai';
3
  import { useChat } from 'ai/react';
@@ -9,6 +11,7 @@ import { useChatHistory } from '~/lib/persistence';
9
  import { chatStore } from '~/lib/stores/chat';
10
  import { workbenchStore } from '~/lib/stores/workbench';
11
  import { fileModificationsToHTML } from '~/utils/diff';
 
12
  import { cubicEasingFn } from '~/utils/easings';
13
  import { createScopedLogger, renderLogger } from '~/utils/logger';
14
  import { BaseChat } from './BaseChat';
@@ -70,6 +73,7 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp
70
  const textareaRef = useRef<HTMLTextAreaElement>(null);
71
 
72
  const [chatStarted, setChatStarted] = useState(initialMessages.length > 0);
 
73
 
74
  const { showChat } = useStore(chatStore);
75
 
@@ -178,7 +182,7 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp
178
  * manually reset the input and we'd have to manually pass in file attachments. However, those
179
  * aren't relevant here.
180
  */
181
- append({ role: 'user', content: `${diff}\n\n${_input}` });
182
 
183
  /**
184
  * After sending a new message we reset all modifications since the model
@@ -186,7 +190,7 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp
186
  */
187
  workbenchStore.resetAllFileModifications();
188
  } else {
189
- append({ role: 'user', content: _input });
190
  }
191
 
192
  setInput('');
@@ -209,6 +213,8 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp
209
  enhancingPrompt={enhancingPrompt}
210
  promptEnhanced={promptEnhanced}
211
  sendMessage={sendMessage}
 
 
212
  messageRef={messageRef}
213
  scrollRef={scrollRef}
214
  handleInputChange={handleInputChange}
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import { useStore } from '@nanostores/react';
4
  import type { Message } from 'ai';
5
  import { useChat } from 'ai/react';
 
11
  import { chatStore } from '~/lib/stores/chat';
12
  import { workbenchStore } from '~/lib/stores/workbench';
13
  import { fileModificationsToHTML } from '~/utils/diff';
14
+ import { DEFAULT_MODEL } from '~/utils/constants';
15
  import { cubicEasingFn } from '~/utils/easings';
16
  import { createScopedLogger, renderLogger } from '~/utils/logger';
17
  import { BaseChat } from './BaseChat';
 
73
  const textareaRef = useRef<HTMLTextAreaElement>(null);
74
 
75
  const [chatStarted, setChatStarted] = useState(initialMessages.length > 0);
76
+ const [model, setModel] = useState(DEFAULT_MODEL);
77
 
78
  const { showChat } = useStore(chatStore);
79
 
 
182
  * manually reset the input and we'd have to manually pass in file attachments. However, those
183
  * aren't relevant here.
184
  */
185
+ append({ role: 'user', content: `[Model: ${model}]\n\n${diff}\n\n${_input}` });
186
 
187
  /**
188
  * After sending a new message we reset all modifications since the model
 
190
  */
191
  workbenchStore.resetAllFileModifications();
192
  } else {
193
+ append({ role: 'user', content: `[Model: ${model}]\n\n${_input}` });
194
  }
195
 
196
  setInput('');
 
213
  enhancingPrompt={enhancingPrompt}
214
  promptEnhanced={promptEnhanced}
215
  sendMessage={sendMessage}
216
+ model={model}
217
+ setModel={setModel}
218
  messageRef={messageRef}
219
  scrollRef={scrollRef}
220
  handleInputChange={handleInputChange}
app/components/chat/UserMessage.tsx CHANGED
@@ -1,4 +1,7 @@
 
 
1
  import { modificationsRegex } from '~/utils/diff';
 
2
  import { Markdown } from './Markdown';
3
 
4
  interface UserMessageProps {
@@ -14,5 +17,5 @@ export function UserMessage({ content }: UserMessageProps) {
14
  }
15
 
16
  function sanitizeUserMessage(content: string) {
17
- return content.replace(modificationsRegex, '').trim();
18
  }
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import { modificationsRegex } from '~/utils/diff';
4
+ import { MODEL_REGEX } from '~/utils/constants';
5
  import { Markdown } from './Markdown';
6
 
7
  interface UserMessageProps {
 
17
  }
18
 
19
  function sanitizeUserMessage(content: string) {
20
+ return content.replace(modificationsRegex, '').replace(MODEL_REGEX, '').trim();
21
  }
app/lib/.server/llm/api-key.ts CHANGED
@@ -1,9 +1,20 @@
 
 
1
  import { env } from 'node:process';
2
 
3
- export function getAPIKey(cloudflareEnv: Env) {
4
  /**
5
  * The `cloudflareEnv` is only used when deployed or when previewing locally.
6
  * In development the environment variables are available through `env`.
7
  */
8
- return env.ANTHROPIC_API_KEY || cloudflareEnv.ANTHROPIC_API_KEY;
 
 
 
 
 
 
 
 
 
9
  }
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import { env } from 'node:process';
4
 
5
+ export function getAPIKey(cloudflareEnv: Env, provider: string) {
6
  /**
7
  * The `cloudflareEnv` is only used when deployed or when previewing locally.
8
  * In development the environment variables are available through `env`.
9
  */
10
+ switch (provider) {
11
+ case 'Anthropic':
12
+ return env.ANTHROPIC_API_KEY || cloudflareEnv.ANTHROPIC_API_KEY;
13
+ case 'OpenAI':
14
+ return env.OPENAI_API_KEY || cloudflareEnv.OPENAI_API_KEY;
15
+ case 'Groq':
16
+ return env.GROQ_API_KEY || cloudflareEnv.GROQ_API_KEY;
17
+ default:
18
+ return "";
19
+ }
20
  }
app/lib/.server/llm/model.ts CHANGED
@@ -1,9 +1,50 @@
 
 
 
1
  import { createAnthropic } from '@ai-sdk/anthropic';
 
 
2
 
3
- export function getAnthropicModel(apiKey: string) {
4
  const anthropic = createAnthropic({
5
  apiKey,
6
  });
7
 
8
- return anthropic('claude-3-5-sonnet-20240620');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  }
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
+ import { getAPIKey } from '~/lib/.server/llm/api-key';
4
  import { createAnthropic } from '@ai-sdk/anthropic';
5
+ import { createOpenAI } from '@ai-sdk/openai';
6
+ import { ollama } from 'ollama-ai-provider';
7
 
8
+ export function getAnthropicModel(apiKey: string, model: string) {
9
  const anthropic = createAnthropic({
10
  apiKey,
11
  });
12
 
13
+ return anthropic(model);
14
+ }
15
+
16
+ export function getOpenAIModel(apiKey: string, model: string) {
17
+ const openai = createOpenAI({
18
+ apiKey,
19
+ });
20
+
21
+ return openai(model);
22
+ }
23
+
24
+ export function getGroqModel(apiKey: string, model: string) {
25
+ const openai = createOpenAI({
26
+ baseURL: 'https://api.groq.com/openai/v1',
27
+ apiKey,
28
+ });
29
+
30
+ return openai(model);
31
+ }
32
+
33
+ export function getOllamaModel(model: string) {
34
+ return ollama(model);
35
+ }
36
+
37
+ export function getModel(provider: string, model: string, env: Env) {
38
+ const apiKey = getAPIKey(env, provider);
39
+
40
+ switch (provider) {
41
+ case 'Anthropic':
42
+ return getAnthropicModel(apiKey, model);
43
+ case 'OpenAI':
44
+ return getOpenAIModel(apiKey, model);
45
+ case 'Groq':
46
+ return getGroqModel(apiKey, model);
47
+ default:
48
+ return getOllamaModel(model);
49
+ }
50
  }
app/lib/.server/llm/stream-text.ts CHANGED
@@ -1,8 +1,10 @@
 
 
1
  import { streamText as _streamText, convertToCoreMessages } from 'ai';
2
- import { getAPIKey } from '~/lib/.server/llm/api-key';
3
- import { getAnthropicModel } from '~/lib/.server/llm/model';
4
  import { MAX_TOKENS } from './constants';
5
  import { getSystemPrompt } from './prompts';
 
6
 
7
  interface ToolResult<Name extends string, Args, Result> {
8
  toolCallId: string;
@@ -15,21 +17,50 @@ interface Message {
15
  role: 'user' | 'assistant';
16
  content: string;
17
  toolInvocations?: ToolResult<string, unknown, unknown>[];
 
18
  }
19
 
20
  export type Messages = Message[];
21
 
22
  export type StreamingOptions = Omit<Parameters<typeof _streamText>[0], 'model'>;
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  export function streamText(messages: Messages, env: Env, options?: StreamingOptions) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  return _streamText({
26
- model: getAnthropicModel(getAPIKey(env)),
27
  system: getSystemPrompt(),
28
  maxTokens: MAX_TOKENS,
29
- headers: {
30
- 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',
31
- },
32
- messages: convertToCoreMessages(messages),
33
  ...options,
34
  });
35
  }
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import { streamText as _streamText, convertToCoreMessages } from 'ai';
4
+ import { getModel } from '~/lib/.server/llm/model';
 
5
  import { MAX_TOKENS } from './constants';
6
  import { getSystemPrompt } from './prompts';
7
+ import { MODEL_LIST, DEFAULT_MODEL, DEFAULT_PROVIDER } from '~/utils/constants';
8
 
9
  interface ToolResult<Name extends string, Args, Result> {
10
  toolCallId: string;
 
17
  role: 'user' | 'assistant';
18
  content: string;
19
  toolInvocations?: ToolResult<string, unknown, unknown>[];
20
+ model?: string;
21
  }
22
 
23
  export type Messages = Message[];
24
 
25
  export type StreamingOptions = Omit<Parameters<typeof _streamText>[0], 'model'>;
26
 
27
+ function extractModelFromMessage(message: Message): { model: string; content: string } {
28
+ const modelRegex = /^\[Model: (.*?)\]\n\n/;
29
+ const match = message.content.match(modelRegex);
30
+
31
+ if (match) {
32
+ const model = match[1];
33
+ const content = message.content.replace(modelRegex, '');
34
+ return { model, content };
35
+ }
36
+
37
+ // Default model if not specified
38
+ return { model: DEFAULT_MODEL, content: message.content };
39
+ }
40
+
41
  export function streamText(messages: Messages, env: Env, options?: StreamingOptions) {
42
+ let currentModel = DEFAULT_MODEL;
43
+ const processedMessages = messages.map((message) => {
44
+ if (message.role === 'user') {
45
+ const { model, content } = extractModelFromMessage(message);
46
+ if (model && MODEL_LIST.find((m) => m.name === model)) {
47
+ currentModel = model; // Update the current model
48
+ }
49
+ return { ...message, content };
50
+ }
51
+ return message;
52
+ });
53
+
54
+ const provider = MODEL_LIST.find((model) => model.name === currentModel)?.provider || DEFAULT_PROVIDER;
55
+
56
  return _streamText({
57
+ model: getModel(provider, currentModel, env),
58
  system: getSystemPrompt(),
59
  maxTokens: MAX_TOKENS,
60
+ // headers: {
61
+ // 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',
62
+ // },
63
+ messages: convertToCoreMessages(processedMessages),
64
  ...options,
65
  });
66
  }
app/routes/api.chat.ts CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import { type ActionFunctionArgs } from '@remix-run/cloudflare';
2
  import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants';
3
  import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts';
 
1
+ // @ts-nocheck
2
+ // Preventing TS checks with files presented in the video for a better presentation.
3
  import { type ActionFunctionArgs } from '@remix-run/cloudflare';
4
  import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants';
5
  import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts';
app/utils/constants.ts CHANGED
@@ -1,3 +1,32 @@
1
  export const WORK_DIR_NAME = 'project';
2
  export const WORK_DIR = `/home/${WORK_DIR_NAME}`;
3
  export const MODIFICATIONS_TAG_NAME = 'bolt_file_modifications';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  export const WORK_DIR_NAME = 'project';
2
  export const WORK_DIR = `/home/${WORK_DIR_NAME}`;
3
  export const MODIFICATIONS_TAG_NAME = 'bolt_file_modifications';
4
+ export const MODEL_REGEX = /^\[Model: (.*?)\]\n\n/;
5
+ export const DEFAULT_MODEL = "claude-3-5-sonnet-20240620";
6
+ export const DEFAULT_PROVIDER = "Anthropic";
7
+ export const MODEL_LIST = [
8
+ { name: 'claude-3-5-sonnet-20240620', label: 'Claude 3.5 Sonnet', provider: 'Anthropic' },
9
+ { name: 'gpt-4o', label: 'GPT-4o', provider: 'OpenAI' },
10
+ { name: 'qwen2.5-coder:7b', label: 'Qwen 2.5 Coder 7b', provider: 'Ollama' },
11
+ { name: 'qwen2.5-coder:1.5b', label: 'Qwen 2.5 Coder 1.5b', provider: 'Ollama' },
12
+ { name: 'deepseek-coder-v2:236b', label: 'DeepSeek-Coder-V2 236b', provider: 'Ollama' },
13
+ { name: 'deepseek-coder-v2:16b', label: 'DeepSeek-Coder-V2 16b', provider: 'Ollama' },
14
+ { name: 'codebooga', label: 'Codebooga 34b', provider: 'Ollama' },
15
+ { name: 'phind-codellama', label: 'Phind CodeLlama 34b', provider: 'Ollama' },
16
+ { name: 'codellama:70b', label: 'Code Llama 70b', provider: 'Ollama' },
17
+ { name: 'codellama:34b', label: 'Code Llama 34b', provider: 'Ollama' },
18
+ { name: 'codellama:13b', label: 'Code Llama 13b', provider: 'Ollama' },
19
+ { name: 'codellama:7b', label: 'Code Llama 7b', provider: 'Ollama' },
20
+ { name: 'llama-3.1-70b-versatile', label: 'Llama 3.1 70b (Groq)', provider: 'Groq' },
21
+ { name: 'llama-3.1-8b-instant', label: 'Llama 3.1 8b (Groq)', provider: 'Groq' },
22
+ { name: 'llama-3.2-11b-vision-preview', label: 'Llama 3.2 11b (Groq)', provider: 'Groq' },
23
+ { name: 'llama-3.2-3b-preview', label: 'Llama 3.2 3b (Groq)', provider: 'Groq' },
24
+ { name: 'llama-3.2-1b-preview', label: 'Llama 3.2 1b (Groq)', provider: 'Groq' },
25
+ { name: 'claude-3-opus-20240229', label: 'Claude 3 Opus', provider: 'Anthropic' },
26
+ { name: 'claude-3-sonnet-20240229', label: 'Claude 3 Sonnet', provider: 'Anthropic' },
27
+ { name: 'claude-3-haiku-20240307', label: 'Claude 3 Haiku', provider: 'Anthropic' },
28
+ { name: 'gpt-4o-mini', label: 'GPT-4o Mini', provider: 'OpenAI' },
29
+ { name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI' },
30
+ { name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI' },
31
+ { name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI' },
32
+ ];
package.json CHANGED
@@ -24,6 +24,7 @@
24
  },
25
  "dependencies": {
26
  "@ai-sdk/anthropic": "^0.0.39",
 
27
  "@codemirror/autocomplete": "^6.17.0",
28
  "@codemirror/commands": "^6.6.0",
29
  "@codemirror/lang-cpp": "^6.0.2",
@@ -54,7 +55,7 @@
54
  "@xterm/addon-fit": "^0.10.0",
55
  "@xterm/addon-web-links": "^0.11.0",
56
  "@xterm/xterm": "^5.5.0",
57
- "ai": "^3.3.4",
58
  "date-fns": "^3.6.0",
59
  "diff": "^5.2.0",
60
  "framer-motion": "^11.2.12",
@@ -62,6 +63,7 @@
62
  "istextorbinary": "^9.5.0",
63
  "jose": "^5.6.3",
64
  "nanostores": "^0.10.3",
 
65
  "react": "^18.2.0",
66
  "react-dom": "^18.2.0",
67
  "react-hotkeys-hook": "^4.5.0",
 
24
  },
25
  "dependencies": {
26
  "@ai-sdk/anthropic": "^0.0.39",
27
+ "@ai-sdk/openai": "^0.0.66",
28
  "@codemirror/autocomplete": "^6.17.0",
29
  "@codemirror/commands": "^6.6.0",
30
  "@codemirror/lang-cpp": "^6.0.2",
 
55
  "@xterm/addon-fit": "^0.10.0",
56
  "@xterm/addon-web-links": "^0.11.0",
57
  "@xterm/xterm": "^5.5.0",
58
+ "ai": "^3.4.9",
59
  "date-fns": "^3.6.0",
60
  "diff": "^5.2.0",
61
  "framer-motion": "^11.2.12",
 
63
  "istextorbinary": "^9.5.0",
64
  "jose": "^5.6.3",
65
  "nanostores": "^0.10.3",
66
+ "ollama-ai-provider": "^0.15.2",
67
  "react": "^18.2.0",
68
  "react-dom": "^18.2.0",
69
  "react-hotkeys-hook": "^4.5.0",
pnpm-lock.yaml CHANGED
@@ -14,6 +14,9 @@ importers:
14
  '@ai-sdk/anthropic':
15
  specifier: ^0.0.39
16
  version: 0.0.39([email protected])
 
 
 
17
  '@codemirror/autocomplete':
18
  specifier: ^6.17.0
19
  version: 6.17.0(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
@@ -105,8 +108,8 @@ importers:
105
  specifier: ^5.5.0
106
  version: 5.5.0
107
  ai:
108
- specifier: ^3.3.4
109
110
  date-fns:
111
  specifier: ^3.6.0
112
  version: 3.6.0
@@ -128,6 +131,9 @@ importers:
128
  nanostores:
129
  specifier: ^0.10.3
130
  version: 0.10.3
 
 
 
131
  react:
132
  specifier: ^18.2.0
133
  version: 18.3.1
@@ -237,6 +243,21 @@ packages:
237
  peerDependencies:
238
  zod: ^3.0.0
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  '@ai-sdk/[email protected]':
241
  resolution: {integrity: sha512-yfdanjUiCJbtGoRGXrcrmXn0pTyDfRIeY6ozDG96D66f2wupZaZvAgKptUa3zDYXtUCQQvcNJ+tipBBfQD/UYA==}
242
  engines: {node: '>=18'}
@@ -250,8 +271,12 @@ packages:
250
  resolution: {integrity: sha512-f9j+P5yYRkqKFHxvWae5FI0j6nqROPCoPnMkpc2hc2vC7vKjqzrxBJucD8rpSaUjqiBnY/QuRJ0QeV717Uz5tg==}
251
  engines: {node: '>=18'}
252
 
253
- '@ai-sdk/react@0.0.40':
254
- resolution: {integrity: sha512-irljzw5m9q2kz3g4Y59fbeHI7o29DFmPTPIKQNK+XrHcvYH1sDuj4rlOnQUQl6vpahnrU7fLO6FzVIYdwZv+0w==}
 
 
 
 
255
  engines: {node: '>=18'}
256
  peerDependencies:
257
  react: ^18 || ^19
@@ -262,8 +287,8 @@ packages:
262
  zod:
263
  optional: true
264
 
265
- '@ai-sdk/[email protected].31':
266
- resolution: {integrity: sha512-VYsrTCuNqAe8DzgPCyCqJl6MNdItnjjGMioxi2Pimns/3qet1bOw2LA0yUe5tTAoSpYaCAjGZZB4x8WC762asA==}
267
  engines: {node: '>=18'}
268
  peerDependencies:
269
  solid-js: ^1.7.7
@@ -271,8 +296,8 @@ packages:
271
  solid-js:
272
  optional: true
273
 
274
- '@ai-sdk/[email protected].33':
275
- resolution: {integrity: sha512-/QksvqVEv9fcq39nJfu4QqqeXeFX19pqkGUlVXBNhMQ6QQXhYsUasfJodIWy1DBsKDDV6dROJM0fHku5v+hrdw==}
276
  engines: {node: '>=18'}
277
  peerDependencies:
278
  svelte: ^3.0.0 || ^4.0.0
@@ -280,8 +305,8 @@ packages:
280
  svelte:
281
  optional: true
282
 
283
- '@ai-sdk/[email protected].28':
284
- resolution: {integrity: sha512-yc+0EgC/Gz36ltoHsiBmuEv7iPjV85ihuj8W1vSqYe3+CblGYHG9h8MC5RdIl51GtrOtnH9aqnDjkX5Qy6Q9KQ==}
285
  engines: {node: '>=18'}
286
  peerDependencies:
287
  zod: ^3.0.0
@@ -289,8 +314,8 @@ packages:
289
  zod:
290
  optional: true
291
 
292
- '@ai-sdk/[email protected].32':
293
- resolution: {integrity: sha512-wEiH6J6VbuGcliA44UkQJM/JuSP1IwuFiovzPQ/bS0Gb/nJKuDQ8K2ru1JvdU7pEQFqmpTm7z+2R0Sduz0eKpA==}
294
  engines: {node: '>=18'}
295
  peerDependencies:
296
  vue: ^3.3.4
@@ -394,10 +419,18 @@ packages:
394
  resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
395
  engines: {node: '>=6.9.0'}
396
 
 
 
 
 
397
  '@babel/[email protected]':
398
  resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
399
  engines: {node: '>=6.9.0'}
400
 
 
 
 
 
401
  '@babel/[email protected]':
402
  resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
403
  engines: {node: '>=6.9.0'}
@@ -415,6 +448,11 @@ packages:
415
  engines: {node: '>=6.0.0'}
416
  hasBin: true
417
 
 
 
 
 
 
418
  '@babel/[email protected]':
419
  resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==}
420
  engines: {node: '>=6.9.0'}
@@ -467,6 +505,10 @@ packages:
467
  resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
468
  engines: {node: '>=6.9.0'}
469
 
 
 
 
 
470
  '@blitz/[email protected]':
471
  resolution: {integrity: sha512-mGEAFWCI5AQ4nrePhjp2WzvRen+UWR+SF4MvH70icIBClR08Gm3dT9MRa2jszOpfY00NyIYfm7/1CFZ37GvW4g==}
472
  engines: {node: ^18.0.0 || ^20.0.0}
@@ -1071,6 +1113,9 @@ packages:
1071
  '@jridgewell/[email protected]':
1072
  resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
1073
 
 
 
 
1074
  '@jridgewell/[email protected]':
1075
  resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
1076
 
@@ -1702,6 +1747,9 @@ packages:
1702
  '@types/[email protected]':
1703
  resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
1704
 
 
 
 
1705
  '@types/[email protected]':
1706
  resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
1707
 
@@ -2000,12 +2048,17 @@ packages:
2000
  engines: {node: '>=0.4.0'}
2001
  hasBin: true
2002
 
 
 
 
 
 
2003
2004
  resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
2005
  engines: {node: '>=8'}
2006
 
2007
- ai@3.3.4:
2008
- resolution: {integrity: sha512-yb9ONWAnTq77J+O/fLtd+yvcTgasdN79k+U0IhBDJ6ssEc+HZeFldjqkSgr1jtKSc8rLZOu0GiVitwyAtwofNQ==}
2009
  engines: {node: '>=18'}
2010
  peerDependencies:
2011
  openai: ^4.42.0
@@ -2066,8 +2119,9 @@ packages:
2066
  resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
2067
  engines: {node: '>=10'}
2068
 
2069
2070
- resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
 
2071
 
2072
2073
  resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
@@ -2097,8 +2151,9 @@ packages:
2097
  resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
2098
  engines: {node: '>= 0.4'}
2099
 
2100
- axobject-query@4.0.0:
2101
- resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==}
 
2102
 
2103
2104
  resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -2137,6 +2192,10 @@ packages:
2137
  resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
2138
  engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
2139
 
 
 
 
 
2140
2141
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
2142
 
@@ -2374,6 +2433,10 @@ packages:
2374
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
2375
  engines: {node: '>= 0.6'}
2376
 
 
 
 
 
2377
2378
  resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
2379
 
@@ -2567,6 +2630,10 @@ packages:
2567
  resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
2568
  engines: {node: '>= 0.8'}
2569
 
 
 
 
 
2570
2571
  resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
2572
 
@@ -2774,6 +2841,10 @@ packages:
2774
  resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
2775
  engines: {node: '>= 0.10.0'}
2776
 
 
 
 
 
2777
2778
  resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
2779
 
@@ -2815,6 +2886,10 @@ packages:
2815
  resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
2816
  engines: {node: '>= 0.8'}
2817
 
 
 
 
 
2818
2819
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
2820
  engines: {node: '>=10'}
@@ -3084,8 +3159,8 @@ packages:
3084
  resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
3085
  engines: {node: '>= 4'}
3086
 
3087
3088
- resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==}
3089
 
3090
3091
  resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
@@ -3375,6 +3450,9 @@ packages:
3375
3376
  resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
3377
 
 
 
 
3378
3379
  resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
3380
  engines: {node: '>=0.10.0'}
@@ -3476,6 +3554,9 @@ packages:
3476
3477
  resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
3478
 
 
 
 
3479
3480
  resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
3481
 
@@ -3670,6 +3751,10 @@ packages:
3670
  resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
3671
  engines: {node: '>= 0.6'}
3672
 
 
 
 
 
3673
3674
  resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
3675
  engines: {node: '>= 0.6'}
@@ -3883,6 +3968,15 @@ packages:
3883
3884
  resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==}
3885
 
 
 
 
 
 
 
 
 
 
3886
3887
  resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
3888
  engines: {node: '>= 0.8'}
@@ -3963,6 +4057,9 @@ packages:
3963
  resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
3964
  engines: {node: '>= 0.8'}
3965
 
 
 
 
3966
3967
  resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
3968
 
@@ -3985,6 +4082,9 @@ packages:
3985
  resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
3986
  engines: {node: '>=16 || 14 >=14.18'}
3987
 
 
 
 
3988
3989
  resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
3990
 
@@ -4182,6 +4282,10 @@ packages:
4182
  resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==}
4183
  engines: {node: '>=0.6'}
4184
 
 
 
 
 
4185
4186
  resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
4187
  engines: {node: '>=0.4.x'}
@@ -4467,10 +4571,18 @@ packages:
4467
  resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
4468
  engines: {node: '>= 0.8.0'}
4469
 
 
 
 
 
4470
4471
  resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
4472
  engines: {node: '>= 0.8.0'}
4473
 
 
 
 
 
4474
4475
  resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
4476
 
@@ -4525,6 +4637,10 @@ packages:
4525
  resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
4526
  engines: {node: '>=0.10.0'}
4527
 
 
 
 
 
4528
4529
  resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
4530
 
@@ -4802,6 +4918,9 @@ packages:
4802
4803
  resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
4804
 
 
 
 
4805
4806
  resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==}
4807
 
@@ -4816,6 +4935,10 @@ packages:
4816
  resolution: {integrity: sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g==}
4817
  engines: {node: '>=18.17'}
4818
 
 
 
 
 
4819
4820
  resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==}
4821
 
@@ -5183,10 +5306,10 @@ packages:
5183
5184
  resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==}
5185
 
5186
- zod-to-json-schema@3.22.5:
5187
- resolution: {integrity: sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==}
5188
  peerDependencies:
5189
- zod: ^3.22.4
5190
 
5191
5192
  resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
@@ -5202,6 +5325,21 @@ snapshots:
5202
  '@ai-sdk/provider-utils': 1.0.9([email protected])
5203
  zod: 3.23.8
5204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5205
5206
  dependencies:
5207
  '@ai-sdk/provider': 0.0.17
@@ -5215,44 +5353,50 @@ snapshots:
5215
  dependencies:
5216
  json-schema: 0.4.0
5217
 
5218
- '@ai-sdk/react@0.0.40([email protected])([email protected])':
5219
  dependencies:
5220
- '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8)
5221
- '@ai-sdk/ui-utils': 0.0.28([email protected])
 
 
 
 
5222
  swr: 2.2.5([email protected])
5223
  optionalDependencies:
5224
  react: 18.3.1
5225
  zod: 3.23.8
5226
 
5227
5228
  dependencies:
5229
- '@ai-sdk/provider-utils': 1.0.9([email protected])
5230
- '@ai-sdk/ui-utils': 0.0.28([email protected])
5231
  transitivePeerDependencies:
5232
  - zod
5233
 
5234
5235
  dependencies:
5236
- '@ai-sdk/provider-utils': 1.0.9([email protected])
5237
- '@ai-sdk/ui-utils': 0.0.28([email protected])
5238
  sswr: 2.1.0([email protected])
5239
  optionalDependencies:
5240
  svelte: 4.2.18
5241
  transitivePeerDependencies:
5242
  - zod
5243
 
5244
5245
  dependencies:
5246
- '@ai-sdk/provider': 0.0.17
5247
- '@ai-sdk/provider-utils': 1.0.9([email protected])
 
5248
  secure-json-parse: 2.7.0
 
5249
  optionalDependencies:
5250
  zod: 3.23.8
5251
 
5252
5253
  dependencies:
5254
- '@ai-sdk/provider-utils': 1.0.9([email protected])
5255
- '@ai-sdk/ui-utils': 0.0.28([email protected])
5256
5257
  optionalDependencies:
5258
  vue: 3.4.30([email protected])
@@ -5405,8 +5549,12 @@ snapshots:
5405
 
5406
  '@babel/[email protected]': {}
5407
 
 
 
5408
  '@babel/[email protected]': {}
5409
 
 
 
5410
  '@babel/[email protected]': {}
5411
 
5412
  '@babel/[email protected]':
@@ -5425,6 +5573,10 @@ snapshots:
5425
  dependencies:
5426
  '@babel/types': 7.24.7
5427
 
 
 
 
 
5428
  '@babel/[email protected](@babel/[email protected])':
5429
  dependencies:
5430
  '@babel/core': 7.24.7
@@ -5501,6 +5653,12 @@ snapshots:
5501
  '@babel/helper-validator-identifier': 7.24.7
5502
  to-fast-properties: 2.0.0
5503
 
 
 
 
 
 
 
5504
5505
  dependencies:
5506
  '@stylistic/eslint-plugin-ts': 2.3.0([email protected])([email protected])
@@ -5987,6 +6145,8 @@ snapshots:
5987
 
5988
  '@jridgewell/[email protected]': {}
5989
 
 
 
5990
  '@jridgewell/[email protected]':
5991
  dependencies:
5992
  '@jridgewell/resolve-uri': 3.1.2
@@ -6482,10 +6642,10 @@ snapshots:
6482
  - ts-node
6483
  - utf-8-validate
6484
 
6485
- '@remix-run/[email protected](express@4.19.2)([email protected])':
6486
  dependencies:
6487
  '@remix-run/node': 2.10.0([email protected])
6488
- express: 4.19.2
6489
  optionalDependencies:
6490
  typescript: 5.5.2
6491
  optional: true
@@ -6510,7 +6670,7 @@ snapshots:
6510
  cookie-signature: 1.2.1
6511
  source-map-support: 0.5.21
6512
  stream-slice: 0.1.2
6513
- undici: 6.19.4
6514
  optionalDependencies:
6515
  typescript: 5.5.2
6516
  optional: true
@@ -6533,11 +6693,11 @@ snapshots:
6533
 
6534
6535
  dependencies:
6536
- '@remix-run/express': 2.10.0(express@4.19.2)([email protected])
6537
  '@remix-run/node': 2.10.0([email protected])
6538
  chokidar: 3.6.0
6539
  compression: 1.7.4
6540
- express: 4.19.2
6541
  get-port: 5.1.1
6542
  morgan: 1.10.0
6543
  source-map-support: 0.5.21
@@ -6709,6 +6869,8 @@ snapshots:
6709
 
6710
  '@types/[email protected]': {}
6711
 
 
 
6712
  '@types/[email protected]':
6713
  dependencies:
6714
  '@types/unist': 2.0.10
@@ -7032,7 +7194,7 @@ snapshots:
7032
  '@babel/plugin-syntax-typescript': 7.24.7(@babel/[email protected])
7033
  '@vanilla-extract/babel-plugin-debug-ids': 1.0.6
7034
  '@vanilla-extract/css': 1.15.3
7035
- esbuild: 0.17.19
7036
  eval: 0.1.8
7037
  find-up: 5.0.0
7038
  javascript-stringify: 2.1.0
@@ -7084,11 +7246,11 @@ snapshots:
7084
 
7085
  '@vue/[email protected]':
7086
  dependencies:
7087
- '@babel/parser': 7.24.7
7088
  '@vue/shared': 3.4.30
7089
  entities: 4.5.0
7090
  estree-walker: 2.0.2
7091
- source-map-js: 1.2.0
7092
 
7093
  '@vue/[email protected]':
7094
  dependencies:
@@ -7097,15 +7259,15 @@ snapshots:
7097
 
7098
  '@vue/[email protected]':
7099
  dependencies:
7100
- '@babel/parser': 7.24.7
7101
  '@vue/compiler-core': 3.4.30
7102
  '@vue/compiler-dom': 3.4.30
7103
  '@vue/compiler-ssr': 3.4.30
7104
  '@vue/shared': 3.4.30
7105
  estree-walker: 2.0.2
7106
- magic-string: 0.30.10
7107
  postcss: 8.4.38
7108
- source-map-js: 1.2.0
7109
 
7110
  '@vue/[email protected]':
7111
  dependencies:
@@ -7172,27 +7334,29 @@ snapshots:
7172
 
7173
7174
 
 
 
7175
7176
  dependencies:
7177
  clean-stack: 2.2.0
7178
  indent-string: 4.0.0
7179
 
7180
7181
  dependencies:
7182
- '@ai-sdk/provider': 0.0.17
7183
- '@ai-sdk/provider-utils': 1.0.9([email protected])
7184
- '@ai-sdk/react': 0.0.40([email protected])([email protected])
7185
- '@ai-sdk/solid': 0.0.31([email protected])
7186
- '@ai-sdk/svelte': 0.0.33([email protected])([email protected])
7187
- '@ai-sdk/ui-utils': 0.0.28([email protected])
7188
7189
  '@opentelemetry/api': 1.9.0
7190
  eventsource-parser: 1.1.2
7191
  json-schema: 0.4.0
7192
  jsondiffpatch: 0.6.0
7193
  nanoid: 3.3.6
7194
  secure-json-parse: 2.7.0
7195
- zod-to-json-schema: 3.22.5([email protected])
7196
  optionalDependencies:
7197
  react: 18.3.1
7198
  sswr: 2.1.0([email protected])
@@ -7238,9 +7402,7 @@ snapshots:
7238
  dependencies:
7239
  tslib: 2.6.3
7240
 
7241
7242
- dependencies:
7243
- dequal: 2.0.3
7244
 
7245
7246
 
@@ -7272,9 +7434,7 @@ snapshots:
7272
  dependencies:
7273
  possible-typed-array-names: 1.0.0
7274
 
7275
- axobject-query@4.0.0:
7276
- dependencies:
7277
- dequal: 2.0.3
7278
 
7279
7280
 
@@ -7322,6 +7482,24 @@ snapshots:
7322
  transitivePeerDependencies:
7323
  - supports-color
7324
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7325
7326
  dependencies:
7327
  balanced-match: 1.0.2
@@ -7520,9 +7698,9 @@ snapshots:
7520
 
7521
7522
  dependencies:
7523
- '@jridgewell/sourcemap-codec': 1.4.15
7524
- '@types/estree': 1.0.5
7525
- acorn: 8.12.0
7526
  estree-walker: 3.0.3
7527
  periscopic: 3.1.0
7528
 
@@ -7546,7 +7724,7 @@ snapshots:
7546
 
7547
7548
  dependencies:
7549
- mime-db: 1.52.0
7550
  optional: true
7551
 
7552
@@ -7588,6 +7766,9 @@ snapshots:
7588
 
7589
7590
 
 
 
 
7591
7592
 
7593
@@ -7769,6 +7950,9 @@ snapshots:
7769
 
7770
7771
 
 
 
 
7772
7773
  dependencies:
7774
  once: 1.4.0
@@ -8099,6 +8283,43 @@ snapshots:
8099
  transitivePeerDependencies:
8100
  - supports-color
8101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8102
8103
 
8104
@@ -8150,6 +8371,19 @@ snapshots:
8150
  transitivePeerDependencies:
8151
  - supports-color
8152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8153
8154
  dependencies:
8155
  locate-path: 6.0.0
@@ -8472,7 +8706,7 @@ snapshots:
8472
 
8473
8474
 
8475
8476
  optional: true
8477
 
8478
@@ -8707,6 +8941,10 @@ snapshots:
8707
  dependencies:
8708
  '@jridgewell/sourcemap-codec': 1.4.15
8709
 
 
 
 
 
8710
8711
 
8712
@@ -8987,6 +9225,9 @@ snapshots:
8987
 
8988
8989
 
 
 
 
8990
8991
 
8992
@@ -9409,6 +9650,9 @@ snapshots:
9409
 
9410
9411
 
 
 
 
9412
9413
  dependencies:
9414
  mime-db: 1.52.0
@@ -9632,6 +9876,14 @@ snapshots:
9632
  node-fetch-native: 1.6.4
9633
  ufo: 1.5.3
9634
 
 
 
 
 
 
 
 
 
9635
9636
  dependencies:
9637
  ee-first: 1.1.1
@@ -9731,6 +9983,8 @@ snapshots:
9731
 
9732
9733
 
 
 
9734
9735
 
9736
@@ -9746,6 +10000,9 @@ snapshots:
9746
  lru-cache: 10.2.2
9747
  minipass: 7.1.2
9748
 
 
 
 
9749
9750
 
9751
@@ -9932,6 +10189,11 @@ snapshots:
9932
  dependencies:
9933
  side-channel: 1.0.6
9934
 
 
 
 
 
 
9935
9936
 
9937
@@ -10241,8 +10503,8 @@ snapshots:
10241
10242
  dependencies:
10243
  chokidar: 3.6.0
10244
- immutable: 4.3.6
10245
- source-map-js: 1.2.0
10246
  optional: true
10247
 
10248
@@ -10278,6 +10540,25 @@ snapshots:
10278
  transitivePeerDependencies:
10279
  - supports-color
10280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10281
10282
  dependencies:
10283
  encodeurl: 1.0.2
@@ -10287,6 +10568,16 @@ snapshots:
10287
  transitivePeerDependencies:
10288
  - supports-color
10289
 
 
 
 
 
 
 
 
 
 
 
10290
10291
 
10292
@@ -10340,6 +10631,8 @@ snapshots:
10340
 
10341
10342
 
 
 
10343
10344
  dependencies:
10345
  buffer-from: 1.1.2
@@ -10471,18 +10764,18 @@ snapshots:
10471
10472
  dependencies:
10473
  '@ampproject/remapping': 2.3.0
10474
- '@jridgewell/sourcemap-codec': 1.4.15
10475
  '@jridgewell/trace-mapping': 0.3.25
10476
- '@types/estree': 1.0.5
10477
- acorn: 8.12.0
10478
- aria-query: 5.3.0
10479
- axobject-query: 4.0.0
10480
  code-red: 1.0.4
10481
  css-tree: 2.3.1
10482
  estree-walker: 3.0.3
10483
  is-reference: 3.0.2
10484
  locate-character: 3.0.0
10485
- magic-string: 0.30.10
10486
  periscopic: 3.1.0
10487
 
10488
@@ -10613,6 +10906,8 @@ snapshots:
10613
 
10614
10615
 
 
 
10616
10617
  dependencies:
10618
  '@antfu/utils': 0.7.10
@@ -10627,6 +10922,9 @@ snapshots:
10627
 
10628
10629
 
 
 
 
10630
10631
  dependencies:
10632
  consola: 3.2.3
@@ -10634,7 +10932,7 @@ snapshots:
10634
  mime: 3.0.0
10635
  node-fetch-native: 1.6.4
10636
  pathe: 1.1.2
10637
- ufo: 1.5.3
10638
 
10639
10640
  dependencies:
@@ -11070,7 +11368,7 @@ snapshots:
11070
  mustache: 4.2.0
11071
  stacktracey: 2.1.8
11072
 
11073
- zod-to-json-schema@3.22.5([email protected]):
11074
  dependencies:
11075
  zod: 3.23.8
11076
 
 
14
  '@ai-sdk/anthropic':
15
  specifier: ^0.0.39
16
  version: 0.0.39([email protected])
17
+ '@ai-sdk/openai':
18
+ specifier: ^0.0.66
19
+ version: 0.0.66([email protected])
20
  '@codemirror/autocomplete':
21
  specifier: ^6.17.0
22
  version: 6.17.0(@codemirror/[email protected])(@codemirror/[email protected])(@codemirror/[email protected])(@lezer/[email protected])
 
108
  specifier: ^5.5.0
109
  version: 5.5.0
110
  ai:
111
+ specifier: ^3.4.9
112
113
  date-fns:
114
  specifier: ^3.6.0
115
  version: 3.6.0
 
131
  nanostores:
132
  specifier: ^0.10.3
133
  version: 0.10.3
134
+ ollama-ai-provider:
135
+ specifier: ^0.15.2
136
+ version: 0.15.2([email protected])
137
  react:
138
  specifier: ^18.2.0
139
  version: 18.3.1
 
243
  peerDependencies:
244
  zod: ^3.0.0
245
 
246
+ '@ai-sdk/[email protected]':
247
+ resolution: {integrity: sha512-V4XeDnlNl5/AY3GB3ozJUjqnBLU5pK3DacKTbCNH3zH8/MggJoH6B8wRGdLUPVFMcsMz60mtvh4DC9JsIVFrKw==}
248
+ engines: {node: '>=18'}
249
+ peerDependencies:
250
+ zod: ^3.0.0
251
+
252
+ '@ai-sdk/[email protected]':
253
+ resolution: {integrity: sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==}
254
+ engines: {node: '>=18'}
255
+ peerDependencies:
256
+ zod: ^3.0.0
257
+ peerDependenciesMeta:
258
+ zod:
259
+ optional: true
260
+
261
  '@ai-sdk/[email protected]':
262
  resolution: {integrity: sha512-yfdanjUiCJbtGoRGXrcrmXn0pTyDfRIeY6ozDG96D66f2wupZaZvAgKptUa3zDYXtUCQQvcNJ+tipBBfQD/UYA==}
263
  engines: {node: '>=18'}
 
271
  resolution: {integrity: sha512-f9j+P5yYRkqKFHxvWae5FI0j6nqROPCoPnMkpc2hc2vC7vKjqzrxBJucD8rpSaUjqiBnY/QuRJ0QeV717Uz5tg==}
272
  engines: {node: '>=18'}
273
 
274
+ '@ai-sdk/provider@0.0.24':
275
+ resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==}
276
+ engines: {node: '>=18'}
277
+
278
+ '@ai-sdk/[email protected]':
279
+ resolution: {integrity: sha512-1asDpxgmeHWL0/EZPCLENxfOHT+0jce0z/zasRhascodm2S6f6/KZn5doLG9jdmarcb+GjMjFmmwyOVXz3W1xg==}
280
  engines: {node: '>=18'}
281
  peerDependencies:
282
  react: ^18 || ^19
 
287
  zod:
288
  optional: true
289
 
290
+ '@ai-sdk/[email protected].49':
291
+ resolution: {integrity: sha512-KnfWTt640cS1hM2fFIba8KHSPLpOIWXtEm28pNCHTvqasVKlh2y/zMQANTwE18pF2nuXL9P9F5/dKWaPsaEzQw==}
292
  engines: {node: '>=18'}
293
  peerDependencies:
294
  solid-js: ^1.7.7
 
296
  solid-js:
297
  optional: true
298
 
299
+ '@ai-sdk/[email protected].51':
300
+ resolution: {integrity: sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==}
301
  engines: {node: '>=18'}
302
  peerDependencies:
303
  svelte: ^3.0.0 || ^4.0.0
 
305
  svelte:
306
  optional: true
307
 
308
+ '@ai-sdk/[email protected].46':
309
+ resolution: {integrity: sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==}
310
  engines: {node: '>=18'}
311
  peerDependencies:
312
  zod: ^3.0.0
 
314
  zod:
315
  optional: true
316
 
317
+ '@ai-sdk/[email protected].54':
318
+ resolution: {integrity: sha512-Ltu6gbuii8Qlp3gg7zdwdnHdS4M8nqKDij2VVO1223VOtIFwORFJzKqpfx44U11FW8z2TPVBYN+FjkyVIcN2hg==}
319
  engines: {node: '>=18'}
320
  peerDependencies:
321
  vue: ^3.3.4
 
419
  resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
420
  engines: {node: '>=6.9.0'}
421
 
422
+ '@babel/[email protected]':
423
+ resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==}
424
+ engines: {node: '>=6.9.0'}
425
+
426
  '@babel/[email protected]':
427
  resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
428
  engines: {node: '>=6.9.0'}
429
 
430
+ '@babel/[email protected]':
431
+ resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==}
432
+ engines: {node: '>=6.9.0'}
433
+
434
  '@babel/[email protected]':
435
  resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
436
  engines: {node: '>=6.9.0'}
 
448
  engines: {node: '>=6.0.0'}
449
  hasBin: true
450
 
451
+ '@babel/[email protected]':
452
+ resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==}
453
+ engines: {node: '>=6.0.0'}
454
+ hasBin: true
455
+
456
  '@babel/[email protected]':
457
  resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==}
458
  engines: {node: '>=6.9.0'}
 
505
  resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
506
  engines: {node: '>=6.9.0'}
507
 
508
+ '@babel/[email protected]':
509
+ resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==}
510
+ engines: {node: '>=6.9.0'}
511
+
512
  '@blitz/[email protected]':
513
  resolution: {integrity: sha512-mGEAFWCI5AQ4nrePhjp2WzvRen+UWR+SF4MvH70icIBClR08Gm3dT9MRa2jszOpfY00NyIYfm7/1CFZ37GvW4g==}
514
  engines: {node: ^18.0.0 || ^20.0.0}
 
1113
  '@jridgewell/[email protected]':
1114
  resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
1115
 
1116
+ '@jridgewell/[email protected]':
1117
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
1118
+
1119
  '@jridgewell/[email protected]':
1120
  resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
1121
 
 
1747
  '@types/[email protected]':
1748
  resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
1749
 
1750
+ '@types/[email protected]':
1751
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
1752
+
1753
  '@types/[email protected]':
1754
  resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
1755
 
 
2048
  engines: {node: '>=0.4.0'}
2049
  hasBin: true
2050
 
2051
2052
+ resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
2053
+ engines: {node: '>=0.4.0'}
2054
+ hasBin: true
2055
+
2056
2057
  resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
2058
  engines: {node: '>=8'}
2059
 
2060
+ ai@3.4.9:
2061
+ resolution: {integrity: sha512-wmVzpIHNGjCEjIJ/3945a/DIkz+gwObjC767ZRgO8AmtIZMO5KqvqNr7n2KF+gQrCPCMC8fM1ICQFXSvBZnBlA==}
2062
  engines: {node: '>=18'}
2063
  peerDependencies:
2064
  openai: ^4.42.0
 
2119
  resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
2120
  engines: {node: '>=10'}
2121
 
2122
2123
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
2124
+ engines: {node: '>= 0.4'}
2125
 
2126
2127
  resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
 
2151
  resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
2152
  engines: {node: '>= 0.4'}
2153
 
2154
+ axobject-query@4.1.0:
2155
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
2156
+ engines: {node: '>= 0.4'}
2157
 
2158
2159
  resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
 
2192
  resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
2193
  engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
2194
 
2195
2196
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
2197
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
2198
+
2199
2200
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
2201
 
 
2433
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
2434
  engines: {node: '>= 0.6'}
2435
 
2436
2437
+ resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
2438
+ engines: {node: '>= 0.6'}
2439
+
2440
2441
  resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
2442
 
 
2630
  resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
2631
  engines: {node: '>= 0.8'}
2632
 
2633
2634
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
2635
+ engines: {node: '>= 0.8'}
2636
+
2637
2638
  resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
2639
 
 
2841
  resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
2842
  engines: {node: '>= 0.10.0'}
2843
 
2844
2845
+ resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==}
2846
+ engines: {node: '>= 0.10.0'}
2847
+
2848
2849
  resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
2850
 
 
2886
  resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
2887
  engines: {node: '>= 0.8'}
2888
 
2889
2890
+ resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
2891
+ engines: {node: '>= 0.8'}
2892
+
2893
2894
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
2895
  engines: {node: '>=10'}
 
3159
  resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
3160
  engines: {node: '>= 4'}
3161
 
3162
3163
+ resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
3164
 
3165
3166
  resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
 
3450
3451
  resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
3452
 
3453
3454
+ resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
3455
+
3456
3457
  resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
3458
  engines: {node: '>=0.10.0'}
 
3554
3555
  resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
3556
 
3557
3558
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
3559
+
3560
3561
  resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
3562
 
 
3751
  resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
3752
  engines: {node: '>= 0.6'}
3753
 
3754
3755
+ resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==}
3756
+ engines: {node: '>= 0.6'}
3757
+
3758
3759
  resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
3760
  engines: {node: '>= 0.6'}
 
3968
3969
  resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==}
3970
 
3971
3972
+ resolution: {integrity: sha512-bMDUlYmohulD87Xrv6meuftQdmFTygtrQywy6/gqdf1bTsJFP1VCx3MrisLFBzb4mMOj02NER7yZhiGIlAx30w==}
3973
+ engines: {node: '>=18'}
3974
+ peerDependencies:
3975
+ zod: ^3.0.0
3976
+ peerDependenciesMeta:
3977
+ zod:
3978
+ optional: true
3979
+
3980
3981
  resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
3982
  engines: {node: '>= 0.8'}
 
4057
  resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
4058
  engines: {node: '>= 0.8'}
4059
 
4060
4061
+ resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==}
4062
+
4063
4064
  resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
4065
 
 
4082
  resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
4083
  engines: {node: '>=16 || 14 >=14.18'}
4084
 
4085
4086
+ resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==}
4087
+
4088
4089
  resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
4090
 
 
4282
  resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==}
4283
  engines: {node: '>=0.6'}
4284
 
4285
4286
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
4287
+ engines: {node: '>=0.6'}
4288
+
4289
4290
  resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
4291
  engines: {node: '>=0.4.x'}
 
4571
  resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
4572
  engines: {node: '>= 0.8.0'}
4573
 
4574
4575
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
4576
+ engines: {node: '>= 0.8.0'}
4577
+
4578
4579
  resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
4580
  engines: {node: '>= 0.8.0'}
4581
 
4582
4583
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
4584
+ engines: {node: '>= 0.8.0'}
4585
+
4586
4587
  resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
4588
 
 
4637
  resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
4638
  engines: {node: '>=0.10.0'}
4639
 
4640
4641
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
4642
+ engines: {node: '>=0.10.0'}
4643
+
4644
4645
  resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
4646
 
 
4918
4919
  resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
4920
 
4921
4922
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
4923
+
4924
4925
  resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==}
4926
 
 
4935
  resolution: {integrity: sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g==}
4936
  engines: {node: '>=18.17'}
4937
 
4938
4939
+ resolution: {integrity: sha512-AITZfPuxubm31Sx0vr8bteSalEbs9wQb/BOBi9FPlD9Qpd6HxZ4Q0+hI742jBhkPb4RT2v5MQzaW5VhRVyj+9A==}
4940
+ engines: {node: '>=18.17'}
4941
+
4942
4943
  resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==}
4944
 
 
5306
5307
  resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==}
5308
 
5309
+ zod-to-json-schema@3.23.2:
5310
+ resolution: {integrity: sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==}
5311
  peerDependencies:
5312
+ zod: ^3.23.3
5313
 
5314
5315
  resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
 
5325
  '@ai-sdk/provider-utils': 1.0.9([email protected])
5326
  zod: 3.23.8
5327
 
5328
5329
+ dependencies:
5330
+ '@ai-sdk/provider': 0.0.24
5331
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5332
+ zod: 3.23.8
5333
+
5334
5335
+ dependencies:
5336
+ '@ai-sdk/provider': 0.0.24
5337
+ eventsource-parser: 1.1.2
5338
+ nanoid: 3.3.6
5339
+ secure-json-parse: 2.7.0
5340
+ optionalDependencies:
5341
+ zod: 3.23.8
5342
+
5343
5344
  dependencies:
5345
  '@ai-sdk/provider': 0.0.17
 
5353
  dependencies:
5354
  json-schema: 0.4.0
5355
 
5356
+ '@ai-sdk/provider@0.0.24':
5357
  dependencies:
5358
+ json-schema: 0.4.0
5359
+
5360
5361
+ dependencies:
5362
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5363
+ '@ai-sdk/ui-utils': 0.0.46([email protected])
5364
  swr: 2.2.5([email protected])
5365
  optionalDependencies:
5366
  react: 18.3.1
5367
  zod: 3.23.8
5368
 
5369
5370
  dependencies:
5371
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5372
+ '@ai-sdk/ui-utils': 0.0.46([email protected])
5373
  transitivePeerDependencies:
5374
  - zod
5375
 
5376
5377
  dependencies:
5378
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5379
+ '@ai-sdk/ui-utils': 0.0.46([email protected])
5380
  sswr: 2.1.0([email protected])
5381
  optionalDependencies:
5382
  svelte: 4.2.18
5383
  transitivePeerDependencies:
5384
  - zod
5385
 
5386
5387
  dependencies:
5388
+ '@ai-sdk/provider': 0.0.24
5389
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5390
+ json-schema: 0.4.0
5391
  secure-json-parse: 2.7.0
5392
+ zod-to-json-schema: 3.23.2([email protected])
5393
  optionalDependencies:
5394
  zod: 3.23.8
5395
 
5396
5397
  dependencies:
5398
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
5399
+ '@ai-sdk/ui-utils': 0.0.46([email protected])
5400
5401
  optionalDependencies:
5402
  vue: 3.4.30([email protected])
 
5549
 
5550
  '@babel/[email protected]': {}
5551
 
5552
+ '@babel/[email protected]': {}
5553
+
5554
  '@babel/[email protected]': {}
5555
 
5556
+ '@babel/[email protected]': {}
5557
+
5558
  '@babel/[email protected]': {}
5559
 
5560
  '@babel/[email protected]':
 
5573
  dependencies:
5574
  '@babel/types': 7.24.7
5575
 
5576
+ '@babel/[email protected]':
5577
+ dependencies:
5578
+ '@babel/types': 7.25.8
5579
+
5580
  '@babel/[email protected](@babel/[email protected])':
5581
  dependencies:
5582
  '@babel/core': 7.24.7
 
5653
  '@babel/helper-validator-identifier': 7.24.7
5654
  to-fast-properties: 2.0.0
5655
 
5656
+ '@babel/[email protected]':
5657
+ dependencies:
5658
+ '@babel/helper-string-parser': 7.25.7
5659
+ '@babel/helper-validator-identifier': 7.25.7
5660
+ to-fast-properties: 2.0.0
5661
+
5662
5663
  dependencies:
5664
  '@stylistic/eslint-plugin-ts': 2.3.0([email protected])([email protected])
 
6145
 
6146
  '@jridgewell/[email protected]': {}
6147
 
6148
+ '@jridgewell/[email protected]': {}
6149
+
6150
  '@jridgewell/[email protected]':
6151
  dependencies:
6152
  '@jridgewell/resolve-uri': 3.1.2
 
6642
  - ts-node
6643
  - utf-8-validate
6644
 
6645
+ '@remix-run/[email protected](express@4.21.1)([email protected])':
6646
  dependencies:
6647
  '@remix-run/node': 2.10.0([email protected])
6648
+ express: 4.21.1
6649
  optionalDependencies:
6650
  typescript: 5.5.2
6651
  optional: true
 
6670
  cookie-signature: 1.2.1
6671
  source-map-support: 0.5.21
6672
  stream-slice: 0.1.2
6673
+ undici: 6.20.0
6674
  optionalDependencies:
6675
  typescript: 5.5.2
6676
  optional: true
 
6693
 
6694
6695
  dependencies:
6696
+ '@remix-run/express': 2.10.0(express@4.21.1)([email protected])
6697
  '@remix-run/node': 2.10.0([email protected])
6698
  chokidar: 3.6.0
6699
  compression: 1.7.4
6700
+ express: 4.21.1
6701
  get-port: 5.1.1
6702
  morgan: 1.10.0
6703
  source-map-support: 0.5.21
 
6869
 
6870
  '@types/[email protected]': {}
6871
 
6872
+ '@types/[email protected]': {}
6873
+
6874
  '@types/[email protected]':
6875
  dependencies:
6876
  '@types/unist': 2.0.10
 
7194
  '@babel/plugin-syntax-typescript': 7.24.7(@babel/[email protected])
7195
  '@vanilla-extract/babel-plugin-debug-ids': 1.0.6
7196
  '@vanilla-extract/css': 1.15.3
7197
+ esbuild: 0.17.6
7198
  eval: 0.1.8
7199
  find-up: 5.0.0
7200
  javascript-stringify: 2.1.0
 
7246
 
7247
  '@vue/[email protected]':
7248
  dependencies:
7249
+ '@babel/parser': 7.25.8
7250
  '@vue/shared': 3.4.30
7251
  entities: 4.5.0
7252
  estree-walker: 2.0.2
7253
+ source-map-js: 1.2.1
7254
 
7255
  '@vue/[email protected]':
7256
  dependencies:
 
7259
 
7260
  '@vue/[email protected]':
7261
  dependencies:
7262
+ '@babel/parser': 7.25.8
7263
  '@vue/compiler-core': 3.4.30
7264
  '@vue/compiler-dom': 3.4.30
7265
  '@vue/compiler-ssr': 3.4.30
7266
  '@vue/shared': 3.4.30
7267
  estree-walker: 2.0.2
7268
+ magic-string: 0.30.12
7269
  postcss: 8.4.38
7270
+ source-map-js: 1.2.1
7271
 
7272
  '@vue/[email protected]':
7273
  dependencies:
 
7334
 
7335
7336
 
7337
7338
+
7339
7340
  dependencies:
7341
  clean-stack: 2.2.0
7342
  indent-string: 4.0.0
7343
 
7344
7345
  dependencies:
7346
+ '@ai-sdk/provider': 0.0.24
7347
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
7348
+ '@ai-sdk/react': 0.0.62([email protected])([email protected])
7349
+ '@ai-sdk/solid': 0.0.49([email protected])
7350
+ '@ai-sdk/svelte': 0.0.51([email protected])([email protected])
7351
+ '@ai-sdk/ui-utils': 0.0.46([email protected])
7352
7353
  '@opentelemetry/api': 1.9.0
7354
  eventsource-parser: 1.1.2
7355
  json-schema: 0.4.0
7356
  jsondiffpatch: 0.6.0
7357
  nanoid: 3.3.6
7358
  secure-json-parse: 2.7.0
7359
+ zod-to-json-schema: 3.23.2([email protected])
7360
  optionalDependencies:
7361
  react: 18.3.1
7362
  sswr: 2.1.0([email protected])
 
7402
  dependencies:
7403
  tslib: 2.6.3
7404
 
7405
 
 
7406
 
7407
7408
 
 
7434
  dependencies:
7435
  possible-typed-array-names: 1.0.0
7436
 
7437
+ axobject-query@4.1.0: {}
 
 
7438
 
7439
7440
 
 
7482
  transitivePeerDependencies:
7483
  - supports-color
7484
 
7485
7486
+ dependencies:
7487
+ bytes: 3.1.2
7488
+ content-type: 1.0.5
7489
+ debug: 2.6.9
7490
+ depd: 2.0.0
7491
+ destroy: 1.2.0
7492
+ http-errors: 2.0.0
7493
+ iconv-lite: 0.4.24
7494
+ on-finished: 2.4.1
7495
+ qs: 6.13.0
7496
+ raw-body: 2.5.2
7497
+ type-is: 1.6.18
7498
+ unpipe: 1.0.0
7499
+ transitivePeerDependencies:
7500
+ - supports-color
7501
+ optional: true
7502
+
7503
7504
  dependencies:
7505
  balanced-match: 1.0.2
 
7698
 
7699
7700
  dependencies:
7701
+ '@jridgewell/sourcemap-codec': 1.5.0
7702
+ '@types/estree': 1.0.6
7703
+ acorn: 8.12.1
7704
  estree-walker: 3.0.3
7705
  periscopic: 3.1.0
7706
 
 
7724
 
7725
7726
  dependencies:
7727
+ mime-db: 1.53.0
7728
  optional: true
7729
 
7730
 
7766
 
7767
7768
 
7769
7770
+ optional: true
7771
+
7772
7773
 
7774
 
7950
 
7951
7952
 
7953
7954
+ optional: true
7955
+
7956
7957
  dependencies:
7958
  once: 1.4.0
 
8283
  transitivePeerDependencies:
8284
  - supports-color
8285
 
8286
8287
+ dependencies:
8288
+ accepts: 1.3.8
8289
+ array-flatten: 1.1.1
8290
+ body-parser: 1.20.3
8291
+ content-disposition: 0.5.4
8292
+ content-type: 1.0.5
8293
+ cookie: 0.7.1
8294
+ cookie-signature: 1.0.6
8295
+ debug: 2.6.9
8296
+ depd: 2.0.0
8297
+ encodeurl: 2.0.0
8298
+ escape-html: 1.0.3
8299
+ etag: 1.8.1
8300
+ finalhandler: 1.3.1
8301
+ fresh: 0.5.2
8302
+ http-errors: 2.0.0
8303
+ merge-descriptors: 1.0.3
8304
+ methods: 1.1.2
8305
+ on-finished: 2.4.1
8306
+ parseurl: 1.3.3
8307
+ path-to-regexp: 0.1.10
8308
+ proxy-addr: 2.0.7
8309
+ qs: 6.13.0
8310
+ range-parser: 1.2.1
8311
+ safe-buffer: 5.2.1
8312
+ send: 0.19.0
8313
+ serve-static: 1.16.2
8314
+ setprototypeof: 1.2.0
8315
+ statuses: 2.0.1
8316
+ type-is: 1.6.18
8317
+ utils-merge: 1.0.1
8318
+ vary: 1.1.2
8319
+ transitivePeerDependencies:
8320
+ - supports-color
8321
+ optional: true
8322
+
8323
8324
 
8325
 
8371
  transitivePeerDependencies:
8372
  - supports-color
8373
 
8374
8375
+ dependencies:
8376
+ debug: 2.6.9
8377
+ encodeurl: 2.0.0
8378
+ escape-html: 1.0.3
8379
+ on-finished: 2.4.1
8380
+ parseurl: 1.3.3
8381
+ statuses: 2.0.1
8382
+ unpipe: 1.0.0
8383
+ transitivePeerDependencies:
8384
+ - supports-color
8385
+ optional: true
8386
+
8387
8388
  dependencies:
8389
  locate-path: 6.0.0
 
8706
 
8707
8708
 
8709
8710
  optional: true
8711
 
8712
 
8941
  dependencies:
8942
  '@jridgewell/sourcemap-codec': 1.4.15
8943
 
8944
8945
+ dependencies:
8946
+ '@jridgewell/sourcemap-codec': 1.5.0
8947
+
8948
8949
 
8950
 
9225
 
9226
9227
 
9228
9229
+ optional: true
9230
+
9231
9232
 
9233
 
9650
 
9651
9652
 
9653
9654
+ optional: true
9655
+
9656
9657
  dependencies:
9658
  mime-db: 1.52.0
 
9876
  node-fetch-native: 1.6.4
9877
  ufo: 1.5.3
9878
 
9879
9880
+ dependencies:
9881
+ '@ai-sdk/provider': 0.0.24
9882
+ '@ai-sdk/provider-utils': 1.0.20([email protected])
9883
+ partial-json: 0.1.7
9884
+ optionalDependencies:
9885
+ zod: 3.23.8
9886
+
9887
9888
  dependencies:
9889
  ee-first: 1.1.1
 
9983
 
9984
9985
 
9986
9987
+
9988
9989
 
9990
 
10000
  lru-cache: 10.2.2
10001
  minipass: 7.1.2
10002
 
10003
10004
+ optional: true
10005
+
10006
10007
 
10008
 
10189
  dependencies:
10190
  side-channel: 1.0.6
10191
 
10192
10193
+ dependencies:
10194
+ side-channel: 1.0.6
10195
+ optional: true
10196
+
10197
10198
 
10199
 
10503
10504
  dependencies:
10505
  chokidar: 3.6.0
10506
+ immutable: 4.3.7
10507
+ source-map-js: 1.2.1
10508
  optional: true
10509
 
10510
 
10540
  transitivePeerDependencies:
10541
  - supports-color
10542
 
10543
10544
+ dependencies:
10545
+ debug: 2.6.9
10546
+ depd: 2.0.0
10547
+ destroy: 1.2.0
10548
+ encodeurl: 1.0.2
10549
+ escape-html: 1.0.3
10550
+ etag: 1.8.1
10551
+ fresh: 0.5.2
10552
+ http-errors: 2.0.0
10553
+ mime: 1.6.0
10554
+ ms: 2.1.3
10555
+ on-finished: 2.4.1
10556
+ range-parser: 1.2.1
10557
+ statuses: 2.0.1
10558
+ transitivePeerDependencies:
10559
+ - supports-color
10560
+ optional: true
10561
+
10562
10563
  dependencies:
10564
  encodeurl: 1.0.2
 
10568
  transitivePeerDependencies:
10569
  - supports-color
10570
 
10571
10572
+ dependencies:
10573
+ encodeurl: 2.0.0
10574
+ escape-html: 1.0.3
10575
+ parseurl: 1.3.3
10576
+ send: 0.19.0
10577
+ transitivePeerDependencies:
10578
+ - supports-color
10579
+ optional: true
10580
+
10581
10582
 
10583
 
10631
 
10632
10633
 
10634
10635
+
10636
10637
  dependencies:
10638
  buffer-from: 1.1.2
 
10764
10765
  dependencies:
10766
  '@ampproject/remapping': 2.3.0
10767
+ '@jridgewell/sourcemap-codec': 1.5.0
10768
  '@jridgewell/trace-mapping': 0.3.25
10769
+ '@types/estree': 1.0.6
10770
+ acorn: 8.12.1
10771
+ aria-query: 5.3.2
10772
+ axobject-query: 4.1.0
10773
  code-red: 1.0.4
10774
  css-tree: 2.3.1
10775
  estree-walker: 3.0.3
10776
  is-reference: 3.0.2
10777
  locate-character: 3.0.0
10778
+ magic-string: 0.30.12
10779
  periscopic: 3.1.0
10780
 
10781
 
10906
 
10907
10908
 
10909
10910
+
10911
10912
  dependencies:
10913
  '@antfu/utils': 0.7.10
 
10922
 
10923
10924
 
10925
10926
+ optional: true
10927
+
10928
10929
  dependencies:
10930
  consola: 3.2.3
 
10932
  mime: 3.0.0
10933
  node-fetch-native: 1.6.4
10934
  pathe: 1.1.2
10935
+ ufo: 1.5.4
10936
 
10937
10938
  dependencies:
 
11368
  mustache: 4.2.0
11369
  stacktracey: 2.1.8
11370
 
11371
+ zod-to-json-schema@3.23.2([email protected]):
11372
  dependencies:
11373
  zod: 3.23.8
11374
 
worker-configuration.d.ts CHANGED
@@ -1,3 +1,5 @@
1
  interface Env {
2
  ANTHROPIC_API_KEY: string;
 
 
3
  }
 
1
  interface Env {
2
  ANTHROPIC_API_KEY: string;
3
+ OPENAI_API_KEY: string;
4
+ GROQ_API_KEY: string;
5
  }