> For the complete documentation index, see [llms.txt](/llms.txt).
> A full single-fetch corpus is available at [llms-full.txt](/llms-full.txt).
---
last_verified: 2026-10-09
title: LM
description: Create Go model clients and call language models with ctx.Generate
category: Go SDK
hideRightSidebar: true
---

A model client implements `agnt5.LanguageModel`. Agents use it for their loop, and you can call it directly with `ctx.Generate` for a single, traced model call.

## Model clients

Create a client with its API key and model. Go takes the bare model name, without a `provider/` prefix:

```go
openai := agnt5.NewOpenAIModel(agnt5.OpenAIConfig{
	APIKey: os.Getenv("OPENAI_API_KEY"),
	Model:  "gpt-6-luna",
})

anthropic := agnt5.NewAnthropicModel(agnt5.AnthropicConfig{
	APIKey: os.Getenv("ANTHROPIC_API_KEY"),
	Model:  "claude-haiku-4-5-20251001",
})
```

| Constructor | Provider |
|---|---|
| `agnt5.NewOpenAIModel(OpenAIConfig)` | OpenAI |
| `agnt5.NewAnthropicModel(AnthropicConfig)` | Anthropic |
| `agnt5.NewGoogleModel(GoogleConfig)` | Google Gemini |
| `agnt5.NewAzureOpenAIModel`, `NewGroqModel`, `NewDeepSeekModel`, `NewMistralModel`, `NewOpenRouterModel`, `NewTogetherModel`, `NewXAIModel`, `NewOllamaModel`, `NewMoonshotModel` | Other providers, configured like OpenAI |

## `ctx.Generate(model, request)`

```go
resp, err := ctx.Generate(openai, agnt5.GenerateRequest{
	Messages: []agnt5.Message{
		{Role: agnt5.MessageRoleSystem, Content: "Reply in five words or fewer."},
		{Role: agnt5.MessageRoleUser, Content: "Name a primary color."},
	},
	ReasoningEffort: "low",
})
if err != nil {
	return "", err
}
return resp.Content, nil
```

`ctx.Generate` records the call in the run's trace. Inside a workflow, wrap it in `agnt5.Step` so the result is checkpointed.

| `GenerateRequest` field | Description |
|---|---|
| `Messages` | The conversation. Roles: `agnt5.MessageRoleSystem`, `MessageRoleUser`, `MessageRoleAssistant`. |
| `ReasoningEffort` | Reasoning effort for models that reason. |
| `Cache` | [Prompt caching](/docs/build/prompt-caching.md), for example `agnt5.EnablePromptCache()`. |

| `GenerateResponse` field | Description |
|---|---|
| `Content` | The model's reply. |
| `Model` | The model that answered. |
| `FinishReason` | Why generation stopped. |
| `Usage` | `InputTokens`, `OutputTokens`, `TotalTokens`, `CachedTokens`, and `CacheCreationTokens`. |
| `ToolCalls` | Tool calls the model made. |

## Next steps

* [Agents](/sdk/go/agents.md): run a model in a loop with tools.
* [Prompt caching](/docs/build/prompt-caching.md): reuse a stable prefix across calls.
