> ## Documentation Index
> Fetch the complete documentation index at: https://docs.radium.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# PydanticAI

> Type-safe agents with OpenAIChatModel

<Error>
  This page contains an unverified test date marked in <span style="color:red">red</span>. Needs verification (Vijay, Adam, Alex, Product/Legal).
</Error>

# PydanticAI

PydanticAI supports custom OpenAI-compatible providers. Construct an `OpenAIChatModel` explicitly so requests use Radium's Chat Completions endpoint.

## Before you start

You need Python 3.10 or newer, a Radium API key, and a terminal or PowerShell window.

## 1. Create a project and install PydanticAI

<CodeGroup>
  ```bash macOS or Linux theme={null}
  mkdir radium-pydanticai && cd radium-pydanticai
  python3 -m venv .venv
  source .venv/bin/activate
  python -m pip install "pydantic-ai-slim[openai]"
  ```

  ```powershell Windows PowerShell theme={null}
  mkdir radium-pydanticai; cd radium-pydanticai
  py -m venv .venv
  .venv\Scripts\Activate.ps1
  python -m pip install "pydantic-ai-slim[openai]"
  ```
</CodeGroup>

## 2. Set your Radium credentials

<CodeGroup>
  ```bash macOS or Linux theme={null}
  export RADIUM_API_KEY="your-radium-api-key"
  export RADIUM_MODEL="hal-1.0"
  ```

  ```powershell Windows PowerShell theme={null}
  $env:RADIUM_API_KEY = "your-radium-api-key"
  $env:RADIUM_MODEL = "hal-1.0"
  ```
</CodeGroup>

## 3. Create main.py

```python theme={null}
import os
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider

api_key = os.getenv("RADIUM_API_KEY")
if not api_key:
    raise SystemExit("Set RADIUM_API_KEY before running this program.")

model = OpenAIChatModel(
    os.getenv("RADIUM_MODEL", "hal-1.0"),
    provider=OpenAIProvider(
        api_key=api_key,
        base_url="https://api.radium.cloud/v1",
    ),
)

agent = Agent(
    model,
    system_prompt="Follow the user's instruction exactly.",
    model_settings={"max_tokens": 512, "temperature": 0},
)

result = agent.run_sync("Reply with exactly: Radium connected.")
if not result.output or not str(result.output).strip():
    raise RuntimeError("Radium returned no visible text.")
print(f"RADIUM_RESPONSE: {str(result.output).strip()}")
```

<Warning>
  Do not use the shorthand `openai:hal-1.0`. Constructing `OpenAIChatModel` explicitly ensures PydanticAI uses the custom Radium provider and Chat Completions endpoint.
</Warning>

## 4. Run it

```bash theme={null}
python main.py
```

Expected output:

```
RADIUM_RESPONSE: Radium connected.
```

## Choose a model

```bash theme={null}
export RADIUM_MODEL="tycho-1.0"  # or hal-1.0 or clarke-1.0
python main.py
```

## Migrate an existing PydanticAI agent

Replace its model/provider configuration:

```python theme={null}
model = OpenAIChatModel(
    "hal-1.0",
    provider=OpenAIProvider(
        api_key=os.environ["RADIUM_API_KEY"],
        base_url="https://api.radium.cloud/v1",
    ),
)
agent = Agent(model)
```

Your system prompts, dependency types, tools, and output types can remain unchanged.

## Troubleshooting

| Problem | Fix |
| - | - |
| Authentication errors | Set the key in the terminal running Python |
| Calls going to OpenAI instead of Radium | Use the explicit `OpenAIProvider` construction shown above |
| `404` | Verify `/v1` and the exact model name |
| Empty output | Keep the output allowance at 512 or higher |

## Validation

<Check>
  These instructions were verified with Python 3.12.7 and `pydantic-ai-slim[openai]==2.31.1` on <span style="color:red">August 20, 2026</span>. You do not need that exact package version.
</Check>

Text generation and `tool_plain` execution passed with `hal-1.0`, `clarke-1.0`, and `tycho-1.0`.

## Next steps

<CardGroup cols={2}>
  <Card title="API quickstart" icon="bolt" href="/quickstart">Call Radium directly</Card>
  <Card title="Tool calling" icon="wrench" href="/core-concepts/tool-calling">The tool\_use and tool\_result contract</Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.