@mastra/mcp-docs-server 1.0.0-beta.1 → 1.0.0-beta.11
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/organized/changelogs/%40internal%2Fchangeset-cli.md +1 -15
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +1 -7
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +201 -1
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +1 -55
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +276 -76
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +200 -0
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +26 -0
- package/.docs/organized/changelogs/%40mastra%2Fconvex.md +89 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +392 -192
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +200 -0
- package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +61 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flance.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +263 -63
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Frag.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Freact.md +154 -1
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +18 -0
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +274 -74
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +92 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +67 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +201 -1
- package/.docs/organized/changelogs/create-mastra.md +201 -1
- package/.docs/organized/changelogs/mastra.md +201 -1
- package/.docs/organized/code-examples/agui.md +1 -0
- package/.docs/organized/code-examples/ai-elements.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-v5.md +3 -2
- package/.docs/organized/code-examples/assistant-ui.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-express.md +1 -1
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +2 -2
- package/.docs/organized/code-examples/client-side-tools.md +1 -1
- package/.docs/organized/code-examples/crypto-chatbot.md +2 -2
- package/.docs/organized/code-examples/fireworks-r1.md +1 -1
- package/.docs/organized/code-examples/heads-up-game.md +1 -1
- package/.docs/organized/code-examples/mcp-configuration.md +0 -3
- package/.docs/organized/code-examples/mcp-server-adapters.md +720 -0
- package/.docs/organized/code-examples/memory-per-resource-example.md +1 -1
- package/.docs/organized/code-examples/memory-with-processors.md +1 -1
- package/.docs/organized/code-examples/openapi-spec-writer.md +1 -1
- package/.docs/organized/code-examples/processors-with-ai-sdk.md +14 -0
- package/.docs/organized/code-examples/quick-start.md +2 -2
- package/.docs/organized/code-examples/server-app-access.md +342 -0
- package/.docs/organized/code-examples/server-express-adapter.md +87 -0
- package/.docs/organized/code-examples/server-hono-adapter.md +85 -0
- package/.docs/organized/code-examples/stock-price-tool.md +1 -21
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +1 -1
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-memory.md +1 -1
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-suspend-resume.md +1 -1
- package/.docs/raw/agents/adding-voice.mdx +56 -10
- package/.docs/raw/agents/agent-approval.mdx +189 -0
- package/.docs/raw/agents/agent-memory.mdx +1 -1
- package/.docs/raw/agents/guardrails.mdx +70 -30
- package/.docs/raw/agents/networks.mdx +3 -3
- package/.docs/raw/agents/overview.mdx +18 -167
- package/.docs/raw/agents/processors.mdx +430 -0
- package/.docs/raw/agents/structured-output.mdx +224 -0
- package/.docs/raw/agents/using-tools.mdx +14 -14
- package/.docs/raw/auth/auth0.mdx +1 -1
- package/.docs/raw/auth/clerk.mdx +1 -1
- package/.docs/raw/auth/firebase.mdx +1 -1
- package/.docs/raw/auth/index.mdx +1 -1
- package/.docs/raw/auth/jwt.mdx +1 -1
- package/.docs/raw/auth/supabase.mdx +1 -1
- package/.docs/raw/auth/workos.mdx +1 -1
- package/.docs/raw/community/contributing-templates.mdx +1 -1
- package/.docs/raw/community/discord.mdx +2 -2
- package/.docs/raw/community/licensing.mdx +1 -1
- package/.docs/raw/course/01-first-agent/05-running-playground.md +5 -5
- package/.docs/raw/course/01-first-agent/09-testing-your-agent.md +3 -3
- package/.docs/raw/course/01-first-agent/13-testing-your-tool.md +3 -3
- package/.docs/raw/course/01-first-agent/17-testing-memory.md +2 -2
- package/.docs/raw/course/04-workflows/07-using-playground.md +1 -1
- package/.docs/raw/deployment/{server-deployment.mdx → building-mastra.mdx} +4 -4
- package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +3 -3
- package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +2 -2
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/cloudflare-deployer.mdx +1 -1
- package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/index.mdx +26 -29
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/netlify-deployer.mdx +45 -14
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/vercel-deployer.mdx +1 -1
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/dashboard.mdx +3 -3
- package/.docs/raw/deployment/mastra-cloud/observability.mdx +53 -0
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/overview.mdx +3 -3
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/setting-up.mdx +4 -4
- package/.docs/raw/deployment/monorepo.mdx +3 -3
- package/.docs/raw/deployment/overview.mdx +7 -7
- package/.docs/raw/deployment/web-framework.mdx +6 -6
- package/.docs/raw/evals/{off-the-shelf-scorers.mdx → built-in-scorers.mdx} +17 -15
- package/.docs/raw/evals/custom-scorers.mdx +4 -6
- package/.docs/raw/evals/overview.mdx +5 -6
- package/.docs/raw/evals/running-in-ci.mdx +2 -4
- package/.docs/raw/getting-started/{installation.mdx → manual-install.mdx} +6 -80
- package/.docs/raw/getting-started/mcp-docs-server.mdx +63 -6
- package/.docs/raw/getting-started/project-structure.mdx +2 -2
- package/.docs/raw/getting-started/start.mdx +72 -0
- package/.docs/raw/getting-started/studio.mdx +32 -7
- package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +147 -0
- package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +627 -0
- package/.docs/raw/{frameworks/agentic-uis → guides/build-your-ui}/assistant-ui.mdx +71 -19
- package/.docs/raw/guides/build-your-ui/copilotkit.mdx +206 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/astro.mdx +24 -26
- package/.docs/raw/{frameworks/servers → guides/getting-started}/express.mdx +4 -5
- package/.docs/raw/guides/{quickstarts/nextjs.mdx → getting-started/next-js.mdx} +26 -25
- package/.docs/raw/guides/getting-started/quickstart.mdx +97 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/sveltekit.mdx +24 -26
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/vite-react.mdx +7 -7
- package/.docs/raw/guides/guide/ai-recruiter.mdx +2 -3
- package/.docs/raw/guides/guide/chef-michel.mdx +2 -3
- package/.docs/raw/guides/guide/notes-mcp-server.mdx +2 -2
- package/.docs/raw/guides/guide/research-assistant.mdx +7 -8
- package/.docs/raw/guides/guide/stock-agent.mdx +4 -6
- package/.docs/raw/guides/guide/web-search.mdx +12 -10
- package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +421 -0
- package/.docs/raw/guides/index.mdx +3 -35
- package/.docs/raw/guides/migrations/agentnetwork.mdx +4 -4
- package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +119 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +121 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +42 -2
- package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +31 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +27 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +1 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +28 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +25 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +80 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +68 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +25 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +174 -1
- package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +2 -2
- package/.docs/raw/index.mdx +3 -3
- package/.docs/raw/mcp/overview.mdx +358 -0
- package/.docs/raw/mcp/publishing-mcp-server.mdx +139 -0
- package/.docs/raw/memory/conversation-history.mdx +1 -1
- package/.docs/raw/memory/memory-processors.mdx +265 -80
- package/.docs/raw/memory/overview.mdx +2 -2
- package/.docs/raw/memory/semantic-recall.mdx +9 -9
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-mongodb.mdx +150 -0
- package/.docs/raw/memory/storage/memory-with-pg.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +3 -8
- package/.docs/raw/memory/threads-and-resources.mdx +4 -4
- package/.docs/raw/memory/working-memory.mdx +16 -8
- package/.docs/raw/{logging.mdx → observability/logging.mdx} +7 -7
- package/.docs/raw/observability/overview.mdx +3 -4
- package/.docs/raw/observability/tracing/bridges/otel.mdx +200 -0
- package/.docs/raw/observability/tracing/exporters/arize.mdx +37 -1
- package/.docs/raw/observability/tracing/exporters/braintrust.mdx +20 -1
- package/.docs/raw/observability/tracing/exporters/cloud.mdx +2 -2
- package/.docs/raw/observability/tracing/exporters/default.mdx +1 -1
- package/.docs/raw/observability/tracing/exporters/langfuse.mdx +84 -1
- package/.docs/raw/observability/tracing/exporters/langsmith.mdx +13 -1
- package/.docs/raw/observability/tracing/exporters/otel.mdx +123 -25
- package/.docs/raw/observability/tracing/exporters/posthog.mdx +127 -0
- package/.docs/raw/observability/tracing/overview.mdx +80 -9
- package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +1 -2
- package/.docs/raw/rag/chunking-and-embedding.mdx +16 -17
- package/.docs/raw/rag/overview.mdx +4 -3
- package/.docs/raw/rag/retrieval.mdx +44 -39
- package/.docs/raw/rag/vector-databases.mdx +94 -3
- package/.docs/raw/reference/agents/agent.mdx +19 -16
- package/.docs/raw/reference/agents/generate.mdx +67 -99
- package/.docs/raw/reference/agents/generateLegacy.mdx +3 -3
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDescription.mdx +1 -1
- package/.docs/raw/reference/agents/getInstructions.mdx +1 -1
- package/.docs/raw/reference/agents/getLLM.mdx +2 -2
- package/.docs/raw/reference/agents/getMemory.mdx +1 -1
- package/.docs/raw/reference/agents/getModel.mdx +1 -1
- package/.docs/raw/reference/agents/getTools.mdx +69 -0
- package/.docs/raw/reference/agents/getVoice.mdx +1 -1
- package/.docs/raw/reference/agents/listAgents.mdx +1 -1
- package/.docs/raw/reference/agents/listScorers.mdx +1 -1
- package/.docs/raw/reference/agents/listTools.mdx +2 -2
- package/.docs/raw/reference/agents/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/agents/network.mdx +33 -72
- package/.docs/raw/reference/ai-sdk/chat-route.mdx +127 -0
- package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +117 -0
- package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +64 -0
- package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +116 -0
- package/.docs/raw/reference/ai-sdk/network-route.mdx +99 -0
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +289 -0
- package/.docs/raw/reference/ai-sdk/with-mastra.mdx +119 -0
- package/.docs/raw/reference/ai-sdk/workflow-route.mdx +110 -0
- package/.docs/raw/reference/auth/auth0.mdx +1 -1
- package/.docs/raw/reference/auth/clerk.mdx +1 -1
- package/.docs/raw/reference/auth/firebase.mdx +1 -1
- package/.docs/raw/reference/auth/jwt.mdx +1 -1
- package/.docs/raw/reference/auth/supabase.mdx +1 -1
- package/.docs/raw/reference/auth/workos.mdx +1 -1
- package/.docs/raw/reference/cli/create-mastra.mdx +1 -1
- package/.docs/raw/reference/cli/mastra.mdx +19 -6
- package/.docs/raw/reference/client-js/agents.mdx +252 -68
- package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
- package/.docs/raw/reference/client-js/logs.mdx +1 -1
- package/.docs/raw/reference/client-js/mastra-client.mdx +4 -4
- package/.docs/raw/reference/client-js/memory.mdx +48 -2
- package/.docs/raw/reference/client-js/observability.mdx +1 -1
- package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
- package/.docs/raw/reference/client-js/tools.mdx +1 -1
- package/.docs/raw/reference/client-js/vectors.mdx +1 -1
- package/.docs/raw/reference/client-js/workflows.mdx +93 -64
- package/.docs/raw/reference/core/addGateway.mdx +59 -0
- package/.docs/raw/reference/core/getAgent.mdx +1 -1
- package/.docs/raw/reference/core/getAgentById.mdx +1 -1
- package/.docs/raw/reference/core/getDeployer.mdx +1 -1
- package/.docs/raw/reference/core/getGateway.mdx +59 -0
- package/.docs/raw/reference/core/getGatewayById.mdx +62 -0
- package/.docs/raw/reference/core/getLogger.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServer.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServerById.mdx +2 -2
- package/.docs/raw/reference/core/getMemory.mdx +73 -0
- package/.docs/raw/reference/core/getScorer.mdx +1 -1
- package/.docs/raw/reference/core/getScorerById.mdx +1 -1
- package/.docs/raw/reference/core/getServer.mdx +3 -3
- package/.docs/raw/reference/core/getStorage.mdx +1 -1
- package/.docs/raw/reference/core/getStoredAgentById.mdx +183 -0
- package/.docs/raw/reference/core/getTelemetry.mdx +1 -1
- package/.docs/raw/reference/core/getVector.mdx +1 -1
- package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
- package/.docs/raw/reference/core/listAgents.mdx +1 -1
- package/.docs/raw/reference/core/listGateways.mdx +53 -0
- package/.docs/raw/reference/core/listLogs.mdx +2 -2
- package/.docs/raw/reference/core/listLogsByRunId.mdx +2 -2
- package/.docs/raw/reference/core/listMCPServers.mdx +2 -2
- package/.docs/raw/reference/core/listMemory.mdx +70 -0
- package/.docs/raw/reference/core/listScorers.mdx +1 -1
- package/.docs/raw/reference/core/listStoredAgents.mdx +151 -0
- package/.docs/raw/reference/core/listVectors.mdx +1 -1
- package/.docs/raw/reference/core/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/core/mastra-class.mdx +17 -1
- package/.docs/raw/reference/core/mastra-model-gateway.mdx +227 -0
- package/.docs/raw/reference/core/setLogger.mdx +2 -2
- package/.docs/raw/reference/core/setStorage.mdx +1 -1
- package/.docs/raw/reference/core/setTelemetry.mdx +2 -2
- package/.docs/raw/reference/deployer/cloudflare.mdx +1 -1
- package/.docs/raw/reference/deployer/deployer.mdx +1 -1
- package/.docs/raw/reference/deployer/netlify.mdx +2 -3
- package/.docs/raw/reference/deployer/vercel.mdx +1 -1
- package/.docs/raw/reference/evals/answer-relevancy.mdx +29 -99
- package/.docs/raw/reference/evals/answer-similarity.mdx +13 -259
- package/.docs/raw/reference/evals/bias.mdx +30 -88
- package/.docs/raw/reference/evals/completeness.mdx +32 -91
- package/.docs/raw/reference/evals/content-similarity.mdx +29 -89
- package/.docs/raw/reference/evals/context-precision.mdx +29 -131
- package/.docs/raw/reference/evals/context-relevance.mdx +12 -12
- package/.docs/raw/reference/evals/create-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/faithfulness.mdx +29 -102
- package/.docs/raw/reference/evals/hallucination.mdx +29 -104
- package/.docs/raw/reference/evals/keyword-coverage.mdx +29 -108
- package/.docs/raw/reference/evals/mastra-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/noise-sensitivity.mdx +12 -12
- package/.docs/raw/reference/evals/prompt-alignment.mdx +16 -16
- package/.docs/raw/reference/evals/run-evals.mdx +1 -1
- package/.docs/raw/reference/evals/scorer-utils.mdx +362 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +28 -101
- package/.docs/raw/reference/evals/tone-consistency.mdx +26 -99
- package/.docs/raw/reference/evals/tool-call-accuracy.mdx +8 -8
- package/.docs/raw/reference/evals/toxicity.mdx +30 -93
- package/.docs/raw/reference/index.mdx +1 -0
- package/.docs/raw/reference/logging/pino-logger.mdx +2 -2
- package/.docs/raw/reference/memory/createThread.mdx +1 -1
- package/.docs/raw/reference/memory/deleteMessages.mdx +1 -1
- package/.docs/raw/reference/memory/getThreadById.mdx +1 -1
- package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +1 -1
- package/.docs/raw/reference/memory/memory-class.mdx +6 -8
- package/.docs/raw/reference/memory/query.mdx +1 -1
- package/.docs/raw/reference/memory/recall.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +177 -0
- package/.docs/raw/reference/observability/tracing/configuration.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +30 -1
- package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +44 -1
- package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +18 -2
- package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +34 -44
- package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +132 -0
- package/.docs/raw/reference/observability/tracing/instances.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/interfaces.mdx +30 -5
- package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/spans.mdx +1 -5
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +2 -2
- package/.docs/raw/reference/processors/language-detector.mdx +11 -4
- package/.docs/raw/reference/processors/message-history-processor.mdx +131 -0
- package/.docs/raw/reference/processors/moderation-processor.mdx +13 -6
- package/.docs/raw/reference/processors/pii-detector.mdx +13 -6
- package/.docs/raw/reference/processors/processor-interface.mdx +803 -0
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +11 -4
- package/.docs/raw/reference/processors/semantic-recall-processor.mdx +197 -0
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +4 -5
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +3 -3
- package/.docs/raw/reference/processors/tool-call-filter.mdx +125 -0
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +2 -2
- package/.docs/raw/reference/processors/working-memory-processor.mdx +221 -0
- package/.docs/raw/reference/rag/chunk.mdx +1 -1
- package/.docs/raw/reference/rag/database-config.mdx +1 -1
- package/.docs/raw/reference/rag/document.mdx +1 -1
- package/.docs/raw/reference/rag/embeddings.mdx +6 -6
- package/.docs/raw/reference/rag/extract-params.mdx +1 -1
- package/.docs/raw/reference/rag/graph-rag.mdx +1 -1
- package/.docs/raw/reference/rag/metadata-filters.mdx +1 -1
- package/.docs/raw/reference/rag/rerank.mdx +2 -3
- package/.docs/raw/reference/rag/rerankWithScorer.mdx +1 -2
- package/.docs/raw/reference/server/create-route.mdx +328 -0
- package/.docs/raw/reference/server/express-adapter.mdx +260 -0
- package/.docs/raw/reference/server/hono-adapter.mdx +242 -0
- package/.docs/raw/reference/server/mastra-server.mdx +345 -0
- package/.docs/raw/reference/server/routes.mdx +250 -0
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +38 -1
- package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
- package/.docs/raw/reference/storage/convex.mdx +164 -0
- package/.docs/raw/reference/storage/dynamodb.mdx +1 -1
- package/.docs/raw/reference/storage/lance.mdx +34 -1
- package/.docs/raw/reference/storage/libsql.mdx +38 -1
- package/.docs/raw/reference/storage/mongodb.mdx +40 -1
- package/.docs/raw/reference/storage/mssql.mdx +38 -1
- package/.docs/raw/reference/storage/postgresql.mdx +38 -1
- package/.docs/raw/reference/storage/upstash.mdx +1 -1
- package/.docs/raw/reference/streaming/ChunkType.mdx +25 -4
- package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +1 -1
- package/.docs/raw/reference/streaming/agents/stream.mdx +84 -124
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +1 -1
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +8 -10
- package/.docs/raw/reference/streaming/workflows/{resumeStreamVNext.mdx → resumeStream.mdx} +51 -11
- package/.docs/raw/reference/streaming/workflows/stream.mdx +84 -25
- package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +170 -0
- package/.docs/raw/reference/templates/overview.mdx +2 -5
- package/.docs/raw/reference/tools/client.mdx +2 -3
- package/.docs/raw/reference/tools/create-tool.mdx +135 -4
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +1 -1
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +7 -7
- package/.docs/raw/reference/tools/mcp-client.mdx +131 -23
- package/.docs/raw/reference/tools/mcp-server.mdx +56 -8
- package/.docs/raw/reference/tools/vector-query-tool.mdx +16 -17
- package/.docs/raw/reference/vectors/astra.mdx +1 -1
- package/.docs/raw/reference/vectors/chroma.mdx +82 -2
- package/.docs/raw/reference/vectors/convex.mdx +429 -0
- package/.docs/raw/reference/vectors/couchbase.mdx +25 -18
- package/.docs/raw/reference/vectors/duckdb.mdx +462 -0
- package/.docs/raw/reference/vectors/elasticsearch.mdx +310 -0
- package/.docs/raw/reference/vectors/lance.mdx +39 -23
- package/.docs/raw/reference/vectors/libsql.mdx +36 -3
- package/.docs/raw/reference/vectors/mongodb.mdx +36 -3
- package/.docs/raw/reference/vectors/opensearch.mdx +38 -17
- package/.docs/raw/reference/vectors/pg.mdx +44 -37
- package/.docs/raw/reference/vectors/pinecone.mdx +70 -3
- package/.docs/raw/reference/vectors/qdrant.mdx +37 -2
- package/.docs/raw/reference/vectors/s3vectors.mdx +1 -1
- package/.docs/raw/reference/vectors/turbopuffer.mdx +75 -1
- package/.docs/raw/reference/vectors/upstash.mdx +1 -1
- package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
- package/.docs/raw/reference/voice/azure.mdx +96 -81
- package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
- package/.docs/raw/reference/voice/composite-voice.mdx +72 -29
- package/.docs/raw/reference/voice/deepgram.mdx +1 -1
- package/.docs/raw/reference/voice/elevenlabs.mdx +1 -1
- package/.docs/raw/reference/voice/google-gemini-live.mdx +1 -1
- package/.docs/raw/reference/voice/google.mdx +160 -21
- package/.docs/raw/reference/voice/mastra-voice.mdx +1 -1
- package/.docs/raw/reference/voice/murf.mdx +1 -1
- package/.docs/raw/reference/voice/openai-realtime.mdx +3 -3
- package/.docs/raw/reference/voice/openai.mdx +1 -1
- package/.docs/raw/reference/voice/playai.mdx +1 -1
- package/.docs/raw/reference/voice/sarvam.mdx +1 -1
- package/.docs/raw/reference/voice/speechify.mdx +1 -1
- package/.docs/raw/reference/voice/voice.addInstructions.mdx +3 -4
- package/.docs/raw/reference/voice/voice.addTools.mdx +2 -2
- package/.docs/raw/reference/voice/voice.answer.mdx +2 -2
- package/.docs/raw/reference/voice/voice.close.mdx +2 -2
- package/.docs/raw/reference/voice/voice.connect.mdx +2 -2
- package/.docs/raw/reference/voice/voice.events.mdx +1 -1
- package/.docs/raw/reference/voice/voice.getSpeakers.mdx +1 -1
- package/.docs/raw/reference/voice/voice.listen.mdx +87 -53
- package/.docs/raw/reference/voice/voice.off.mdx +2 -2
- package/.docs/raw/reference/voice/voice.on.mdx +2 -2
- package/.docs/raw/reference/voice/voice.send.mdx +2 -2
- package/.docs/raw/reference/voice/voice.speak.mdx +76 -41
- package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -2
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +1 -1
- package/.docs/raw/reference/workflows/run-methods/restart.mdx +142 -0
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +45 -1
- package/.docs/raw/reference/workflows/run-methods/start.mdx +48 -4
- package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +310 -0
- package/.docs/raw/reference/workflows/run.mdx +28 -6
- package/.docs/raw/reference/workflows/step.mdx +65 -1
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +69 -4
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow.mdx +44 -2
- package/.docs/raw/server-db/custom-adapters.mdx +386 -0
- package/.docs/raw/server-db/custom-api-routes.mdx +6 -6
- package/.docs/raw/server-db/mastra-client.mdx +3 -4
- package/.docs/raw/server-db/{production-server.mdx → mastra-server.mdx} +22 -12
- package/.docs/raw/server-db/middleware.mdx +31 -31
- package/.docs/raw/server-db/request-context.mdx +3 -4
- package/.docs/raw/server-db/server-adapters.mdx +312 -0
- package/.docs/raw/server-db/storage.mdx +12 -1
- package/.docs/raw/streaming/events.mdx +1 -1
- package/.docs/raw/streaming/overview.mdx +27 -16
- package/.docs/raw/streaming/tool-streaming.mdx +58 -19
- package/.docs/raw/streaming/workflow-streaming.mdx +6 -12
- package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -3
- package/.docs/raw/tools-mcp/mcp-overview.mdx +4 -6
- package/.docs/raw/tools-mcp/overview.mdx +1 -1
- package/.docs/raw/voice/overview.mdx +88 -41
- package/.docs/raw/voice/speech-to-speech.mdx +5 -5
- package/.docs/raw/voice/speech-to-text.mdx +2 -3
- package/.docs/raw/voice/text-to-speech.mdx +2 -3
- package/.docs/raw/workflows/agents-and-tools.mdx +43 -5
- package/.docs/raw/workflows/control-flow.mdx +534 -3
- package/.docs/raw/workflows/error-handling.mdx +5 -4
- package/.docs/raw/workflows/human-in-the-loop.mdx +160 -213
- package/.docs/raw/workflows/inngest-workflow.mdx +1 -1
- package/.docs/raw/workflows/input-data-mapping.mdx +1 -1
- package/.docs/raw/workflows/overview.mdx +67 -47
- package/.docs/raw/workflows/snapshots.mdx +5 -3
- package/.docs/raw/workflows/suspend-and-resume.mdx +121 -204
- package/.docs/raw/workflows/time-travel.mdx +313 -0
- package/.docs/raw/workflows/workflow-state.mdx +190 -0
- package/CHANGELOG.md +88 -0
- package/dist/{chunk-5NJC7NRO.js → chunk-4CM2BQNP.js} +24 -4
- package/dist/prepare-docs/package-changes.d.ts.map +1 -1
- package/dist/prepare-docs/prepare.js +1 -1
- package/dist/stdio.js +17 -19
- package/package.json +10 -14
- package/.docs/raw/deployment/serverless-platforms/index.mdx +0 -58
- package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +0 -688
- package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +0 -123
- package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +0 -382
- package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +0 -179
- package/.docs/raw/frameworks/web-frameworks/next-js.mdx +0 -379
- package/.docs/raw/getting-started/templates.mdx +0 -73
- package/.docs/raw/mastra-cloud/observability.mdx +0 -51
- package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +0 -47
- package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +0 -153
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Adding Voice to Agents | Agents
|
|
2
|
+
title: "Adding Voice to Agents | Agents"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Adding Voice to Agents
|
|
@@ -15,7 +15,6 @@ import { createReadStream } from "fs";
|
|
|
15
15
|
import path from "path";
|
|
16
16
|
import { Agent } from "@mastra/core/agent";
|
|
17
17
|
import { OpenAIVoice } from "@mastra/voice-openai";
|
|
18
|
-
import { openai } from "@ai-sdk/openai";
|
|
19
18
|
|
|
20
19
|
// Initialize the voice provider with default settings
|
|
21
20
|
const voice = new OpenAIVoice();
|
|
@@ -25,7 +24,7 @@ export const agent = new Agent({
|
|
|
25
24
|
id: "voice-agent",
|
|
26
25
|
name: "Voice Agent",
|
|
27
26
|
instructions: `You are a helpful assistant with both STT and TTS capabilities.`,
|
|
28
|
-
model: openai
|
|
27
|
+
model: "openai/gpt-5.1",
|
|
29
28
|
voice,
|
|
30
29
|
});
|
|
31
30
|
|
|
@@ -105,7 +104,7 @@ import { search, calculate } from "../tools";
|
|
|
105
104
|
// Initialize the realtime voice provider
|
|
106
105
|
const voice = new OpenAIRealtimeVoice({
|
|
107
106
|
apiKey: process.env.OPENAI_API_KEY,
|
|
108
|
-
model: "gpt-
|
|
107
|
+
model: "gpt-5.1-realtime",
|
|
109
108
|
speaker: "alloy",
|
|
110
109
|
});
|
|
111
110
|
|
|
@@ -114,7 +113,7 @@ export const agent = new Agent({
|
|
|
114
113
|
id: "speech-to-speech-agent",
|
|
115
114
|
name: "Speech-to-Speech Agent",
|
|
116
115
|
instructions: `You are a helpful assistant with speech-to-speech capabilities.`,
|
|
117
|
-
model: openai
|
|
116
|
+
model: "openai/gpt-5.1",
|
|
118
117
|
tools: {
|
|
119
118
|
// Tools configured on Agent are passed to voice provider
|
|
120
119
|
search,
|
|
@@ -178,7 +177,6 @@ import { Agent } from "@mastra/core/agent";
|
|
|
178
177
|
import { CompositeVoice } from "@mastra/core/voice";
|
|
179
178
|
import { OpenAIVoice } from "@mastra/voice-openai";
|
|
180
179
|
import { Mastra } from "@mastra/core";
|
|
181
|
-
import { openai } from "@ai-sdk/openai";
|
|
182
180
|
|
|
183
181
|
// Saves an audio stream to a file in the audio directory, creating the directory if it doesn't exist.
|
|
184
182
|
export const saveAudioToFile = async (
|
|
@@ -217,7 +215,7 @@ export const convertToText = async (
|
|
|
217
215
|
export const hybridVoiceAgent = new Agent({
|
|
218
216
|
id: "hybrid-voice-agent",
|
|
219
217
|
name: "Hybrid Voice Agent",
|
|
220
|
-
model: openai
|
|
218
|
+
model: "openai/gpt-5.1",
|
|
221
219
|
instructions: "You can speak and listen using different providers.",
|
|
222
220
|
voice: new CompositeVoice({
|
|
223
221
|
input: new OpenAIVoice(),
|
|
@@ -229,7 +227,7 @@ export const unifiedVoiceAgent = new Agent({
|
|
|
229
227
|
id: "unified-voice-agent",
|
|
230
228
|
name: "Unified Voice Agent",
|
|
231
229
|
instructions: "You are an agent with both STT and TTS capabilities.",
|
|
232
|
-
model: openai
|
|
230
|
+
model: "openai/gpt-5.1",
|
|
233
231
|
voice: new OpenAIVoice(),
|
|
234
232
|
});
|
|
235
233
|
|
|
@@ -269,13 +267,12 @@ import { Agent } from "@mastra/core/agent";
|
|
|
269
267
|
import { CompositeVoice } from "@mastra/core/voice";
|
|
270
268
|
import { OpenAIVoice } from "@mastra/voice-openai";
|
|
271
269
|
import { PlayAIVoice } from "@mastra/voice-playai";
|
|
272
|
-
import { openai } from "@ai-sdk/openai";
|
|
273
270
|
|
|
274
271
|
export const agent = new Agent({
|
|
275
272
|
id: "voice-agent",
|
|
276
273
|
name: "Voice Agent",
|
|
277
274
|
instructions: `You are a helpful assistant with both STT and TTS capabilities.`,
|
|
278
|
-
model: openai
|
|
275
|
+
model: "openai/gpt-5.1",
|
|
279
276
|
|
|
280
277
|
// Create a composite voice using OpenAI for listening and PlayAI for speaking
|
|
281
278
|
voice: new CompositeVoice({
|
|
@@ -285,6 +282,55 @@ export const agent = new Agent({
|
|
|
285
282
|
});
|
|
286
283
|
```
|
|
287
284
|
|
|
285
|
+
### Using AI SDK
|
|
286
|
+
|
|
287
|
+
Mastra supports using AI SDK's transcription and speech models directly in `CompositeVoice`, giving you access to a wide range of providers through the AI SDK ecosystem:
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
import { Agent } from "@mastra/core/agent";
|
|
291
|
+
import { CompositeVoice } from "@mastra/core/voice";
|
|
292
|
+
import { openai } from "@ai-sdk/openai";
|
|
293
|
+
import { elevenlabs } from "@ai-sdk/elevenlabs";
|
|
294
|
+
import { groq } from "@ai-sdk/groq";
|
|
295
|
+
|
|
296
|
+
export const agent = new Agent({
|
|
297
|
+
id: "aisdk-voice-agent",
|
|
298
|
+
name: "AI SDK Voice Agent",
|
|
299
|
+
instructions: `You are a helpful assistant with voice capabilities.`,
|
|
300
|
+
model: openai("gpt-5.1"),
|
|
301
|
+
|
|
302
|
+
// Pass AI SDK models directly to CompositeVoice
|
|
303
|
+
voice: new CompositeVoice({
|
|
304
|
+
input: openai.transcription('whisper-1'), // AI SDK transcription model
|
|
305
|
+
output: elevenlabs.speech('eleven_turbo_v2'), // AI SDK speech model
|
|
306
|
+
}),
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// Use voice capabilities as usual
|
|
310
|
+
const audioStream = await agent.voice.speak("Hello!");
|
|
311
|
+
const transcribedText = await agent.voice.listen(audioStream);
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
#### Mix and Match Providers
|
|
315
|
+
|
|
316
|
+
You can mix AI SDK models with Mastra voice providers:
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
import { CompositeVoice } from "@mastra/core/voice";
|
|
320
|
+
import { PlayAIVoice } from "@mastra/voice-playai";
|
|
321
|
+
import { openai } from "@ai-sdk/openai";
|
|
322
|
+
|
|
323
|
+
// Use AI SDK for transcription and Mastra provider for speech
|
|
324
|
+
const voice = new CompositeVoice({
|
|
325
|
+
input: openai.transcription('whisper-1'), // AI SDK
|
|
326
|
+
output: new PlayAIVoice(), // Mastra provider
|
|
327
|
+
});
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
For the complete list of supported AI SDK providers and their capabilities:
|
|
331
|
+
* [Transcription](https://ai-sdk.dev/docs/providers/openai/transcription)
|
|
332
|
+
* [Speech](https://ai-sdk.dev/docs/providers/elevenlabs/speech)
|
|
333
|
+
|
|
288
334
|
## Supported Voice Providers
|
|
289
335
|
|
|
290
336
|
Mastra supports multiple voice providers for text-to-speech (TTS) and speech-to-text (STT) capabilities:
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Agent Approval | Agents"
|
|
3
|
+
description: Learn how to require approvals and suspend tool execution while keeping humans in control of agent workflows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent Approval
|
|
7
|
+
|
|
8
|
+
Agents sometimes require the same [human-in-the-loop](/docs/v1/workflows/human-in-the-loop) oversight used in workflows when calling tools that handle sensitive operations, like deleting resources or performing running long processes. With agent approval you can suspend a tool call and provide feedback to the user, or approve or decline a tool call based on targeted application conditions.
|
|
9
|
+
|
|
10
|
+
## Tool call approval
|
|
11
|
+
|
|
12
|
+
Tool call approval can be enabled at the agent level and apply to every tool the agent uses, or at the tool level providing more granular control over individual tool calls.
|
|
13
|
+
|
|
14
|
+
### Storage
|
|
15
|
+
|
|
16
|
+
Agent approval uses a snapshot to capture the state of the request. Ensure you've enabled a storage provider in your main Mastra instance. If storage isn't enabled you'll see an error relating to snapshot not found.
|
|
17
|
+
|
|
18
|
+
```typescript title="src/mastra/index.ts"
|
|
19
|
+
import { Mastra } from "@mastra/core/mastra";
|
|
20
|
+
import { LibSQLStore } from "@mastra/libsql";
|
|
21
|
+
|
|
22
|
+
export const mastra = new Mastra({
|
|
23
|
+
// ...
|
|
24
|
+
storage: new LibSQLStore({
|
|
25
|
+
id: "mastra-storage",
|
|
26
|
+
url: ":memory:"
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## Agent-level approval
|
|
33
|
+
|
|
34
|
+
When calling an agent using `.stream()` set `requireToolApproval` to `true` which will prevent the agent from calling any of the tools defined in its configuration.
|
|
35
|
+
|
|
36
|
+
```typescript showLineNumbers
|
|
37
|
+
const stream = await agent.stream("What's the weather in London?", {
|
|
38
|
+
requireToolApproval: true
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Approving tool calls
|
|
43
|
+
|
|
44
|
+
To approve a tool call, access `approveToolCall` from the `agent`, passing in the `runId` of the stream. This will let the agent know its now OK to call its tools.
|
|
45
|
+
|
|
46
|
+
```typescript showLineNumbers
|
|
47
|
+
const handleApproval = async () => {
|
|
48
|
+
const approvedStream = await agent.approveToolCall({ runId: stream.runId });
|
|
49
|
+
|
|
50
|
+
for await (const chunk of approvedStream.textStream) {
|
|
51
|
+
process.stdout.write(chunk);
|
|
52
|
+
}
|
|
53
|
+
process.stdout.write("\n");
|
|
54
|
+
};
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Declining tool calls
|
|
58
|
+
|
|
59
|
+
To decline a tool call, access the `declineToolCall` from the `agent`. You will see the streamed response from the agent, but it won't call its tools.
|
|
60
|
+
|
|
61
|
+
```typescript showLineNumbers
|
|
62
|
+
const handleDecline = async () => {
|
|
63
|
+
const declinedStream = await agent.declineToolCall({ runId: stream.runId });
|
|
64
|
+
|
|
65
|
+
for await (const chunk of declinedStream.textStream) {
|
|
66
|
+
process.stdout.write(chunk);
|
|
67
|
+
}
|
|
68
|
+
process.stdout.write("\n");
|
|
69
|
+
};
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Tool-level approval
|
|
73
|
+
|
|
74
|
+
There are two types of tool call approval. The first uses `requireApproval`, which is a property on the tool definition, while `requireToolApproval` is a parameter passed to `agent.stream()`. The second uses `suspend` and lets the agent provide context or confirmation prompts so the user can decide whether the tool call should continue.
|
|
75
|
+
|
|
76
|
+
### Tool approval using `requireToolApproval`
|
|
77
|
+
|
|
78
|
+
In this approach, `requireApproval` is configured on the tool definition (shown below) rather than on the agent.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
export const testTool = createTool({
|
|
82
|
+
id: "test-tool",
|
|
83
|
+
description: "Fetches weather for a location",
|
|
84
|
+
inputSchema: z.object({
|
|
85
|
+
location: z.string()
|
|
86
|
+
}),
|
|
87
|
+
outputSchema: z.object({
|
|
88
|
+
weather: z.string()
|
|
89
|
+
}),
|
|
90
|
+
resumeSchema: z.object({
|
|
91
|
+
approved: z.boolean()
|
|
92
|
+
}),
|
|
93
|
+
execute: async ({ location }) => {
|
|
94
|
+
const response = await fetch(`https://wttr.in/${location}?format=3`);
|
|
95
|
+
const weather = await response.text();
|
|
96
|
+
|
|
97
|
+
return { weather };
|
|
98
|
+
},
|
|
99
|
+
requireApproval: true
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
When `requireApproval` is true for a tool, the stream will include chunks of type `tool-call-approval` to indicate that the call is paused. To continue the call, invoke `resumeStream` with the required `resumeSchema` and the `runId`.
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
const stream = await agent.stream("What's the weather in London?");
|
|
107
|
+
|
|
108
|
+
for await (const chunk of stream.fullStream) {
|
|
109
|
+
if (chunk.type === "tool-call-approval") {
|
|
110
|
+
console.log("Approval required.");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const handleResume = async () => {
|
|
115
|
+
const resumedStream = await agent.resumeStream({ approved: true }, { runId: stream.runId });
|
|
116
|
+
|
|
117
|
+
for await (const chunk of resumedStream.textStream) {
|
|
118
|
+
process.stdout.write(chunk);
|
|
119
|
+
}
|
|
120
|
+
process.stdout.write("\n");
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
### Tool approval using `suspend`
|
|
126
|
+
|
|
127
|
+
With this approach, neither the agent nor the tool uses `requireApproval`. Instead, the tool implementation calls `suspend` to pause execution and return context or confirmation prompts to the user.
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
|
|
131
|
+
export const testToolB = createTool({
|
|
132
|
+
id: "test-tool-b",
|
|
133
|
+
description: "Fetches weather for a location",
|
|
134
|
+
inputSchema: z.object({
|
|
135
|
+
location: z.string()
|
|
136
|
+
}),
|
|
137
|
+
outputSchema: z.object({
|
|
138
|
+
weather: z.string()
|
|
139
|
+
}),
|
|
140
|
+
resumeSchema: z.object({
|
|
141
|
+
approved: z.boolean()
|
|
142
|
+
}),
|
|
143
|
+
suspendSchema: z.object({
|
|
144
|
+
reason: z.string()
|
|
145
|
+
}),
|
|
146
|
+
execute: async ({ location }, { agent } = {}) => {
|
|
147
|
+
const { resumeData: { approved } = {}, suspend } = agent ?? {};
|
|
148
|
+
|
|
149
|
+
if (!approved) {
|
|
150
|
+
return suspend?.({ reason: "Approval required." });
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const response = await fetch(`https://wttr.in/${location}?format=3`);
|
|
154
|
+
const weather = await response.text();
|
|
155
|
+
|
|
156
|
+
return { weather };
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
With this approach the stream will include a `tool-call-suspended` chunk, and the `suspendPayload` will contain the `reason` defined by the tool's `suspendSchema`. To continue the call, invoke `resumeStream` with the required `resumeSchema` and the `runId`.
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
const stream = await agent.stream("What's the weather in London?");
|
|
165
|
+
|
|
166
|
+
for await (const chunk of stream.fullStream) {
|
|
167
|
+
if (chunk.type === "tool-call-suspended") {
|
|
168
|
+
console.log(chunk.payload.suspendPayload);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const handleResume = async () => {
|
|
173
|
+
const resumedStream = await agent.resumeStream({ approved: true }, { runId: stream.runId });
|
|
174
|
+
|
|
175
|
+
for await (const chunk of resumedStream.textStream) {
|
|
176
|
+
process.stdout.write(chunk);
|
|
177
|
+
}
|
|
178
|
+
process.stdout.write("\n");
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Related
|
|
184
|
+
|
|
185
|
+
- [Using Tools](./using-tools)
|
|
186
|
+
- [Agent Overview](./overview)
|
|
187
|
+
- [Tools Overview](../mcp/overview)
|
|
188
|
+
- [Agent Memory](./agent-memory)
|
|
189
|
+
- [Request Context](/docs/v1/server-db/request-context)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Guardrails | Agents
|
|
2
|
+
title: "Guardrails | Agents"
|
|
3
3
|
description: "Learn how to implement guardrails using input and output processors to secure and control AI interactions."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -22,8 +22,7 @@ Use processors for content moderation, prompt injection prevention, response san
|
|
|
22
22
|
|
|
23
23
|
Import and instantiate the relevant processor class, and pass it to your agent’s configuration using either the `inputProcessors` or `outputProcessors` option:
|
|
24
24
|
|
|
25
|
-
```typescript {
|
|
26
|
-
import { openai } from "@ai-sdk/openai";
|
|
25
|
+
```typescript {2,8-16} title="src/mastra/agents/moderated-agent.ts" showLineNumbers copy
|
|
27
26
|
import { Agent } from "@mastra/core/agent";
|
|
28
27
|
import { ModerationProcessor } from "@mastra/core/processors";
|
|
29
28
|
|
|
@@ -31,10 +30,10 @@ export const moderatedAgent = new Agent({
|
|
|
31
30
|
id: "moderated-agent",
|
|
32
31
|
name: "Moderated Agent",
|
|
33
32
|
instructions: "You are a helpful assistant",
|
|
34
|
-
model: openai
|
|
33
|
+
model: "openai/gpt-5.1",
|
|
35
34
|
inputProcessors: [
|
|
36
35
|
new ModerationProcessor({
|
|
37
|
-
model: openai
|
|
36
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
38
37
|
categories: ["hate", "harassment", "violence"],
|
|
39
38
|
threshold: 0.7,
|
|
40
39
|
strategy: "block",
|
|
@@ -52,7 +51,7 @@ Input processors are applied before user messages reach the language model. They
|
|
|
52
51
|
|
|
53
52
|
The `UnicodeNormalizer` is an input processor that cleans and normalizes user input by unifying Unicode characters, standardizing whitespace, and removing problematic symbols, allowing the LLM to better understand user messages.
|
|
54
53
|
|
|
55
|
-
```typescript {
|
|
54
|
+
```typescript {8-11} title="src/mastra/agents/normalized-agent.ts" showLineNumbers copy
|
|
56
55
|
import { UnicodeNormalizer } from "@mastra/core/processors";
|
|
57
56
|
|
|
58
57
|
export const normalizedAgent = new Agent({
|
|
@@ -74,7 +73,7 @@ export const normalizedAgent = new Agent({
|
|
|
74
73
|
|
|
75
74
|
The `PromptInjectionDetector` is an input processor that scans user messages for prompt injection, jailbreak attempts, and system override patterns. It uses an LLM to classify risky input and can block or rewrite it before it reaches the model.
|
|
76
75
|
|
|
77
|
-
```typescript {
|
|
76
|
+
```typescript {8-13} title="src/mastra/agents/secure-agent.ts" showLineNumbers copy
|
|
78
77
|
import { PromptInjectionDetector } from "@mastra/core/processors";
|
|
79
78
|
|
|
80
79
|
export const secureAgent = new Agent({
|
|
@@ -83,7 +82,7 @@ export const secureAgent = new Agent({
|
|
|
83
82
|
// ...
|
|
84
83
|
inputProcessors: [
|
|
85
84
|
new PromptInjectionDetector({
|
|
86
|
-
model: openai
|
|
85
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
87
86
|
threshold: 0.8,
|
|
88
87
|
strategy: "rewrite",
|
|
89
88
|
detectionTypes: ["injection", "jailbreak", "system-override"],
|
|
@@ -98,7 +97,7 @@ export const secureAgent = new Agent({
|
|
|
98
97
|
|
|
99
98
|
The `LanguageDetector` is an input processor that detects and translates user messages into a target language, enabling multilingual support while maintaining consistent interaction. It uses an LLM to identify the language and perform the translation.
|
|
100
99
|
|
|
101
|
-
```typescript {
|
|
100
|
+
```typescript {8-13} title="src/mastra/agents/multilingual-agent.ts" showLineNumbers copy
|
|
102
101
|
import { LanguageDetector } from "@mastra/core/processors";
|
|
103
102
|
|
|
104
103
|
export const multilingualAgent = new Agent({
|
|
@@ -107,7 +106,7 @@ export const multilingualAgent = new Agent({
|
|
|
107
106
|
// ...
|
|
108
107
|
inputProcessors: [
|
|
109
108
|
new LanguageDetector({
|
|
110
|
-
model: openai
|
|
109
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
111
110
|
targetLanguages: ["English", "en"],
|
|
112
111
|
strategy: "translate",
|
|
113
112
|
threshold: 0.8,
|
|
@@ -126,7 +125,7 @@ Output processors are applied after the language model generates a response, but
|
|
|
126
125
|
|
|
127
126
|
The `BatchPartsProcessor` is an output processor that combines multiple stream parts before emitting them to the client. This reduces network overhead and improves the user experience by consolidating small chunks into larger batches.
|
|
128
127
|
|
|
129
|
-
```typescript {
|
|
128
|
+
```typescript {8-12} title="src/mastra/agents/batched-agent.ts" showLineNumbers copy
|
|
130
129
|
import { BatchPartsProcessor } from "@mastra/core/processors";
|
|
131
130
|
|
|
132
131
|
export const batchedAgent = new Agent({
|
|
@@ -149,7 +148,7 @@ export const batchedAgent = new Agent({
|
|
|
149
148
|
|
|
150
149
|
The `TokenLimiterProcessor` is an output processor that limits the number of tokens in model responses. It helps manage cost and performance by truncating or blocking messages when the limit is exceeded.
|
|
151
150
|
|
|
152
|
-
```typescript {
|
|
151
|
+
```typescript {8-12} title="src/mastra/agents/limited-agent.ts" showLineNumbers copy
|
|
153
152
|
import { TokenLimiterProcessor } from "@mastra/core/processors";
|
|
154
153
|
|
|
155
154
|
export const limitedAgent = new Agent({
|
|
@@ -172,7 +171,7 @@ export const limitedAgent = new Agent({
|
|
|
172
171
|
|
|
173
172
|
The `SystemPromptScrubber` is an output processor that detects and redacts system prompts or other internal instructions from model responses. It helps prevent unintended disclosure of prompt content or configuration details that could introduce security risks. It uses an LLM to identify and redact sensitive content based on configured detection types.
|
|
174
173
|
|
|
175
|
-
```typescript {
|
|
174
|
+
```typescript {7-16} title="src/mastra/agents/scrubbed-agent.ts" copy showLineNumbers
|
|
176
175
|
import { SystemPromptScrubber } from "@mastra/core/processors";
|
|
177
176
|
|
|
178
177
|
const scrubbedAgent = new Agent({
|
|
@@ -180,7 +179,7 @@ const scrubbedAgent = new Agent({
|
|
|
180
179
|
name: "Scrubbed Agent",
|
|
181
180
|
outputProcessors: [
|
|
182
181
|
new SystemPromptScrubber({
|
|
183
|
-
model: openai
|
|
182
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
184
183
|
strategy: "redact",
|
|
185
184
|
customPatterns: ["system prompt", "internal instructions"],
|
|
186
185
|
includeDetections: true,
|
|
@@ -195,6 +194,10 @@ const scrubbedAgent = new Agent({
|
|
|
195
194
|
|
|
196
195
|
> See [SystemPromptScrubber](/reference/v1/processors/system-prompt-scrubber) for a full list of configuration options.
|
|
197
196
|
|
|
197
|
+
:::note
|
|
198
|
+
When streaming responses over HTTP, Mastra redacts sensitive request data (system prompts, tool definitions, API keys) from stream chunks at the server level by default. See [Stream data redaction](/docs/v1/server-db/mastra-server#stream-data-redaction) for details.
|
|
199
|
+
:::
|
|
200
|
+
|
|
198
201
|
## Hybrid processors
|
|
199
202
|
|
|
200
203
|
Hybrid processors can be applied either before messages are sent to the language model or before responses are returned to the user. They are useful for tasks like content moderation and PII redaction.
|
|
@@ -203,7 +206,7 @@ Hybrid processors can be applied either before messages are sent to the language
|
|
|
203
206
|
|
|
204
207
|
The `ModerationProcessor` is a hybrid processor that detects inappropriate or harmful content across categories like hate, harassment, and violence. It can be used to moderate either user input or model output, depending on where it's applied. It uses an LLM to classify the message and can block or rewrite it based on your configuration.
|
|
205
208
|
|
|
206
|
-
```typescript {
|
|
209
|
+
```typescript {8-13,16-18} title="src/mastra/agents/moderated-agent.ts" showLineNumbers copy
|
|
207
210
|
import { ModerationProcessor } from "@mastra/core/processors";
|
|
208
211
|
|
|
209
212
|
export const moderatedAgent = new Agent({
|
|
@@ -212,7 +215,7 @@ export const moderatedAgent = new Agent({
|
|
|
212
215
|
// ...
|
|
213
216
|
inputProcessors: [
|
|
214
217
|
new ModerationProcessor({
|
|
215
|
-
model: openai
|
|
218
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
216
219
|
threshold: 0.7,
|
|
217
220
|
strategy: "block",
|
|
218
221
|
categories: ["hate", "harassment", "violence"],
|
|
@@ -232,7 +235,7 @@ export const moderatedAgent = new Agent({
|
|
|
232
235
|
|
|
233
236
|
The `PIIDetector` is a hybrid processor that detects and removes personally identifiable information such as emails, phone numbers, and credit cards. It can redact either user input or model output, depending on where it's applied. It uses an LLM to identify sensitive content based on configured detection types.
|
|
234
237
|
|
|
235
|
-
```typescript {
|
|
238
|
+
```typescript {8-15,18-20} title="src/mastra/agents/private-agent.ts" showLineNumbers copy
|
|
236
239
|
import { PIIDetector } from "@mastra/core/processors";
|
|
237
240
|
|
|
238
241
|
export const privateAgent = new Agent({
|
|
@@ -241,7 +244,7 @@ export const privateAgent = new Agent({
|
|
|
241
244
|
// ...
|
|
242
245
|
inputProcessors: [
|
|
243
246
|
new PIIDetector({
|
|
244
|
-
model: openai
|
|
247
|
+
model: "openrouter/openai/gpt-oss-safeguard-20b",
|
|
245
248
|
threshold: 0.6,
|
|
246
249
|
strategy: "redact",
|
|
247
250
|
redactionMethod: "mask",
|
|
@@ -306,7 +309,7 @@ Many of the built-in processors support a `strategy` parameter that controls how
|
|
|
306
309
|
|
|
307
310
|
Most strategies allow the request to continue without interruption. When `block` is used, the processor calls its internal `abort()` function, which immediately stops the request and prevents any subsequent processors from running.
|
|
308
311
|
|
|
309
|
-
```typescript {
|
|
312
|
+
```typescript {10} title="src/mastra/agents/private-agent.ts" showLineNumbers copy
|
|
310
313
|
import { PIIDetector } from "@mastra/core/processors";
|
|
311
314
|
|
|
312
315
|
export const privateAgent = new Agent({
|
|
@@ -324,47 +327,84 @@ export const privateAgent = new Agent({
|
|
|
324
327
|
|
|
325
328
|
### Handling blocked requests
|
|
326
329
|
|
|
327
|
-
When a processor blocks a request, the agent will still return successfully without throwing an error. To handle blocked requests, check for `tripwire`
|
|
330
|
+
When a processor blocks a request, the agent will still return successfully without throwing an error. To handle blocked requests, check for `tripwire` in the response.
|
|
328
331
|
|
|
329
|
-
For example, if an agent uses the `PIIDetector` with `strategy: "block"` and the request includes a credit card number, it will be blocked and the response will include
|
|
332
|
+
For example, if an agent uses the `PIIDetector` with `strategy: "block"` and the request includes a credit card number, it will be blocked and the response will include tripwire information.
|
|
330
333
|
|
|
331
334
|
#### `.generate()` example
|
|
332
335
|
|
|
333
|
-
```typescript
|
|
336
|
+
```typescript showLineNumbers
|
|
334
337
|
const result = await agent.generate(
|
|
335
338
|
"Is this credit card number valid?: 4543 1374 5089 4332",
|
|
336
339
|
);
|
|
337
340
|
|
|
338
|
-
|
|
339
|
-
console.error(result.
|
|
341
|
+
if (result.tripwire) {
|
|
342
|
+
console.error("Blocked:", result.tripwire.reason);
|
|
343
|
+
console.error("Processor:", result.tripwire.processorId);
|
|
344
|
+
// Optional: check if retry was requested
|
|
345
|
+
console.error("Retry requested:", result.tripwire.retry);
|
|
346
|
+
// Optional: access additional metadata
|
|
347
|
+
console.error("Metadata:", result.tripwire.metadata);
|
|
348
|
+
}
|
|
340
349
|
```
|
|
341
350
|
|
|
342
351
|
#### `.stream()` example
|
|
343
352
|
|
|
344
|
-
```typescript
|
|
353
|
+
```typescript showLineNumbers
|
|
345
354
|
const stream = await agent.stream(
|
|
346
355
|
"Is this credit card number valid?: 4543 1374 5089 4332",
|
|
347
356
|
);
|
|
348
357
|
|
|
349
358
|
for await (const chunk of stream.fullStream) {
|
|
350
359
|
if (chunk.type === "tripwire") {
|
|
351
|
-
console.error(chunk.payload.
|
|
360
|
+
console.error("Blocked:", chunk.payload.reason);
|
|
361
|
+
console.error("Processor:", chunk.payload.processorId);
|
|
352
362
|
}
|
|
353
363
|
}
|
|
354
364
|
```
|
|
355
365
|
|
|
356
|
-
In this case, the `
|
|
366
|
+
In this case, the `reason` indicates that a credit card number was detected:
|
|
357
367
|
|
|
358
368
|
```text
|
|
359
369
|
PII detected. Types: credit-card
|
|
360
370
|
```
|
|
361
371
|
|
|
372
|
+
### Requesting retries
|
|
373
|
+
|
|
374
|
+
Processors can request that the LLM retry its response with feedback. This is useful for implementing quality checks:
|
|
375
|
+
|
|
376
|
+
```typescript showLineNumbers
|
|
377
|
+
export class QualityChecker implements Processor {
|
|
378
|
+
id = "quality-checker";
|
|
379
|
+
|
|
380
|
+
async processOutputStep({ text, abort, retryCount }) {
|
|
381
|
+
const score = await evaluateQuality(text);
|
|
382
|
+
|
|
383
|
+
if (score < 0.7 && retryCount < 3) {
|
|
384
|
+
// Request retry with feedback for the LLM
|
|
385
|
+
abort("Response quality too low. Please be more specific.", {
|
|
386
|
+
retry: true,
|
|
387
|
+
metadata: { score },
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
return [];
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
The `abort()` function accepts an optional second parameter with:
|
|
397
|
+
- `retry: true` - Request the LLM retry the step
|
|
398
|
+
- `metadata: unknown` - Attach additional data for debugging/logging
|
|
399
|
+
|
|
400
|
+
Use `retryCount` to track retry attempts and prevent infinite loops.
|
|
401
|
+
|
|
362
402
|
## Custom processors
|
|
363
403
|
|
|
364
404
|
If the built-in processors don’t cover your needs, you can create your own by extending the `Processor` class.
|
|
365
405
|
|
|
366
406
|
Available examples:
|
|
367
407
|
|
|
368
|
-
- [Message Length Limiter](/examples/
|
|
369
|
-
- [Response Length Limiter](/examples/
|
|
370
|
-
- [Response Validator](/examples/
|
|
408
|
+
- [Message Length Limiter](https://github.com/mastra-ai/mastra/tree/main/examples/processors-message-length-limiter)
|
|
409
|
+
- [Response Length Limiter](https://github.com/mastra-ai/mastra/tree/main/examples/processors-response-length-limiter)
|
|
410
|
+
- [Response Validator](https://github.com/mastra-ai/mastra/tree/main/examples/processors-response-validator)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Agent Networks | Agents
|
|
2
|
+
title: "Agent Networks | Agents"
|
|
3
3
|
description: Learn how to coordinate multiple agents, workflows, and tools using agent networks for complex, non-deterministic task execution.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -24,7 +24,6 @@ Mastra agent networks operate using these principles:
|
|
|
24
24
|
An agent network is built around a top-level routing agent that delegates tasks to agents, workflows, and tools defined in its configuration. Memory is configured on the routing agent using the `memory` option, and `instructions` define the agent's routing behavior.
|
|
25
25
|
|
|
26
26
|
```typescript {22-23,26,29} title="src/mastra/agents/routing-agent.ts" showLineNumbers copy
|
|
27
|
-
import { openai } from "@ai-sdk/openai";
|
|
28
27
|
import { Agent } from "@mastra/core/agent";
|
|
29
28
|
import { Memory } from "@mastra/memory";
|
|
30
29
|
import { LibSQLStore } from "@mastra/libsql";
|
|
@@ -44,7 +43,7 @@ export const routingAgent = new Agent({
|
|
|
44
43
|
Always respond with a complete report—no bullet points.
|
|
45
44
|
Write in full paragraphs, like a blog post.
|
|
46
45
|
Do not answer with incomplete or uncertain information.`,
|
|
47
|
-
model: openai
|
|
46
|
+
model: "openai/gpt-5.1",
|
|
48
47
|
agents: {
|
|
49
48
|
researchAgent,
|
|
50
49
|
writingAgent,
|
|
@@ -241,3 +240,4 @@ network-execution-event-step-finish
|
|
|
241
240
|
- [Agent Memory](./agent-memory)
|
|
242
241
|
- [Workflows Overview](../workflows/overview)
|
|
243
242
|
- [Request Context](/docs/v1/server-db/request-context)
|
|
243
|
+
- [Supervisor example](https://github.com/mastra-ai/mastra/tree/main/examples/supervisor-agent)
|