Skip to content

Commit f3bff56

Browse files
committed
Add prompt support
1 parent a526927 commit f3bff56

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

src/agents/realtime/agent.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from dataclasses import dataclass, field
77
from typing import Any, Callable, Generic, cast
88

9+
from agents.prompts import Prompt
10+
911
from ..agent import AgentBase
1012
from ..guardrail import OutputGuardrail
1113
from ..handoffs import Handoff
@@ -55,6 +57,12 @@ class RealtimeAgent(AgentBase, Generic[TContext]):
5557
return a string.
5658
"""
5759

60+
prompt: Prompt | None = None
61+
"""A prompt object (or a function that returns a Prompt). Prompts allow you to dynamically
62+
configure the instructions, tools and other config for an agent outside of your code. Only
63+
usable with OpenAI models, using the Responses API.
64+
"""
65+
5866
handoffs: list[RealtimeAgent[Any] | Handoff[TContext, RealtimeAgent[Any]]] = field(
5967
default_factory=list
6068
)

src/agents/realtime/config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
from typing_extensions import NotRequired, TypeAlias, TypedDict
1010

11+
from agents.prompts import Prompt
12+
1113
from ..guardrail import OutputGuardrail
1214
from ..handoffs import Handoff
1315
from ..model_settings import ToolChoice
@@ -92,6 +94,9 @@ class RealtimeSessionModelSettings(TypedDict):
9294
instructions: NotRequired[str]
9395
"""System instructions for the model."""
9496

97+
prompt: NotRequired[Prompt]
98+
"""The prompt to use for the model."""
99+
95100
modalities: NotRequired[list[Literal["text", "audio"]]]
96101
"""The modalities the model should support."""
97102

src/agents/realtime/openai_realtime.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,13 @@
7575
from openai.types.realtime.session_update_event import (
7676
SessionUpdateEvent as OpenAISessionUpdateEvent,
7777
)
78+
from openai.types.responses.response_prompt import ResponsePrompt
7879
from pydantic import Field, TypeAdapter
7980
from typing_extensions import assert_never
8081
from websockets.asyncio.client import ClientConnection
8182

8283
from agents.handoffs import Handoff
84+
from agents.prompts import Prompt
8385
from agents.realtime._default_tracker import ModelAudioTracker
8486
from agents.tool import FunctionTool, Tool
8587
from agents.util._types import MaybeAwaitable
@@ -837,11 +839,22 @@ def _get_session_config(
837839
output=output_audio_config,
838840
)
839841

842+
prompt: ResponsePrompt | None = None
843+
if model_settings.get("prompt") is not None:
844+
_passed_prompt: Prompt = model_settings["prompt"]
845+
variables: dict[str, Any] | None = _passed_prompt.get("variables")
846+
prompt = ResponsePrompt(
847+
id=_passed_prompt["id"],
848+
variables=variables,
849+
version=_passed_prompt.get("version"),
850+
)
851+
840852
# Construct full session object. `type` will be excluded at serialization time for updates.
841853
return OpenAISessionCreateRequest(
842854
model=model_name,
843855
type="realtime",
844856
instructions=model_settings.get("instructions"),
857+
prompt=prompt,
845858
output_modalities=modalities,
846859
audio=audio_config,
847860
max_output_tokens=cast(Any, model_settings.get("max_output_tokens")),

src/agents/realtime/session.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,9 @@ async def _get_updated_model_settings_from_agent(
626626
if starting_settings:
627627
updated_settings.update(starting_settings)
628628

629+
if agent.prompt is not None:
630+
updated_settings["prompt"] = agent.prompt
631+
629632
instructions, tools, handoffs = await asyncio.gather(
630633
agent.get_system_prompt(self._context_wrapper),
631634
agent.get_all_tools(self._context_wrapper),

0 commit comments

Comments
 (0)