Skip to main content
Deep Agents work with any LangChain chat model that supports tool calling.

Supported models

Specify models in provider:model format (for example, google_genai:gemini-3.1-pro-preview, openai:gpt-5.4, or anthropic:claude-sonnet-4-6). For valid provider strings, see the model_provider parameter of init_chat_model. For provider-specific configuration, see chat model integrations.

Suggested models

These models perform well on the Deep Agents eval suite, which tests basic agent operations. Passing these evals is necessary but not sufficient for strong performance on longer, more complex tasks.
ProviderModels
Googlegemini-3.1-pro-preview, gemini-3-flash-preview
OpenAIgpt-5.4, gpt-4o, gpt-4.1, o4-mini, gpt-5.2-codex, gpt-4o-mini, o3
Anthropicclaude-opus-4-6, claude-opus-4-5, claude-sonnet-4-6, claude-sonnet-4, claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-1
Open-weightGLM-5, Kimi-K2.5, MiniMax-M2.5, qwen3.5-397B-A17B, devstral-2-123B
Open-weight models are available through providers like OpenRouter, Fireworks or Ollama.

Configure model parameters

Pass a model string to createDeepAgent in provider:model format, or pass a configured model instance for full control. Under the hood, model strings are resolved via init_chat_model. To configure model-specific parameters, use init_chat_model or instantiate a provider model class directly:
import { initChatModel } from "langchain/chat_models/universal";
import { createDeepAgent } from "deepagents";

const model = await initChatModel("google_genai:gemini-3.1-pro-preview", {
    reasoningEffort: "medium",
});
const agent = createDeepAgent({ model });
Available parameters vary by provider. See the chat model integrations page for provider-specific configuration options.

Select a model at runtime

If your application lets users choose a model (for example using a dropdown in the UI), use middleware to swap the model at runtime without rebuilding the agent.
import { initChatModel, createMiddleware } from "langchain";
import { createDeepAgent } from "deepagents";
import * as z from "zod";

const contextSchema = z.object({
  model: z.string(),
});

const configurableModel = createMiddleware({
  name: "ConfigurableModel",
  wrapModelCall: async (request, handler) => {
    const modelName = request.runtime.context.model;
    const model = await initChatModel(modelName);
    return handler({ ...request, model });
  },
});

const agent = await createDeepAgent({
  model: "google_genai:gemini-3.1-pro-preview",
  middleware: [configurableModel],
  contextSchema,
});

// Invoke with the user's model selection
const result = await agent.invoke(
  { messages: [{ role: "user", content: "Hello!" }] },
  { context: { model: "openai:gpt-5.4" } },
);
For more dynamic model patterns (for example routing based on conversation complexity or cost optimization), see Dynamic model in the LangChain agents guide.

Learn more

  • Models in LangChain: chat model features including tool calling, structured output, and multimodality