@mastra/mcp-docs-server 1.1.35-alpha.21 → 1.1.35-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.docs/docs/agents/processors.md +1 -1
- package/.docs/docs/agents/signals.md +151 -0
- package/.docs/docs/browser/agent-browser.md +15 -0
- package/.docs/docs/browser/stagehand.md +25 -1
- package/.docs/docs/studio/overview.md +2 -0
- package/.docs/docs/voice/overview.md +84 -0
- package/.docs/models/index.md +1 -1
- package/.docs/models/providers/chutes.md +23 -54
- package/.docs/models/providers/databricks.md +96 -0
- package/.docs/models/providers/novita-ai.md +5 -5
- package/.docs/models/providers/nvidia.md +59 -49
- package/.docs/models/providers/ollama-cloud.md +1 -1
- package/.docs/models/providers/opencode.md +43 -42
- package/.docs/models/providers/sarvam.md +72 -0
- package/.docs/models/providers.md +2 -0
- package/.docs/reference/agents/agent.md +83 -0
- package/.docs/reference/browser/agent-browser.md +37 -11
- package/.docs/reference/browser/stagehand-browser.md +35 -9
- package/.docs/reference/client-js/agents.md +89 -0
- package/.docs/reference/index.md +3 -0
- package/.docs/reference/processors/prefill-error-handler.md +3 -3
- package/.docs/reference/storage/dsql.md +428 -0
- package/.docs/reference/tools/brightdata.md +167 -0
- package/.docs/reference/voice/inworld.md +133 -0
- package/CHANGELOG.md +28 -0
- package/package.json +3 -3
|
@@ -11,7 +11,7 @@ You can use individual [`Processor`](https://mastra.ai/reference/processors/proc
|
|
|
11
11
|
|
|
12
12
|
Some processors implement both input and output logic and can be used in either array depending on where the transformation should occur.
|
|
13
13
|
|
|
14
|
-
Some built-in processors also
|
|
14
|
+
Some built-in processors also send hidden system reminder signals. These signals are persisted in raw memory history and converted to `<system-reminder>...</system-reminder>` context before the next model call, but standard UI-facing message conversions and default memory recall hide them unless you explicitly opt in.
|
|
15
15
|
|
|
16
16
|
## When to use processors
|
|
17
17
|
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Signals
|
|
2
|
+
|
|
3
|
+
> **Experimental:** Agent signals are experimental. The API may change in a future release.
|
|
4
|
+
|
|
5
|
+
Signals are a way to interact with an agent through a thread. Instead of starting every interaction with `agent.stream()`, subscribe to a thread and send signals. Mastra either wakes the agent when the thread is idle or drops the signal into the running agent loop.
|
|
6
|
+
|
|
7
|
+
Signals are a context engineering tool for guiding the agent in real time as the agent loop progresses. Use them to add system-generated content from external event sources, such as incoming email notifications, GitHub pull request comments, background task notifications, and similar events.
|
|
8
|
+
|
|
9
|
+
## Quickstart
|
|
10
|
+
|
|
11
|
+
Subscribe to the thread before sending signals. The subscription receives the active stream when the signal wakes the agent or enters a running loop.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
const subscription = await agent.subscribeToThread({
|
|
15
|
+
resourceId: 'user_123',
|
|
16
|
+
threadId: 'thread_456',
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
agent.sendSignal(
|
|
20
|
+
{
|
|
21
|
+
type: 'user-message',
|
|
22
|
+
contents: 'Compare that with the previous option.',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
resourceId: 'user_123',
|
|
26
|
+
threadId: 'thread_456',
|
|
27
|
+
},
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
for await (const chunk of subscription.stream) {
|
|
31
|
+
console.log(chunk)
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When the thread has a running agent stream, the signal becomes new input inside that agent loop. When the thread is idle, Mastra starts a stream with the signal as the first input.
|
|
36
|
+
|
|
37
|
+
## Control signal behavior
|
|
38
|
+
|
|
39
|
+
By default, Mastra delivers signals to active runs and wakes idle threads. Use `ifActive.behavior` and `ifIdle.behavior` to change that behavior.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
const result = agent.sendSignal(
|
|
43
|
+
{
|
|
44
|
+
type: 'user-message',
|
|
45
|
+
contents: 'Store this for later, but do not wake the agent.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
resourceId: 'user_123',
|
|
49
|
+
threadId: 'thread_456',
|
|
50
|
+
ifIdle: {
|
|
51
|
+
behavior: 'persist',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
await result.persisted
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The behavior options are:
|
|
60
|
+
|
|
61
|
+
- `ifActive.behavior: 'deliver'`: Add the signal to the running agent loop. This is the default.
|
|
62
|
+
- `ifActive.behavior: 'persist'`: Save the signal to memory without adding it to the running loop.
|
|
63
|
+
- `ifActive.behavior: 'discard'`: Ignore the signal while the thread is active.
|
|
64
|
+
- `ifIdle.behavior: 'wake'`: Start a stream with the signal as the first input. This is the default.
|
|
65
|
+
- `ifIdle.behavior: 'persist'`: Save the signal to memory without starting a stream.
|
|
66
|
+
- `ifIdle.behavior: 'discard'`: Ignore the signal while the thread is idle.
|
|
67
|
+
|
|
68
|
+
Pass `ifIdle.streamOptions` when the idle wake-up stream needs options such as model settings, tools, or runtime context. You do not need to repeat `memory.resource` or `memory.thread`; Mastra uses the top-level `resourceId` and `threadId` for the thread.
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
agent.sendSignal(
|
|
72
|
+
{
|
|
73
|
+
type: 'user-message',
|
|
74
|
+
contents: 'Continue with the next step.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
resourceId: 'user_123',
|
|
78
|
+
threadId: 'thread_456',
|
|
79
|
+
ifIdle: {
|
|
80
|
+
behavior: 'wake',
|
|
81
|
+
streamOptions: {
|
|
82
|
+
maxSteps: 3,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Send external event context
|
|
90
|
+
|
|
91
|
+
Use custom signal types for system-generated context. Non-user signal types are rendered as XML-style user-role context so they can appear inside conversation history without looking like assistant output.
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
agent.sendSignal(
|
|
95
|
+
{
|
|
96
|
+
type: 'system-reminder',
|
|
97
|
+
contents: 'User X has left a new PR comment asking for a smaller API surface.',
|
|
98
|
+
attributes: {
|
|
99
|
+
type: 'github',
|
|
100
|
+
pr: '123',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
resourceId: 'user_123',
|
|
105
|
+
threadId: 'thread_456',
|
|
106
|
+
},
|
|
107
|
+
)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The model receives the custom signal as context like this:
|
|
111
|
+
|
|
112
|
+
```xml
|
|
113
|
+
<system-reminder type="github" pr="123">User X has left a new PR comment asking for a smaller API surface.</system-reminder>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Use XML-safe signal type names and attribute names. Signal type names and attribute names can contain letters, numbers, underscores, periods, and hyphens. They must start with a letter or underscore.
|
|
117
|
+
|
|
118
|
+
## Use the client SDK
|
|
119
|
+
|
|
120
|
+
The JavaScript client exposes the same thread signal APIs. Use `subscribeToThread()` before `sendSignal()` so the client can render the stream that wakes from, or receives, the signal.
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const agent = client.getAgent('supportAgent')
|
|
124
|
+
|
|
125
|
+
const subscription = await agent.subscribeToThread({
|
|
126
|
+
resourceId: 'user_123',
|
|
127
|
+
threadId: 'thread_456',
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
await agent.sendSignal({
|
|
131
|
+
signal: {
|
|
132
|
+
type: 'user-message',
|
|
133
|
+
contents: 'Show the shorter version.',
|
|
134
|
+
},
|
|
135
|
+
resourceId: 'user_123',
|
|
136
|
+
threadId: 'thread_456',
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
await subscription.processDataStream({
|
|
140
|
+
onChunk: chunk => {
|
|
141
|
+
console.log(chunk)
|
|
142
|
+
},
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Related
|
|
147
|
+
|
|
148
|
+
- [`Agent.sendSignal()`](https://mastra.ai/reference/agents/agent)
|
|
149
|
+
- [`Agent.subscribeToThread()`](https://mastra.ai/reference/agents/agent)
|
|
150
|
+
- [`client.getAgent().sendSignal()`](https://mastra.ai/reference/client-js/agents)
|
|
151
|
+
- [`client.getAgent().subscribeToThread()`](https://mastra.ai/reference/client-js/agents)
|
|
@@ -65,6 +65,21 @@ When interacting with pages:
|
|
|
65
65
|
|
|
66
66
|
> **Note:** For local launches (the default), AgentBrowser requires a Chromium binary installed via Playwright. This is normally downloaded automatically when you install `@mastra/agent-browser`. If launching the browser fails with `"browser executable is missing"`, run `npx playwright install chromium`. If you connect to a remote browser using the [`cdpUrl`](https://mastra.ai/reference/browser/agent-browser) option, no local Chromium is needed.
|
|
67
67
|
|
|
68
|
+
## Screenshots
|
|
69
|
+
|
|
70
|
+
When the agent uses the `browser_screenshot` tool, it captures a PNG image of the current page and returns it as image content that vision-capable models can interpret directly.
|
|
71
|
+
|
|
72
|
+
Use screenshots when you need to visually inspect the page — for example, evaluating images, layout, or colors. For text or structured data, use `browser_snapshot` instead.
|
|
73
|
+
|
|
74
|
+
To disable the screenshot tool for models that do not support vision, use `excludeTools`:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
const browser = new AgentBrowser({
|
|
78
|
+
headless: false,
|
|
79
|
+
excludeTools: ['browser_screenshot'],
|
|
80
|
+
})
|
|
81
|
+
```
|
|
82
|
+
|
|
68
83
|
## Element refs
|
|
69
84
|
|
|
70
85
|
AgentBrowser uses accessibility tree refs to identify elements. When an agent calls `browser_snapshot`, it receives a text representation of the page with refs like `@e1`, `@e2`, etc. The agent then uses these refs with other tools to interact with elements.
|
|
@@ -61,7 +61,8 @@ Use stagehand tools to interact with pages:
|
|
|
61
61
|
- stagehand_navigate to go to URLs
|
|
62
62
|
- stagehand_act to perform actions described in natural language
|
|
63
63
|
- stagehand_extract to get structured data from the page
|
|
64
|
-
- stagehand_observe to find available actions on the page
|
|
64
|
+
- stagehand_observe to find available actions on the page
|
|
65
|
+
- stagehand_screenshot to visually inspect the page`,
|
|
65
66
|
})
|
|
66
67
|
```
|
|
67
68
|
|
|
@@ -107,6 +108,29 @@ Returns a list of available actions:
|
|
|
107
108
|
]
|
|
108
109
|
```
|
|
109
110
|
|
|
111
|
+
## Screenshots
|
|
112
|
+
|
|
113
|
+
When the agent uses the `stagehand_screenshot` tool, it captures a PNG image of the current page and returns it as image content that vision-capable models can interpret directly.
|
|
114
|
+
|
|
115
|
+
Use screenshots when you need to visually inspect the page — for example, evaluating images, layout, or colors. For text or structured data, use `stagehand_extract` or `stagehand_observe` instead.
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
const browser = new StagehandBrowser({
|
|
119
|
+
headless: false,
|
|
120
|
+
model: 'openai/gpt-5.4',
|
|
121
|
+
})
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
To disable the screenshot tool for models that do not support vision, use `excludeTools`:
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
const browser = new StagehandBrowser({
|
|
128
|
+
headless: false,
|
|
129
|
+
model: 'openai/gpt-5.4',
|
|
130
|
+
excludeTools: ['stagehand_screenshot'],
|
|
131
|
+
})
|
|
132
|
+
```
|
|
133
|
+
|
|
110
134
|
## Browserbase
|
|
111
135
|
|
|
112
136
|
Stagehand has native Browserbase integration for cloud browser infrastructure:
|
|
@@ -51,6 +51,8 @@ Chat with your agent directly, dynamically switch [models](https://mastra.ai/mod
|
|
|
51
51
|
|
|
52
52
|
When you interact with your agent, you can follow each step of its reasoning, view tool call outputs, and [observe](#observability) traces and logs to see how responses are generated. You can also attach [scorers](#scorers) to measure and compare response quality over time.
|
|
53
53
|
|
|
54
|
+
While an agent response is streaming, you can send a follow-up message in the same thread. Studio shows the message as pending until the stream confirms it, then continues the response below that follow-up. Other Studio tabs that have the same thread open can observe the active stream.
|
|
55
|
+
|
|
54
56
|
Use [Editor](https://mastra.ai/docs/editor/overview) to let non-technical team members iterate on agents, version every change, and run experiments without redeploying.
|
|
55
57
|
|
|
56
58
|
### Workflows
|
|
@@ -219,6 +219,33 @@ playAudio(audioStream)
|
|
|
219
219
|
|
|
220
220
|
Visit the [Deepgram Voice Reference](https://mastra.ai/reference/voice/deepgram) for more information on the Deepgram voice provider.
|
|
221
221
|
|
|
222
|
+
**Inworld**:
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
import { Agent } from '@mastra/core/agent'
|
|
226
|
+
import { InworldVoice } from '@mastra/voice-inworld'
|
|
227
|
+
import { playAudio } from '@mastra/node-audio'
|
|
228
|
+
|
|
229
|
+
const voiceAgent = new Agent({
|
|
230
|
+
id: 'voice-agent',
|
|
231
|
+
name: 'Voice Agent',
|
|
232
|
+
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
233
|
+
model: 'openai/gpt-5.4',
|
|
234
|
+
voice: new InworldVoice(),
|
|
235
|
+
})
|
|
236
|
+
|
|
237
|
+
const { text } = await voiceAgent.generate('What color is the sky?')
|
|
238
|
+
|
|
239
|
+
// Convert text to speech to an Audio Stream
|
|
240
|
+
const audioStream = await voiceAgent.voice.speak(text, {
|
|
241
|
+
speaker: 'Dennis', // Optional: specify a speaker
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
playAudio(audioStream)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Visit the [Inworld Voice Reference](https://mastra.ai/reference/voice/inworld) for more information on the Inworld voice provider.
|
|
248
|
+
|
|
222
249
|
**Speechify**:
|
|
223
250
|
|
|
224
251
|
```typescript
|
|
@@ -477,6 +504,34 @@ const { text } = await voiceAgent.generate(transcript)
|
|
|
477
504
|
|
|
478
505
|
Visit the [Deepgram Voice Reference](https://mastra.ai/reference/voice/deepgram) for more information on the Deepgram voice provider.
|
|
479
506
|
|
|
507
|
+
**Inworld**:
|
|
508
|
+
|
|
509
|
+
```typescript
|
|
510
|
+
import { Agent } from '@mastra/core/agent'
|
|
511
|
+
import { InworldVoice } from '@mastra/voice-inworld'
|
|
512
|
+
import { createReadStream } from 'fs'
|
|
513
|
+
|
|
514
|
+
const voiceAgent = new Agent({
|
|
515
|
+
id: 'voice-agent',
|
|
516
|
+
name: 'Voice Agent',
|
|
517
|
+
instructions: 'You are a voice assistant that can help users with their tasks.',
|
|
518
|
+
model: 'openai/gpt-5.4',
|
|
519
|
+
voice: new InworldVoice(),
|
|
520
|
+
})
|
|
521
|
+
|
|
522
|
+
// Use an audio file from a URL
|
|
523
|
+
const audioStream = await createReadStream('./how_can_i_help_you.mp3')
|
|
524
|
+
|
|
525
|
+
// Convert audio to text
|
|
526
|
+
const transcript = await voiceAgent.voice.listen(audioStream)
|
|
527
|
+
console.log(`User said: ${transcript}`)
|
|
528
|
+
|
|
529
|
+
// Generate a response based on the transcript
|
|
530
|
+
const { text } = await voiceAgent.generate(transcript)
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
Visit the [Inworld Voice Reference](https://mastra.ai/reference/voice/inworld) for more information on the Inworld voice provider.
|
|
534
|
+
|
|
480
535
|
**Sarvam**:
|
|
481
536
|
|
|
482
537
|
```typescript
|
|
@@ -779,6 +834,34 @@ const voice = new DeepgramVoice({
|
|
|
779
834
|
|
|
780
835
|
Visit the [Deepgram Voice Reference](https://mastra.ai/reference/voice/deepgram) for more information on the Deepgram voice provider.
|
|
781
836
|
|
|
837
|
+
**Inworld**:
|
|
838
|
+
|
|
839
|
+
```typescript
|
|
840
|
+
// Inworld Voice Configuration
|
|
841
|
+
const voice = new InworldVoice({
|
|
842
|
+
speechModel: {
|
|
843
|
+
name: 'inworld-tts-2',
|
|
844
|
+
apiKey: process.env.INWORLD_API_KEY,
|
|
845
|
+
},
|
|
846
|
+
listeningModel: {
|
|
847
|
+
name: 'groq/whisper-large-v3',
|
|
848
|
+
apiKey: process.env.INWORLD_API_KEY,
|
|
849
|
+
},
|
|
850
|
+
speaker: 'Dennis',
|
|
851
|
+
audioEncoding: 'MP3',
|
|
852
|
+
sampleRateHertz: 48000,
|
|
853
|
+
language: 'en-US',
|
|
854
|
+
})
|
|
855
|
+
|
|
856
|
+
// Per-call options: `deliveryMode` is honored only by `inworld-tts-2`.
|
|
857
|
+
const audioStream = await voice.speak('Hello!', {
|
|
858
|
+
deliveryMode: 'BALANCED', // 'STABLE' | 'BALANCED' | 'CREATIVE'
|
|
859
|
+
language: 'en-US', // BCP-47 per-call override
|
|
860
|
+
})
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
Visit the [Inworld Voice Reference](https://mastra.ai/reference/voice/inworld) for more information on the Inworld voice provider.
|
|
864
|
+
|
|
782
865
|
**Speechify**:
|
|
783
866
|
|
|
784
867
|
```typescript
|
|
@@ -1024,5 +1107,6 @@ For more information on the CompositeVoice, refer to the [CompositeVoice Referen
|
|
|
1024
1107
|
- [Google Gemini Live Voice](https://mastra.ai/reference/voice/google-gemini-live)
|
|
1025
1108
|
- [AWS Nova Sonic Voice](https://mastra.ai/reference/voice/aws-nova-sonic)
|
|
1026
1109
|
- [Deepgram Voice](https://mastra.ai/reference/voice/deepgram)
|
|
1110
|
+
- [Inworld Voice](https://mastra.ai/reference/voice/inworld)
|
|
1027
1111
|
- [PlayAI Voice](https://mastra.ai/reference/voice/playai)
|
|
1028
1112
|
- [Voice Examples](https://github.com/mastra-ai/voice-examples)
|
package/.docs/models/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Model Providers
|
|
2
2
|
|
|
3
|
-
Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to
|
|
3
|
+
Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 3895 models from 110 providers through a single API.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Chutes
|
|
2
2
|
|
|
3
|
-
Access
|
|
3
|
+
Access 39 Chutes models through Mastra's model router. Authentication is handled automatically using the `CHUTES_API_KEY` environment variable.
|
|
4
4
|
|
|
5
5
|
Learn more in the [Chutes documentation](https://llm.chutes.ai).
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ const agent = new Agent({
|
|
|
15
15
|
id: "my-agent",
|
|
16
16
|
name: "My Agent",
|
|
17
17
|
instructions: "You are a helpful assistant",
|
|
18
|
-
model: "chutes/MiniMaxAI/MiniMax-M2.
|
|
18
|
+
model: "chutes/MiniMaxAI/MiniMax-M2.5-TEE"
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
// Generate a response
|
|
@@ -34,76 +34,45 @@ for await (const chunk of stream) {
|
|
|
34
34
|
|
|
35
35
|
| Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
|
|
36
36
|
| ------------------------------------------------------ | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
|
|
37
|
-
| `chutes/
|
|
38
|
-
| `chutes/chutesai/Mistral-Small-3.2-24B-Instruct-2506` | 131K | | | | | | $0.06 | $0.18 |
|
|
39
|
-
| `chutes/deepseek-ai/DeepSeek-R1-0528-TEE` | 164K | | | | | | $0.40 | $2 |
|
|
37
|
+
| `chutes/deepseek-ai/DeepSeek-R1-0528-TEE` | 164K | | | | | | $0.45 | $2 |
|
|
40
38
|
| `chutes/deepseek-ai/DeepSeek-R1-Distill-Llama-70B` | 131K | | | | | | $0.03 | $0.11 |
|
|
41
|
-
| `chutes/deepseek-ai/DeepSeek-
|
|
42
|
-
| `chutes/deepseek-ai/DeepSeek-V3`
|
|
43
|
-
| `chutes/deepseek-ai/DeepSeek-V3-0324-TEE` | 164K | | | | | | $0.19 | $0.87 |
|
|
44
|
-
| `chutes/deepseek-ai/DeepSeek-V3.1-TEE` | 164K | | | | | | $0.20 | $0.80 |
|
|
45
|
-
| `chutes/deepseek-ai/DeepSeek-V3.1-Terminus-TEE` | 164K | | | | | | $0.23 | $0.90 |
|
|
46
|
-
| `chutes/deepseek-ai/DeepSeek-V3.2-Speciale-TEE` | 164K | | | | | | $0.27 | $0.41 |
|
|
39
|
+
| `chutes/deepseek-ai/DeepSeek-V3-0324-TEE` | 164K | | | | | | $0.25 | $1 |
|
|
40
|
+
| `chutes/deepseek-ai/DeepSeek-V3.1-TEE` | 164K | | | | | | $0.27 | $1 |
|
|
47
41
|
| `chutes/deepseek-ai/DeepSeek-V3.2-TEE` | 131K | | | | | | $0.28 | $0.42 |
|
|
48
|
-
| `chutes/
|
|
49
|
-
| `chutes/MiniMaxAI/MiniMax-M2.5-TEE` | 197K | | | | | | $0.
|
|
50
|
-
| `chutes/
|
|
51
|
-
| `chutes/
|
|
52
|
-
| `chutes/moonshotai/Kimi-K2-Instruct-0905` | 262K | | | | | | $0.39 | $2 |
|
|
53
|
-
| `chutes/moonshotai/Kimi-K2-Thinking-TEE` | 262K | | | | | | $0.40 | $2 |
|
|
54
|
-
| `chutes/moonshotai/Kimi-K2.5-TEE` | 262K | | | | | | $0.60 | $3 |
|
|
55
|
-
| `chutes/moonshotai/Kimi-K2.6-TEE` | 262K | | | | | | $0.44 | $2 |
|
|
42
|
+
| `chutes/google/gemma-4-31B-turbo-TEE` | 131K | | | | | | $0.13 | $0.38 |
|
|
43
|
+
| `chutes/MiniMaxAI/MiniMax-M2.5-TEE` | 197K | | | | | | $0.15 | $1 |
|
|
44
|
+
| `chutes/moonshotai/Kimi-K2.5-TEE` | 262K | | | | | | $0.44 | $2 |
|
|
45
|
+
| `chutes/moonshotai/Kimi-K2.6-TEE` | 262K | | | | | | $0.95 | $4 |
|
|
56
46
|
| `chutes/NousResearch/DeepHermes-3-Mistral-24B-Preview` | 33K | | | | | | $0.02 | $0.10 |
|
|
57
47
|
| `chutes/NousResearch/Hermes-4-14B` | 41K | | | | | | $0.01 | $0.05 |
|
|
58
|
-
| `chutes/
|
|
59
|
-
| `chutes/
|
|
60
|
-
| `chutes/NousResearch/Hermes-4.3-36B` | 33K | | | | | | $0.10 | $0.39 |
|
|
61
|
-
| `chutes/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16` | 262K | | | | | | $0.06 | $0.24 |
|
|
62
|
-
| `chutes/openai/gpt-oss-120b-TEE` | 131K | | | | | | $0.04 | $0.18 |
|
|
63
|
-
| `chutes/openai/gpt-oss-20b` | 131K | | | | | | $0.02 | $0.10 |
|
|
64
|
-
| `chutes/OpenGVLab/InternVL3-78B-TEE` | 33K | | | | | | $0.10 | $0.39 |
|
|
65
|
-
| `chutes/Qwen/Qwen2.5-72B-Instruct` | 33K | | | | | | $0.13 | $0.52 |
|
|
48
|
+
| `chutes/openai/gpt-oss-120b-TEE` | 131K | | | | | | $0.09 | $0.36 |
|
|
49
|
+
| `chutes/Qwen/Qwen2.5-72B-Instruct` | 33K | | | | | | $0.30 | $1 |
|
|
66
50
|
| `chutes/Qwen/Qwen2.5-Coder-32B-Instruct` | 33K | | | | | | $0.03 | $0.11 |
|
|
67
51
|
| `chutes/Qwen/Qwen2.5-VL-32B-Instruct` | 16K | | | | | | $0.05 | $0.22 |
|
|
68
|
-
| `chutes/Qwen/
|
|
69
|
-
| `chutes/Qwen/Qwen3-14B` | 41K | | | | | | $0.05 | $0.22 |
|
|
70
|
-
| `chutes/Qwen/Qwen3-235B-A22B` | 41K | | | | | | $0.30 | $1 |
|
|
71
|
-
| `chutes/Qwen/Qwen3-235B-A22B-Instruct-2507-TEE` | 262K | | | | | | $0.08 | $0.55 |
|
|
52
|
+
| `chutes/Qwen/Qwen3-235B-A22B-Instruct-2507-TEE` | 262K | | | | | | $0.10 | $0.60 |
|
|
72
53
|
| `chutes/Qwen/Qwen3-235B-A22B-Thinking-2507` | 262K | | | | | | $0.11 | $0.60 |
|
|
73
54
|
| `chutes/Qwen/Qwen3-30B-A3B` | 41K | | | | | | $0.06 | $0.22 |
|
|
74
|
-
| `chutes/Qwen/Qwen3-
|
|
75
|
-
| `chutes/Qwen/Qwen3-
|
|
76
|
-
| `chutes/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE` | 262K | | | | | | $0.22 | $0.95 |
|
|
77
|
-
| `chutes/Qwen/Qwen3-Coder-Next` | 262K | | | | | | $0.07 | $0.30 |
|
|
55
|
+
| `chutes/Qwen/Qwen3-32B-TEE` | 41K | | | | | | $0.08 | $0.24 |
|
|
56
|
+
| `chutes/Qwen/Qwen3-Coder-Next-TEE` | 262K | | | | | | $0.12 | $0.75 |
|
|
78
57
|
| `chutes/Qwen/Qwen3-Next-80B-A3B-Instruct` | 262K | | | | | | $0.10 | $0.80 |
|
|
79
|
-
| `chutes/Qwen/Qwen3-VL-235B-A22B-Instruct` | 262K | | | | | | $0.30 | $1 |
|
|
80
58
|
| `chutes/Qwen/Qwen3.5-397B-A17B-TEE` | 262K | | | | | | $0.39 | $2 |
|
|
59
|
+
| `chutes/Qwen/Qwen3.6-27B-TEE` | 262K | | | | | | $0.20 | $2 |
|
|
81
60
|
| `chutes/Qwen/Qwen3Guard-Gen-0.6B` | 33K | | | | | | $0.01 | $0.01 |
|
|
82
61
|
| `chutes/rednote-hilab/dots.ocr` | 131K | | | | | | $0.01 | $0.01 |
|
|
83
|
-
| `chutes/tngtech/DeepSeek-
|
|
84
|
-
| `chutes/tngtech/DeepSeek-TNG-R1T2-Chimera` | 164K | | | | | | $0.25 | $0.85 |
|
|
85
|
-
| `chutes/tngtech/TNG-R1T-Chimera-TEE` | 164K | | | | | | $0.25 | $0.85 |
|
|
86
|
-
| `chutes/tngtech/TNG-R1T-Chimera-Turbo` | 164K | | | | | | $0.22 | $0.60 |
|
|
62
|
+
| `chutes/tngtech/DeepSeek-TNG-R1T2-Chimera-TEE` | 164K | | | | | | $0.30 | $1 |
|
|
87
63
|
| `chutes/unsloth/gemma-3-12b-it` | 131K | | | | | | $0.03 | $0.10 |
|
|
88
|
-
| `chutes/unsloth/gemma-3-27b-it` | 128K | | | | | | $0.
|
|
64
|
+
| `chutes/unsloth/gemma-3-27b-it` | 128K | | | | | | $0.03 | $0.11 |
|
|
89
65
|
| `chutes/unsloth/gemma-3-4b-it` | 96K | | | | | | $0.01 | $0.03 |
|
|
90
|
-
| `chutes/unsloth/Llama-3.2-1B-Instruct` |
|
|
66
|
+
| `chutes/unsloth/Llama-3.2-1B-Instruct` | 16K | | | | | | $0.01 | $0.01 |
|
|
91
67
|
| `chutes/unsloth/Llama-3.2-3B-Instruct` | 16K | | | | | | $0.01 | $0.01 |
|
|
92
68
|
| `chutes/unsloth/Mistral-Nemo-Instruct-2407` | 131K | | | | | | $0.02 | $0.04 |
|
|
93
|
-
| `chutes/
|
|
94
|
-
| `chutes/XiaomiMiMo/MiMo-V2-Flash` | 262K | | | | | | $0.09 | $0.29 |
|
|
95
|
-
| `chutes/zai-org/GLM-4.5-Air` | 131K | | | | | | $0.05 | $0.22 |
|
|
96
|
-
| `chutes/zai-org/GLM-4.5-FP8` | 131K | | | | | | $0.30 | $1 |
|
|
97
|
-
| `chutes/zai-org/GLM-4.5-TEE` | 131K | | | | | | $0.35 | $2 |
|
|
98
|
-
| `chutes/zai-org/GLM-4.6-FP8` | 203K | | | | | | $0.30 | $1 |
|
|
99
|
-
| `chutes/zai-org/GLM-4.6-TEE` | 203K | | | | | | $0.40 | $2 |
|
|
69
|
+
| `chutes/XiaomiMiMo/MiMo-V2-Flash-TEE` | 262K | | | | | | $0.09 | $0.29 |
|
|
100
70
|
| `chutes/zai-org/GLM-4.6V` | 131K | | | | | | $0.30 | $0.90 |
|
|
101
|
-
| `chutes/zai-org/GLM-4.7-Flash` | 203K | | | | | | $0.06 | $0.35 |
|
|
102
71
|
| `chutes/zai-org/GLM-4.7-FP8` | 203K | | | | | | $0.30 | $1 |
|
|
103
|
-
| `chutes/zai-org/GLM-4.7-TEE` | 203K | | | | | | $0.
|
|
72
|
+
| `chutes/zai-org/GLM-4.7-TEE` | 203K | | | | | | $0.39 | $2 |
|
|
104
73
|
| `chutes/zai-org/GLM-5-TEE` | 203K | | | | | | $0.95 | $3 |
|
|
105
74
|
| `chutes/zai-org/GLM-5-Turbo` | 203K | | | | | | $0.49 | $2 |
|
|
106
|
-
| `chutes/zai-org/GLM-5.1-TEE` | 203K | | | | | | $
|
|
75
|
+
| `chutes/zai-org/GLM-5.1-TEE` | 203K | | | | | | $1 | $4 |
|
|
107
76
|
|
|
108
77
|
## Advanced configuration
|
|
109
78
|
|
|
@@ -115,7 +84,7 @@ const agent = new Agent({
|
|
|
115
84
|
name: "custom-agent",
|
|
116
85
|
model: {
|
|
117
86
|
url: "https://llm.chutes.ai/v1",
|
|
118
|
-
id: "chutes/MiniMaxAI/MiniMax-M2.
|
|
87
|
+
id: "chutes/MiniMaxAI/MiniMax-M2.5-TEE",
|
|
119
88
|
apiKey: process.env.CHUTES_API_KEY,
|
|
120
89
|
headers: {
|
|
121
90
|
"X-Custom-Header": "value"
|
|
@@ -134,7 +103,7 @@ const agent = new Agent({
|
|
|
134
103
|
const useAdvanced = requestContext.task === "complex";
|
|
135
104
|
return useAdvanced
|
|
136
105
|
? "chutes/zai-org/GLM-5.1-TEE"
|
|
137
|
-
: "chutes/MiniMaxAI/MiniMax-M2.
|
|
106
|
+
: "chutes/MiniMaxAI/MiniMax-M2.5-TEE";
|
|
138
107
|
}
|
|
139
108
|
});
|
|
140
109
|
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Databricks
|
|
2
|
+
|
|
3
|
+
Access 25 Databricks models through Mastra's model router. Authentication is handled automatically using the `DATABRICKS_TOKEN` environment variable. Configure `DATABRICKS_HOST` as well.
|
|
4
|
+
|
|
5
|
+
Learn more in the [Databricks documentation](https://docs.databricks.com/aws/en/machine-learning/foundation-models/).
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
DATABRICKS_HOST=your-value
|
|
9
|
+
DATABRICKS_TOKEN=your-api-token
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { Agent } from "@mastra/core/agent";
|
|
14
|
+
|
|
15
|
+
const agent = new Agent({
|
|
16
|
+
id: "my-agent",
|
|
17
|
+
name: "My Agent",
|
|
18
|
+
instructions: "You are a helpful assistant",
|
|
19
|
+
model: "databricks/databricks-claude-haiku-4-5"
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Generate a response
|
|
23
|
+
const response = await agent.generate("Hello!");
|
|
24
|
+
|
|
25
|
+
// Stream a response
|
|
26
|
+
const stream = await agent.stream("Tell me a story");
|
|
27
|
+
for await (const chunk of stream) {
|
|
28
|
+
console.log(chunk);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
> **Info:** Mastra uses the OpenAI-compatible `/chat/completions` endpoint. Some provider-specific features may not be available. Check the [Databricks documentation](https://docs.databricks.com/aws/en/machine-learning/foundation-models/) for details.
|
|
33
|
+
|
|
34
|
+
## Models
|
|
35
|
+
|
|
36
|
+
| Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
|
|
37
|
+
| --------------------------------------------- | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
|
|
38
|
+
| `databricks/databricks-claude-haiku-4-5` | 200K | | | | | | $1 | $5 |
|
|
39
|
+
| `databricks/databricks-claude-opus-4-1` | 200K | | | | | | $15 | $75 |
|
|
40
|
+
| `databricks/databricks-claude-opus-4-5` | 200K | | | | | | $5 | $25 |
|
|
41
|
+
| `databricks/databricks-claude-opus-4-6` | 1.0M | | | | | | $5 | $25 |
|
|
42
|
+
| `databricks/databricks-claude-opus-4-7` | 1.0M | | | | | | $5 | $25 |
|
|
43
|
+
| `databricks/databricks-claude-sonnet-4` | 200K | | | | | | $3 | $15 |
|
|
44
|
+
| `databricks/databricks-claude-sonnet-4-5` | 200K | | | | | | $3 | $15 |
|
|
45
|
+
| `databricks/databricks-claude-sonnet-4-6` | 1.0M | | | | | | $3 | $15 |
|
|
46
|
+
| `databricks/databricks-gemini-2-5-flash` | 1.0M | | | | | | $0.30 | $3 |
|
|
47
|
+
| `databricks/databricks-gemini-2-5-pro` | 1.0M | | | | | | $1 | $10 |
|
|
48
|
+
| `databricks/databricks-gemini-3-1-flash-lite` | 1.0M | | | | | | $0.25 | $2 |
|
|
49
|
+
| `databricks/databricks-gemini-3-1-pro` | 1.0M | | | | | | $2 | $12 |
|
|
50
|
+
| `databricks/databricks-gemini-3-flash` | 1.0M | | | | | | $0.50 | $3 |
|
|
51
|
+
| `databricks/databricks-gemini-3-pro` | 1.0M | | | | | | $2 | $12 |
|
|
52
|
+
| `databricks/databricks-gpt-5` | 400K | | | | | | $1 | $10 |
|
|
53
|
+
| `databricks/databricks-gpt-5-1` | 400K | | | | | | $1 | $10 |
|
|
54
|
+
| `databricks/databricks-gpt-5-2` | 400K | | | | | | $2 | $14 |
|
|
55
|
+
| `databricks/databricks-gpt-5-4` | 1.1M | | | | | | $3 | $15 |
|
|
56
|
+
| `databricks/databricks-gpt-5-4-mini` | 400K | | | | | | $0.75 | $5 |
|
|
57
|
+
| `databricks/databricks-gpt-5-4-nano` | 400K | | | | | | $0.20 | $1 |
|
|
58
|
+
| `databricks/databricks-gpt-5-5` | 1.1M | | | | | | $5 | $30 |
|
|
59
|
+
| `databricks/databricks-gpt-5-mini` | 400K | | | | | | $0.25 | $2 |
|
|
60
|
+
| `databricks/databricks-gpt-5-nano` | 400K | | | | | | $0.05 | $0.40 |
|
|
61
|
+
| `databricks/databricks-gpt-oss-120b` | 131K | | | | | | $0.07 | $0.28 |
|
|
62
|
+
| `databricks/databricks-gpt-oss-20b` | 131K | | | | | | $0.05 | $0.20 |
|
|
63
|
+
|
|
64
|
+
## Advanced configuration
|
|
65
|
+
|
|
66
|
+
### Custom headers
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
const agent = new Agent({
|
|
70
|
+
id: "custom-agent",
|
|
71
|
+
name: "custom-agent",
|
|
72
|
+
model: {
|
|
73
|
+
url: "https://${DATABRICKS_HOST}/ai-gateway/mlflow/v1",
|
|
74
|
+
id: "databricks/databricks-claude-haiku-4-5",
|
|
75
|
+
apiKey: process.env.DATABRICKS_TOKEN,
|
|
76
|
+
headers: {
|
|
77
|
+
"X-Custom-Header": "value"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Dynamic model selection
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const agent = new Agent({
|
|
87
|
+
id: "dynamic-agent",
|
|
88
|
+
name: "Dynamic Agent",
|
|
89
|
+
model: ({ requestContext }) => {
|
|
90
|
+
const useAdvanced = requestContext.task === "complex";
|
|
91
|
+
return useAdvanced
|
|
92
|
+
? "databricks/databricks-gpt-oss-20b"
|
|
93
|
+
: "databricks/databricks-claude-haiku-4-5";
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
```
|
|
@@ -15,7 +15,7 @@ const agent = new Agent({
|
|
|
15
15
|
id: "my-agent",
|
|
16
16
|
name: "My Agent",
|
|
17
17
|
instructions: "You are a helpful assistant",
|
|
18
|
-
model: "novita-ai/
|
|
18
|
+
model: "novita-ai/Sao10K/L3-8B-Stheno-v3.2"
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
// Generate a response
|
|
@@ -64,6 +64,7 @@ for await (const chunk of stream) {
|
|
|
64
64
|
| `novita-ai/google/gemma-4-31b-it` | 262K | | | | | | $0.14 | $0.40 |
|
|
65
65
|
| `novita-ai/gryphe/mythomax-l2-13b` | 4K | | | | | | $0.09 | $0.09 |
|
|
66
66
|
| `novita-ai/inclusionai/ling-2.6-1t` | 262K | | | | | | — | — |
|
|
67
|
+
| `novita-ai/inclusionai/ling-2.6-flash` | 262K | | | | | | $0.10 | $0.30 |
|
|
67
68
|
| `novita-ai/kwaipilot/kat-coder-pro` | 256K | | | | | | $0.30 | $1 |
|
|
68
69
|
| `novita-ai/meta-llama/llama-3-70b-instruct` | 8K | | | | | | $0.51 | $0.74 |
|
|
69
70
|
| `novita-ai/meta-llama/llama-3-8b-instruct` | 8K | | | | | | $0.04 | $0.04 |
|
|
@@ -117,10 +118,9 @@ for await (const chunk of stream) {
|
|
|
117
118
|
| `novita-ai/qwen/qwen3.5-27b` | 262K | | | | | | $0.30 | $2 |
|
|
118
119
|
| `novita-ai/qwen/qwen3.5-35b-a3b` | 262K | | | | | | $0.25 | $2 |
|
|
119
120
|
| `novita-ai/qwen/qwen3.5-397b-a17b` | 262K | | | | | | $0.60 | $4 |
|
|
120
|
-
| `novita-ai/qwen/qwen3.6-27b` | 262K | | | | | | $0.60 | $4 |
|
|
121
121
|
| `novita-ai/sao10k/l3-70b-euryale-v2.1` | 8K | | | | | | $1 | $1 |
|
|
122
122
|
| `novita-ai/sao10k/l3-8b-lunaris` | 8K | | | | | | $0.05 | $0.05 |
|
|
123
|
-
| `novita-ai/
|
|
123
|
+
| `novita-ai/Sao10K/L3-8B-Stheno-v3.2` | 8K | | | | | | $0.05 | $0.05 |
|
|
124
124
|
| `novita-ai/sao10k/l31-70b-euryale-v2.2` | 8K | | | | | | $1 | $1 |
|
|
125
125
|
| `novita-ai/xiaomimimo/mimo-v2-flash` | 262K | | | | | | $0.10 | $0.30 |
|
|
126
126
|
| `novita-ai/zai-org/autoglm-phone-9b-multilingual` | 66K | | | | | | $0.04 | $0.14 |
|
|
@@ -144,7 +144,7 @@ const agent = new Agent({
|
|
|
144
144
|
name: "custom-agent",
|
|
145
145
|
model: {
|
|
146
146
|
url: "https://api.novita.ai/openai",
|
|
147
|
-
id: "novita-ai/
|
|
147
|
+
id: "novita-ai/Sao10K/L3-8B-Stheno-v3.2",
|
|
148
148
|
apiKey: process.env.NOVITA_API_KEY,
|
|
149
149
|
headers: {
|
|
150
150
|
"X-Custom-Header": "value"
|
|
@@ -163,7 +163,7 @@ const agent = new Agent({
|
|
|
163
163
|
const useAdvanced = requestContext.task === "complex";
|
|
164
164
|
return useAdvanced
|
|
165
165
|
? "novita-ai/zai-org/glm-5.1"
|
|
166
|
-
: "novita-ai/
|
|
166
|
+
: "novita-ai/Sao10K/L3-8B-Stheno-v3.2";
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
```
|