9201ef759e
CI / lint (push) Waiting to run
CI / mypy (push) Waiting to run
CI / docs (push) Waiting to run
CI / test on 3.10 (standard) (push) Waiting to run
CI / test on 3.11 (standard) (push) Waiting to run
CI / test on 3.12 (standard) (push) Waiting to run
CI / test on 3.10 (all-extras) (push) Waiting to run
CI / test on 3.11 (all-extras) (push) Waiting to run
CI / test on 3.12 (all-extras) (push) Waiting to run
CI / test on 3.13 (all-extras) (push) Waiting to run
CI / test on 3.14 (pydantic-evals) (push) Waiting to run
CI / test on 3.13 (standard) (push) Waiting to run
CI / test on 3.14 (standard) (push) Waiting to run
CI / test on 3.14 (all-extras) (push) Waiting to run
CI / test on 3.10 (pydantic-ai-slim) (push) Waiting to run
CI / test on 3.11 (pydantic-ai-slim) (push) Waiting to run
CI / test on 3.12 (pydantic-ai-slim) (push) Waiting to run
CI / test on 3.13 (pydantic-ai-slim) (push) Waiting to run
CI / test on 3.14 (pydantic-ai-slim) (push) Waiting to run
CI / test on 3.10 (pydantic-evals) (push) Waiting to run
CI / test on 3.11 (pydantic-evals) (push) Waiting to run
CI / test on 3.12 (pydantic-evals) (push) Waiting to run
CI / test on 3.13 (pydantic-evals) (push) Waiting to run
CI / test on 3.10 (lowest-versions) (push) Waiting to run
CI / test on 3.11 (lowest-versions) (push) Waiting to run
CI / test on 3.12 (lowest-versions) (push) Waiting to run
CI / test on 3.13 (lowest-versions) (push) Waiting to run
CI / test on 3.14 (lowest-versions) (push) Waiting to run
CI / test examples on 3.11 (push) Waiting to run
CI / test examples on 3.12 (push) Waiting to run
CI / test examples on 3.13 (push) Waiting to run
CI / test examples on 3.14 (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / check (push) Blocked by required conditions
CI / deploy-docs (push) Blocked by required conditions
CI / deploy-docs-preview (push) Blocked by required conditions
CI / build release artifacts (push) Blocked by required conditions
CI / publish to PyPI (push) Blocked by required conditions
CI / Send tweet (push) Blocked by required conditions
Harness Compat / harness compat (push) Failing after 0s
65 lines
1.8 KiB
Markdown
65 lines
1.8 KiB
Markdown
# `pydantic_ai.models.function`
|
|
|
|
A model controlled by a local function.
|
|
|
|
[`FunctionModel`][pydantic_ai.models.function.FunctionModel] is similar to [`TestModel`](test.md),
|
|
but allows greater control over the model's behavior.
|
|
|
|
Its primary use case is for more advanced unit testing than is possible with `TestModel`.
|
|
|
|
Here's a minimal example:
|
|
|
|
```py {title="function_model_usage.py" call_name="test_my_agent" noqa="I001"}
|
|
from pydantic_ai import Agent
|
|
from pydantic_ai import ModelMessage, ModelResponse, TextPart
|
|
from pydantic_ai.models.function import FunctionModel, AgentInfo
|
|
|
|
my_agent = Agent('openai:gpt-5.2')
|
|
|
|
|
|
async def model_function(
|
|
messages: list[ModelMessage], info: AgentInfo
|
|
) -> ModelResponse:
|
|
print(messages)
|
|
"""
|
|
[
|
|
ModelRequest(
|
|
parts=[
|
|
UserPromptPart(
|
|
content='Testing my agent...',
|
|
timestamp=datetime.datetime(...),
|
|
)
|
|
],
|
|
timestamp=datetime.datetime(...),
|
|
run_id='...',
|
|
conversation_id='...',
|
|
)
|
|
]
|
|
"""
|
|
print(info)
|
|
"""
|
|
AgentInfo(
|
|
function_tools=[],
|
|
allow_text_output=True,
|
|
output_tools=[],
|
|
model_settings=None,
|
|
model_request_parameters=ModelRequestParameters(
|
|
function_tools=[], native_tools=[], output_tools=[]
|
|
),
|
|
instructions=None,
|
|
)
|
|
"""
|
|
return ModelResponse(parts=[TextPart('hello world')])
|
|
|
|
|
|
async def test_my_agent():
|
|
"""Unit test for my_agent, to be run by pytest."""
|
|
with my_agent.override(model=FunctionModel(model_function)):
|
|
result = await my_agent.run('Testing my agent...')
|
|
assert result.output == 'hello world'
|
|
```
|
|
|
|
See [Unit testing with `FunctionModel`](../../testing.md#unit-testing-with-functionmodel) for detailed documentation.
|
|
|
|
::: pydantic_ai.models.function
|