Skip to main content

scripted

AI Agent A scriptable model double for offline agent tests. :class:ScriptedModel stands in for a real provider so a unit test can assert what an agent does — “given this user turn, it calls refund() and then stops” — in milliseconds, with no network, no API key and no unittest.mock patching of provider internals. It is a real :class:~praisonaiagents.llm.llm.LLM subclass that replaces the methods which talk to a provider and nothing else, so everything around the call is the production code path: the system prompt is assembled normally, tools are serialised to real schemas, scripted tool calls are dispatched through the agent’s own executor, and results are fed back as real tool messages. Replies are built as genuine litellm response objects, so they are parsed by the same code a live response would be. Basic use:: from praisonaiagents import Agent from praisonaiagents.model_harness import ScriptedModel model = ScriptedModel([“Paris.”]) agent = Agent(instructions=“You are a geography bot.”, llm=model) assert agent.start(“What is the capital of France?”) == “Paris.” assert model.requests[0].last_user_message == “What is the capital of France?” Scripting a tool call followed by a final answer:: model = ScriptedModel([ ScriptedModel.tool_call(“refund”, {“order_id”: “A1”}), “Refunded order A1.”, ]) agent = Agent(instructions=“Support bot.”, llm=model, tools=[refund]) assert agent.start(“refund order A1”) == “Refunded order A1.” assert model.request_count == 2 # tool turn, then the follow-up A script entry may also be a callable, which receives the :class:RecordedRequest and returns a reply — useful for replies that depend on what the agent actually sent:: model = ScriptedModel([lambda req: f”You said: {req.last_user_message}”]) When the agent asks for one more reply than the script holds, the double raises :class:ScriptExhausted rather than hanging, looping or inventing an answer.

Import

Classes

ScriptedModelError

Base class for failures of the double itself.

ScriptExhausted

Raised when an agent asks a :class:ScriptedModel for an unscripted reply.

ScriptedToolCall

One tool call the double should emit.

ScriptedReply

One assistant turn the double should return.

RecordedRequest

What the agent actually sent to the model on one turn.

ScriptedModel

A model double that returns scripted replies in order and records requests.