openai-agents 0.2.8__py3-none-any.whl → 0.6.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agents/__init__.py +105 -4
- agents/_debug.py +15 -4
- agents/_run_impl.py +1203 -96
- agents/agent.py +164 -19
- agents/apply_diff.py +329 -0
- agents/editor.py +47 -0
- agents/exceptions.py +35 -0
- agents/extensions/experimental/__init__.py +6 -0
- agents/extensions/experimental/codex/__init__.py +92 -0
- agents/extensions/experimental/codex/codex.py +89 -0
- agents/extensions/experimental/codex/codex_options.py +35 -0
- agents/extensions/experimental/codex/codex_tool.py +1142 -0
- agents/extensions/experimental/codex/events.py +162 -0
- agents/extensions/experimental/codex/exec.py +263 -0
- agents/extensions/experimental/codex/items.py +245 -0
- agents/extensions/experimental/codex/output_schema_file.py +50 -0
- agents/extensions/experimental/codex/payloads.py +31 -0
- agents/extensions/experimental/codex/thread.py +214 -0
- agents/extensions/experimental/codex/thread_options.py +54 -0
- agents/extensions/experimental/codex/turn_options.py +36 -0
- agents/extensions/handoff_filters.py +13 -1
- agents/extensions/memory/__init__.py +120 -0
- agents/extensions/memory/advanced_sqlite_session.py +1285 -0
- agents/extensions/memory/async_sqlite_session.py +239 -0
- agents/extensions/memory/dapr_session.py +423 -0
- agents/extensions/memory/encrypt_session.py +185 -0
- agents/extensions/memory/redis_session.py +261 -0
- agents/extensions/memory/sqlalchemy_session.py +334 -0
- agents/extensions/models/litellm_model.py +449 -36
- agents/extensions/models/litellm_provider.py +3 -1
- agents/function_schema.py +47 -5
- agents/guardrail.py +16 -2
- agents/{handoffs.py → handoffs/__init__.py} +89 -47
- agents/handoffs/history.py +268 -0
- agents/items.py +237 -11
- agents/lifecycle.py +75 -14
- agents/mcp/server.py +280 -37
- agents/mcp/util.py +24 -3
- agents/memory/__init__.py +22 -2
- agents/memory/openai_conversations_session.py +91 -0
- agents/memory/openai_responses_compaction_session.py +249 -0
- agents/memory/session.py +19 -261
- agents/memory/sqlite_session.py +275 -0
- agents/memory/util.py +20 -0
- agents/model_settings.py +14 -3
- agents/models/__init__.py +13 -0
- agents/models/chatcmpl_converter.py +303 -50
- agents/models/chatcmpl_helpers.py +63 -0
- agents/models/chatcmpl_stream_handler.py +290 -68
- agents/models/default_models.py +58 -0
- agents/models/interface.py +4 -0
- agents/models/openai_chatcompletions.py +103 -49
- agents/models/openai_provider.py +10 -4
- agents/models/openai_responses.py +162 -46
- agents/realtime/__init__.py +4 -0
- agents/realtime/_util.py +14 -3
- agents/realtime/agent.py +7 -0
- agents/realtime/audio_formats.py +53 -0
- agents/realtime/config.py +78 -10
- agents/realtime/events.py +18 -0
- agents/realtime/handoffs.py +2 -2
- agents/realtime/items.py +17 -1
- agents/realtime/model.py +13 -0
- agents/realtime/model_events.py +12 -0
- agents/realtime/model_inputs.py +18 -1
- agents/realtime/openai_realtime.py +696 -150
- agents/realtime/session.py +243 -23
- agents/repl.py +7 -3
- agents/result.py +197 -38
- agents/run.py +949 -168
- agents/run_context.py +13 -2
- agents/stream_events.py +1 -0
- agents/strict_schema.py +14 -0
- agents/tool.py +413 -15
- agents/tool_context.py +22 -1
- agents/tool_guardrails.py +279 -0
- agents/tracing/__init__.py +2 -0
- agents/tracing/config.py +9 -0
- agents/tracing/create.py +4 -0
- agents/tracing/processor_interface.py +84 -11
- agents/tracing/processors.py +65 -54
- agents/tracing/provider.py +64 -7
- agents/tracing/spans.py +105 -0
- agents/tracing/traces.py +116 -16
- agents/usage.py +134 -12
- agents/util/_json.py +19 -1
- agents/util/_transforms.py +12 -2
- agents/voice/input.py +5 -4
- agents/voice/models/openai_stt.py +17 -9
- agents/voice/pipeline.py +2 -0
- agents/voice/pipeline_config.py +4 -0
- {openai_agents-0.2.8.dist-info → openai_agents-0.6.8.dist-info}/METADATA +44 -19
- openai_agents-0.6.8.dist-info/RECORD +134 -0
- {openai_agents-0.2.8.dist-info → openai_agents-0.6.8.dist-info}/WHEEL +1 -1
- openai_agents-0.2.8.dist-info/RECORD +0 -103
- {openai_agents-0.2.8.dist-info → openai_agents-0.6.8.dist-info}/licenses/LICENSE +0 -0
agents/usage.py
CHANGED
|
@@ -1,9 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from dataclasses import field
|
|
4
|
+
from typing import Annotated
|
|
2
5
|
|
|
6
|
+
from openai.types.completion_usage import CompletionTokensDetails, PromptTokensDetails
|
|
3
7
|
from openai.types.responses.response_usage import InputTokensDetails, OutputTokensDetails
|
|
8
|
+
from pydantic import BeforeValidator
|
|
4
9
|
from pydantic.dataclasses import dataclass
|
|
5
10
|
|
|
6
11
|
|
|
12
|
+
def _normalize_input_tokens_details(
|
|
13
|
+
v: InputTokensDetails | PromptTokensDetails | None,
|
|
14
|
+
) -> InputTokensDetails:
|
|
15
|
+
"""Converts None or PromptTokensDetails to InputTokensDetails."""
|
|
16
|
+
if v is None:
|
|
17
|
+
return InputTokensDetails(cached_tokens=0)
|
|
18
|
+
if isinstance(v, PromptTokensDetails):
|
|
19
|
+
return InputTokensDetails(cached_tokens=v.cached_tokens or 0)
|
|
20
|
+
return v
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _normalize_output_tokens_details(
|
|
24
|
+
v: OutputTokensDetails | CompletionTokensDetails | None,
|
|
25
|
+
) -> OutputTokensDetails:
|
|
26
|
+
"""Converts None or CompletionTokensDetails to OutputTokensDetails."""
|
|
27
|
+
if v is None:
|
|
28
|
+
return OutputTokensDetails(reasoning_tokens=0)
|
|
29
|
+
if isinstance(v, CompletionTokensDetails):
|
|
30
|
+
return OutputTokensDetails(reasoning_tokens=v.reasoning_tokens or 0)
|
|
31
|
+
return v
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class RequestUsage:
|
|
36
|
+
"""Usage details for a single API request."""
|
|
37
|
+
|
|
38
|
+
input_tokens: int
|
|
39
|
+
"""Input tokens for this individual request."""
|
|
40
|
+
|
|
41
|
+
output_tokens: int
|
|
42
|
+
"""Output tokens for this individual request."""
|
|
43
|
+
|
|
44
|
+
total_tokens: int
|
|
45
|
+
"""Total tokens (input + output) for this individual request."""
|
|
46
|
+
|
|
47
|
+
input_tokens_details: InputTokensDetails
|
|
48
|
+
"""Details about the input tokens for this individual request."""
|
|
49
|
+
|
|
50
|
+
output_tokens_details: OutputTokensDetails
|
|
51
|
+
"""Details about the output tokens for this individual request."""
|
|
52
|
+
|
|
53
|
+
|
|
7
54
|
@dataclass
|
|
8
55
|
class Usage:
|
|
9
56
|
requests: int = 0
|
|
@@ -12,32 +59,107 @@ class Usage:
|
|
|
12
59
|
input_tokens: int = 0
|
|
13
60
|
"""Total input tokens sent, across all requests."""
|
|
14
61
|
|
|
15
|
-
input_tokens_details:
|
|
16
|
-
|
|
17
|
-
)
|
|
62
|
+
input_tokens_details: Annotated[
|
|
63
|
+
InputTokensDetails, BeforeValidator(_normalize_input_tokens_details)
|
|
64
|
+
] = field(default_factory=lambda: InputTokensDetails(cached_tokens=0))
|
|
18
65
|
"""Details about the input tokens, matching responses API usage details."""
|
|
19
66
|
output_tokens: int = 0
|
|
20
67
|
"""Total output tokens received, across all requests."""
|
|
21
68
|
|
|
22
|
-
output_tokens_details:
|
|
23
|
-
|
|
24
|
-
)
|
|
69
|
+
output_tokens_details: Annotated[
|
|
70
|
+
OutputTokensDetails, BeforeValidator(_normalize_output_tokens_details)
|
|
71
|
+
] = field(default_factory=lambda: OutputTokensDetails(reasoning_tokens=0))
|
|
25
72
|
"""Details about the output tokens, matching responses API usage details."""
|
|
26
73
|
|
|
27
74
|
total_tokens: int = 0
|
|
28
75
|
"""Total tokens sent and received, across all requests."""
|
|
29
76
|
|
|
30
|
-
|
|
77
|
+
request_usage_entries: list[RequestUsage] = field(default_factory=list)
|
|
78
|
+
"""List of RequestUsage entries for accurate per-request cost calculation.
|
|
79
|
+
|
|
80
|
+
Each call to `add()` automatically creates an entry in this list if the added usage
|
|
81
|
+
represents a new request (i.e., has non-zero tokens).
|
|
82
|
+
|
|
83
|
+
Example:
|
|
84
|
+
For a run that makes 3 API calls with 100K, 150K, and 80K input tokens each,
|
|
85
|
+
the aggregated `input_tokens` would be 330K, but `request_usage_entries` would
|
|
86
|
+
preserve the [100K, 150K, 80K] breakdown, which could be helpful for detailed
|
|
87
|
+
cost calculation or context window management.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
def __post_init__(self) -> None:
|
|
91
|
+
# Some providers don't populate optional token detail fields
|
|
92
|
+
# (cached_tokens, reasoning_tokens), and the OpenAI SDK's generated
|
|
93
|
+
# code can bypass Pydantic validation (e.g., via model_construct),
|
|
94
|
+
# allowing None values. We normalize these to 0 to prevent TypeErrors.
|
|
95
|
+
input_details_none = self.input_tokens_details is None
|
|
96
|
+
input_cached_none = (
|
|
97
|
+
not input_details_none and self.input_tokens_details.cached_tokens is None
|
|
98
|
+
)
|
|
99
|
+
if input_details_none or input_cached_none:
|
|
100
|
+
self.input_tokens_details = InputTokensDetails(cached_tokens=0)
|
|
101
|
+
|
|
102
|
+
output_details_none = self.output_tokens_details is None
|
|
103
|
+
output_reasoning_none = (
|
|
104
|
+
not output_details_none and self.output_tokens_details.reasoning_tokens is None
|
|
105
|
+
)
|
|
106
|
+
if output_details_none or output_reasoning_none:
|
|
107
|
+
self.output_tokens_details = OutputTokensDetails(reasoning_tokens=0)
|
|
108
|
+
|
|
109
|
+
def add(self, other: Usage) -> None:
|
|
110
|
+
"""Add another Usage object to this one, aggregating all fields.
|
|
111
|
+
|
|
112
|
+
This method automatically preserves request_usage_entries.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
other: The Usage object to add to this one.
|
|
116
|
+
"""
|
|
31
117
|
self.requests += other.requests if other.requests else 0
|
|
32
118
|
self.input_tokens += other.input_tokens if other.input_tokens else 0
|
|
33
119
|
self.output_tokens += other.output_tokens if other.output_tokens else 0
|
|
34
120
|
self.total_tokens += other.total_tokens if other.total_tokens else 0
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
121
|
+
|
|
122
|
+
# Null guards for nested token details (other may bypass validation via model_construct)
|
|
123
|
+
other_cached = (
|
|
124
|
+
other.input_tokens_details.cached_tokens
|
|
125
|
+
if other.input_tokens_details and other.input_tokens_details.cached_tokens
|
|
126
|
+
else 0
|
|
127
|
+
)
|
|
128
|
+
other_reasoning = (
|
|
129
|
+
other.output_tokens_details.reasoning_tokens
|
|
130
|
+
if other.output_tokens_details and other.output_tokens_details.reasoning_tokens
|
|
131
|
+
else 0
|
|
132
|
+
)
|
|
133
|
+
self_cached = (
|
|
134
|
+
self.input_tokens_details.cached_tokens
|
|
135
|
+
if self.input_tokens_details and self.input_tokens_details.cached_tokens
|
|
136
|
+
else 0
|
|
38
137
|
)
|
|
138
|
+
self_reasoning = (
|
|
139
|
+
self.output_tokens_details.reasoning_tokens
|
|
140
|
+
if self.output_tokens_details and self.output_tokens_details.reasoning_tokens
|
|
141
|
+
else 0
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
self.input_tokens_details = InputTokensDetails(cached_tokens=self_cached + other_cached)
|
|
39
145
|
|
|
40
146
|
self.output_tokens_details = OutputTokensDetails(
|
|
41
|
-
reasoning_tokens=
|
|
42
|
-
+ other.output_tokens_details.reasoning_tokens
|
|
147
|
+
reasoning_tokens=self_reasoning + other_reasoning
|
|
43
148
|
)
|
|
149
|
+
|
|
150
|
+
# Automatically preserve request_usage_entries.
|
|
151
|
+
# If the other Usage represents a single request with tokens, record it.
|
|
152
|
+
if other.requests == 1 and other.total_tokens > 0:
|
|
153
|
+
input_details = other.input_tokens_details or InputTokensDetails(cached_tokens=0)
|
|
154
|
+
output_details = other.output_tokens_details or OutputTokensDetails(reasoning_tokens=0)
|
|
155
|
+
request_usage = RequestUsage(
|
|
156
|
+
input_tokens=other.input_tokens,
|
|
157
|
+
output_tokens=other.output_tokens,
|
|
158
|
+
total_tokens=other.total_tokens,
|
|
159
|
+
input_tokens_details=input_details,
|
|
160
|
+
output_tokens_details=output_details,
|
|
161
|
+
)
|
|
162
|
+
self.request_usage_entries.append(request_usage)
|
|
163
|
+
elif other.request_usage_entries:
|
|
164
|
+
# If the other Usage already has individual request breakdowns, merge them.
|
|
165
|
+
self.request_usage_entries.extend(other.request_usage_entries)
|
agents/util/_json.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Iterable
|
|
4
|
+
from typing import Any, Literal
|
|
4
5
|
|
|
5
6
|
from pydantic import TypeAdapter, ValidationError
|
|
6
7
|
from typing_extensions import TypeVar
|
|
@@ -29,3 +30,20 @@ def validate_json(json_str: str, type_adapter: TypeAdapter[T], partial: bool) ->
|
|
|
29
30
|
raise ModelBehaviorError(
|
|
30
31
|
f"Invalid JSON when parsing {json_str} for {type_adapter}; {e}"
|
|
31
32
|
) from e
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _to_dump_compatible(obj: Any) -> Any:
|
|
36
|
+
return _to_dump_compatible_internal(obj)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _to_dump_compatible_internal(obj: Any) -> Any:
|
|
40
|
+
if isinstance(obj, dict):
|
|
41
|
+
return {k: _to_dump_compatible_internal(v) for k, v in obj.items()}
|
|
42
|
+
|
|
43
|
+
if isinstance(obj, (list, tuple)):
|
|
44
|
+
return [_to_dump_compatible_internal(x) for x in obj]
|
|
45
|
+
|
|
46
|
+
if isinstance(obj, Iterable) and not isinstance(obj, (str, bytes, bytearray)):
|
|
47
|
+
return [_to_dump_compatible_internal(x) for x in obj]
|
|
48
|
+
|
|
49
|
+
return obj
|
agents/util/_transforms.py
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import re
|
|
2
2
|
|
|
3
|
+
from ..logger import logger
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
def transform_string_function_style(name: str) -> str:
|
|
5
7
|
# Replace spaces with underscores
|
|
6
8
|
name = name.replace(" ", "_")
|
|
7
9
|
|
|
8
10
|
# Replace non-alphanumeric characters with underscores
|
|
9
|
-
|
|
11
|
+
transformed_name = re.sub(r"[^a-zA-Z0-9_]", "_", name)
|
|
12
|
+
|
|
13
|
+
if transformed_name != name:
|
|
14
|
+
final_name = transformed_name.lower()
|
|
15
|
+
logger.warning(
|
|
16
|
+
f"Tool name {name!r} contains invalid characters for function calling and has been "
|
|
17
|
+
f"transformed to {final_name!r}. Please use only letters, digits, and underscores "
|
|
18
|
+
"to avoid potential naming conflicts."
|
|
19
|
+
)
|
|
10
20
|
|
|
11
|
-
return
|
|
21
|
+
return transformed_name.lower()
|
agents/voice/input.py
CHANGED
|
@@ -13,7 +13,7 @@ DEFAULT_SAMPLE_RATE = 24000
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def _buffer_to_audio_file(
|
|
16
|
-
buffer: npt.NDArray[np.int16 | np.float32],
|
|
16
|
+
buffer: npt.NDArray[np.int16 | np.float32 | np.float64],
|
|
17
17
|
frame_rate: int = DEFAULT_SAMPLE_RATE,
|
|
18
18
|
sample_width: int = 2,
|
|
19
19
|
channels: int = 1,
|
|
@@ -77,12 +77,13 @@ class StreamedAudioInput:
|
|
|
77
77
|
"""
|
|
78
78
|
|
|
79
79
|
def __init__(self):
|
|
80
|
-
self.queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32]] = asyncio.Queue()
|
|
80
|
+
self.queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32] | None] = asyncio.Queue()
|
|
81
81
|
|
|
82
|
-
async def add_audio(self, audio: npt.NDArray[np.int16 | np.float32]):
|
|
82
|
+
async def add_audio(self, audio: npt.NDArray[np.int16 | np.float32] | None):
|
|
83
83
|
"""Adds more audio data to the stream.
|
|
84
84
|
|
|
85
85
|
Args:
|
|
86
|
-
audio: The audio data to add. Must be a numpy array of int16 or float32.
|
|
86
|
+
audio: The audio data to add. Must be a numpy array of int16 or float32 or None.
|
|
87
|
+
If None passed, it indicates the end of the stream.
|
|
87
88
|
"""
|
|
88
89
|
await self.queue.put(audio)
|
|
@@ -88,7 +88,7 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
88
88
|
self._trace_include_sensitive_data = trace_include_sensitive_data
|
|
89
89
|
self._trace_include_sensitive_audio_data = trace_include_sensitive_audio_data
|
|
90
90
|
|
|
91
|
-
self._input_queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32]] = input.queue
|
|
91
|
+
self._input_queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32] | None] = input.queue
|
|
92
92
|
self._output_queue: asyncio.Queue[str | ErrorSentinel | SessionCompleteSentinel] = (
|
|
93
93
|
asyncio.Queue()
|
|
94
94
|
)
|
|
@@ -122,7 +122,8 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
122
122
|
return
|
|
123
123
|
|
|
124
124
|
if self._tracing_span:
|
|
125
|
-
if
|
|
125
|
+
# Only encode audio if tracing is enabled AND buffer is not empty
|
|
126
|
+
if self._trace_include_sensitive_audio_data and self._turn_audio_buffer:
|
|
126
127
|
self._tracing_span.span_data.input = _audio_to_base64(self._turn_audio_buffer)
|
|
127
128
|
|
|
128
129
|
self._tracing_span.span_data.input_format = "pcm"
|
|
@@ -163,11 +164,16 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
163
164
|
await self._websocket.send(
|
|
164
165
|
json.dumps(
|
|
165
166
|
{
|
|
166
|
-
"type": "
|
|
167
|
+
"type": "session.update",
|
|
167
168
|
"session": {
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
|
|
169
|
+
"type": "transcription",
|
|
170
|
+
"audio": {
|
|
171
|
+
"input": {
|
|
172
|
+
"format": {"type": "audio/pcm", "rate": 24000},
|
|
173
|
+
"transcription": {"model": self._model},
|
|
174
|
+
"turn_detection": self._turn_detection,
|
|
175
|
+
}
|
|
176
|
+
},
|
|
171
177
|
},
|
|
172
178
|
}
|
|
173
179
|
)
|
|
@@ -226,7 +232,10 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
226
232
|
break
|
|
227
233
|
|
|
228
234
|
event_type = event.get("type", "unknown")
|
|
229
|
-
if event_type
|
|
235
|
+
if event_type in [
|
|
236
|
+
"input_audio_transcription_completed", # legacy
|
|
237
|
+
"conversation.item.input_audio_transcription.completed",
|
|
238
|
+
]:
|
|
230
239
|
transcript = cast(str, event.get("transcript", ""))
|
|
231
240
|
if len(transcript) > 0:
|
|
232
241
|
self._end_turn(transcript)
|
|
@@ -242,7 +251,7 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
242
251
|
await self._output_queue.put(SessionCompleteSentinel())
|
|
243
252
|
|
|
244
253
|
async def _stream_audio(
|
|
245
|
-
self, audio_queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32]]
|
|
254
|
+
self, audio_queue: asyncio.Queue[npt.NDArray[np.int16 | np.float32] | None]
|
|
246
255
|
) -> None:
|
|
247
256
|
assert self._websocket is not None, "Websocket not initialized"
|
|
248
257
|
self._start_turn()
|
|
@@ -275,7 +284,6 @@ class OpenAISTTTranscriptionSession(StreamedTranscriptionSession):
|
|
|
275
284
|
"wss://api.openai.com/v1/realtime?intent=transcription",
|
|
276
285
|
additional_headers={
|
|
277
286
|
"Authorization": f"Bearer {self._client.api_key}",
|
|
278
|
-
"OpenAI-Beta": "realtime=v1",
|
|
279
287
|
"OpenAI-Log-Session": "1",
|
|
280
288
|
},
|
|
281
289
|
) as ws:
|
agents/voice/pipeline.py
CHANGED
|
@@ -91,6 +91,7 @@ class VoicePipeline:
|
|
|
91
91
|
trace_id=None, # Automatically generated
|
|
92
92
|
group_id=self.config.group_id,
|
|
93
93
|
metadata=self.config.trace_metadata,
|
|
94
|
+
tracing=self.config.tracing,
|
|
94
95
|
disabled=self.config.tracing_disabled,
|
|
95
96
|
):
|
|
96
97
|
input_text = await self._process_audio_input(audio_input)
|
|
@@ -119,6 +120,7 @@ class VoicePipeline:
|
|
|
119
120
|
trace_id=None,
|
|
120
121
|
group_id=self.config.group_id,
|
|
121
122
|
metadata=self.config.trace_metadata,
|
|
123
|
+
tracing=self.config.tracing,
|
|
122
124
|
disabled=self.config.tracing_disabled,
|
|
123
125
|
):
|
|
124
126
|
output = StreamedAudioResult(
|
agents/voice/pipeline_config.py
CHANGED
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
+
from ..tracing import TracingConfig
|
|
6
7
|
from ..tracing.util import gen_group_id
|
|
7
8
|
from .model import STTModelSettings, TTSModelSettings, VoiceModelProvider
|
|
8
9
|
from .models.openai_model_provider import OpenAIVoiceModelProvider
|
|
@@ -18,6 +19,9 @@ class VoicePipelineConfig:
|
|
|
18
19
|
tracing_disabled: bool = False
|
|
19
20
|
"""Whether to disable tracing of the pipeline. Defaults to `False`."""
|
|
20
21
|
|
|
22
|
+
tracing: TracingConfig | None = None
|
|
23
|
+
"""Tracing configuration for this pipeline."""
|
|
24
|
+
|
|
21
25
|
trace_include_sensitive_data: bool = True
|
|
22
26
|
"""Whether to include sensitive data in traces. Defaults to `True`. This is specifically for the
|
|
23
27
|
voice pipeline, and not for anything that goes on inside your Workflow."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openai-agents
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.8
|
|
4
4
|
Summary: OpenAI Agents SDK
|
|
5
5
|
Project-URL: Homepage, https://openai.github.io/openai-agents-python/
|
|
6
6
|
Project-URL: Repository, https://github.com/openai/openai-agents-python
|
|
@@ -16,20 +16,31 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
21
|
Classifier: Typing :: Typed
|
|
21
22
|
Requires-Python: >=3.9
|
|
22
23
|
Requires-Dist: griffe<2,>=1.5.6
|
|
23
24
|
Requires-Dist: mcp<2,>=1.11.0; python_version >= '3.10'
|
|
24
|
-
Requires-Dist: openai<2
|
|
25
|
-
Requires-Dist: pydantic<3,>=2.
|
|
25
|
+
Requires-Dist: openai<3,>=2.9.0
|
|
26
|
+
Requires-Dist: pydantic<3,>=2.12.3
|
|
26
27
|
Requires-Dist: requests<3,>=2.0
|
|
27
28
|
Requires-Dist: types-requests<3,>=2.0
|
|
28
29
|
Requires-Dist: typing-extensions<5,>=4.12.2
|
|
30
|
+
Provides-Extra: dapr
|
|
31
|
+
Requires-Dist: dapr>=1.16.0; extra == 'dapr'
|
|
32
|
+
Requires-Dist: grpcio>=1.60.0; extra == 'dapr'
|
|
33
|
+
Provides-Extra: encrypt
|
|
34
|
+
Requires-Dist: cryptography<46,>=45.0; extra == 'encrypt'
|
|
29
35
|
Provides-Extra: litellm
|
|
30
|
-
Requires-Dist: litellm<2,>=1.
|
|
36
|
+
Requires-Dist: litellm<2,>=1.81.0; extra == 'litellm'
|
|
31
37
|
Provides-Extra: realtime
|
|
32
38
|
Requires-Dist: websockets<16,>=15.0; extra == 'realtime'
|
|
39
|
+
Provides-Extra: redis
|
|
40
|
+
Requires-Dist: redis>=7; extra == 'redis'
|
|
41
|
+
Provides-Extra: sqlalchemy
|
|
42
|
+
Requires-Dist: asyncpg>=0.29.0; extra == 'sqlalchemy'
|
|
43
|
+
Requires-Dist: sqlalchemy>=2.0; extra == 'sqlalchemy'
|
|
33
44
|
Provides-Extra: viz
|
|
34
45
|
Requires-Dist: graphviz>=0.17; extra == 'viz'
|
|
35
46
|
Provides-Extra: voice
|
|
@@ -37,7 +48,7 @@ Requires-Dist: numpy<3,>=2.2.0; (python_version >= '3.10') and extra == 'voice'
|
|
|
37
48
|
Requires-Dist: websockets<16,>=15.0; extra == 'voice'
|
|
38
49
|
Description-Content-Type: text/markdown
|
|
39
50
|
|
|
40
|
-
# OpenAI Agents SDK
|
|
51
|
+
# OpenAI Agents SDK [](https://pypi.org/project/openai-agents/)
|
|
41
52
|
|
|
42
53
|
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows. It is provider-agnostic, supporting the OpenAI Responses and Chat Completions APIs, as well as 100+ other LLMs.
|
|
43
54
|
|
|
@@ -58,29 +69,32 @@ Explore the [examples](examples) directory to see the SDK in action, and read ou
|
|
|
58
69
|
|
|
59
70
|
## Get started
|
|
60
71
|
|
|
61
|
-
|
|
72
|
+
To get started, set up your Python environment (Python 3.9 or newer required), and then install OpenAI Agents SDK package.
|
|
62
73
|
|
|
63
|
-
|
|
74
|
+
### venv
|
|
64
75
|
|
|
65
76
|
```bash
|
|
66
|
-
python -m venv
|
|
67
|
-
source
|
|
77
|
+
python -m venv .venv
|
|
78
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
79
|
+
pip install openai-agents
|
|
68
80
|
```
|
|
69
81
|
|
|
70
|
-
|
|
82
|
+
For voice support, install with the optional `voice` group: `pip install 'openai-agents[voice]'`.
|
|
71
83
|
|
|
72
|
-
|
|
73
|
-
uv venv
|
|
74
|
-
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
75
|
-
```
|
|
84
|
+
For Redis session support, install with the optional `redis` group: `pip install 'openai-agents[redis]'`.
|
|
76
85
|
|
|
77
|
-
|
|
86
|
+
### uv
|
|
87
|
+
|
|
88
|
+
If you're familiar with [uv](https://docs.astral.sh/uv/), installing the package would be even easier:
|
|
78
89
|
|
|
79
90
|
```bash
|
|
80
|
-
|
|
91
|
+
uv init
|
|
92
|
+
uv add openai-agents
|
|
81
93
|
```
|
|
82
94
|
|
|
83
|
-
For voice support, install with the optional `voice` group: `
|
|
95
|
+
For voice support, install with the optional `voice` group: `uv add 'openai-agents[voice]'`.
|
|
96
|
+
|
|
97
|
+
For Redis session support, install with the optional `redis` group: `uv add 'openai-agents[redis]'`.
|
|
84
98
|
|
|
85
99
|
## Hello world example
|
|
86
100
|
|
|
@@ -194,7 +208,7 @@ The Agents SDK is designed to be highly flexible, allowing you to model a wide r
|
|
|
194
208
|
|
|
195
209
|
## Tracing
|
|
196
210
|
|
|
197
|
-
The Agents SDK automatically traces your agent runs, making it easy to track and debug the behavior of your agents. Tracing is extensible by design, supporting custom spans and a wide variety of external destinations, including [Logfire](https://logfire.pydantic.dev/docs/integrations/llms/openai/#openai-agents), [AgentOps](https://docs.agentops.ai/v1/integrations/agentssdk), [Braintrust](https://braintrust.dev/docs/guides/traces/integrations#openai-agents-sdk), [Scorecard](https://docs.scorecard.io/docs/documentation/features/tracing#openai-agents-sdk-integration),
|
|
211
|
+
The Agents SDK automatically traces your agent runs, making it easy to track and debug the behavior of your agents. Tracing is extensible by design, supporting custom spans and a wide variety of external destinations, including [Logfire](https://logfire.pydantic.dev/docs/integrations/llms/openai/#openai-agents), [AgentOps](https://docs.agentops.ai/v1/integrations/agentssdk), [Braintrust](https://braintrust.dev/docs/guides/traces/integrations#openai-agents-sdk), [Scorecard](https://docs.scorecard.io/docs/documentation/features/tracing#openai-agents-sdk-integration), [Keywords AI](https://docs.keywordsai.co/integration/development-frameworks/openai-agent), and many more. For more details about how to customize or disable tracing, see [Tracing](http://openai.github.io/openai-agents-python/tracing), which also includes a larger list of [external tracing processors](http://openai.github.io/openai-agents-python/tracing/#external-tracing-processors-list).
|
|
198
212
|
|
|
199
213
|
## Long running agents & human-in-the-loop
|
|
200
214
|
|
|
@@ -251,8 +265,13 @@ print(result.final_output) # "Approximately 39 million"
|
|
|
251
265
|
```python
|
|
252
266
|
from agents import Agent, Runner, SQLiteSession
|
|
253
267
|
|
|
254
|
-
#
|
|
268
|
+
# SQLite - file-based or in-memory database
|
|
255
269
|
session = SQLiteSession("user_123", "conversations.db")
|
|
270
|
+
|
|
271
|
+
# Redis - for scalable, distributed deployments
|
|
272
|
+
# from agents.extensions.memory import RedisSession
|
|
273
|
+
# session = RedisSession.from_url("user_123", url="redis://localhost:6379/0")
|
|
274
|
+
|
|
256
275
|
agent = Agent(name="Assistant")
|
|
257
276
|
|
|
258
277
|
# Different session IDs maintain separate conversation histories
|
|
@@ -337,6 +356,12 @@ make lint # run linter
|
|
|
337
356
|
make format-check # run style checker
|
|
338
357
|
```
|
|
339
358
|
|
|
359
|
+
Format code if `make format-check` fails above by running:
|
|
360
|
+
|
|
361
|
+
```
|
|
362
|
+
make format
|
|
363
|
+
```
|
|
364
|
+
|
|
340
365
|
## Acknowledgements
|
|
341
366
|
|
|
342
367
|
We'd like to acknowledge the excellent work of the open-source community, especially:
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
agents/__init__.py,sha256=MSjfVC-bRubVL_MiC26HyGGWDfGamKnVjFH5lgQ0JIA,10678
|
|
2
|
+
agents/_config.py,sha256=ANrM7GP2VSQehDkMc9qocxkUlPwqU-i5sieMJyEwxpM,796
|
|
3
|
+
agents/_debug.py,sha256=dRe2dUlA9bCLp6f8bAdiX7JfGyJuHyS_DRdW0kZshl0,856
|
|
4
|
+
agents/_run_impl.py,sha256=GRoDFPUBMIFH2GIlML-2y4vfPQitAR5rvsS70GIOqsQ,87957
|
|
5
|
+
agents/agent.py,sha256=3NxzJ2JJehTec2ApdB6Ol8MZ5sMoY2w4cJ_xzRLRIFk,24100
|
|
6
|
+
agents/agent_output.py,sha256=teTFK8unUN3esXhmEBO0bQGYQm1Axd5rYleDt9TFDgw,7153
|
|
7
|
+
agents/apply_diff.py,sha256=nqgXzrQl4Yeq52PENGd0H4hEAQPf5GS8_ufJlmNNPlQ,9952
|
|
8
|
+
agents/computer.py,sha256=XD44UgiUWSfniv-xKwwDP6wFKVwBiZkpaL1hO-0-7ZA,2516
|
|
9
|
+
agents/editor.py,sha256=SsWbJQughgigJovnH288kINdbCJRmUY_af-Zic7yQpU,1346
|
|
10
|
+
agents/exceptions.py,sha256=roJsYttB5i7FQlzRQNg8QSVdALZFz5u7kUeVvJdaitE,4156
|
|
11
|
+
agents/function_schema.py,sha256=njtbLt44DOkIU0a0U8TeDNEx-iQZU8oohwy3k7-k4A8,14855
|
|
12
|
+
agents/guardrail.py,sha256=XsAmkXHIOR_mi-ZkiBkxEmKrSlD-QId2OPpPnsCxmlY,10188
|
|
13
|
+
agents/items.py,sha256=_MMRNxuh_PAjh3eLMHxPS1aP-MBeMaMsfdT6GIe03QY,19448
|
|
14
|
+
agents/lifecycle.py,sha256=Z13gLTbj1uYgCgEEj7snWt898v0352FLn-IJAyxpWAU,4965
|
|
15
|
+
agents/logger.py,sha256=p_ef7vWKpBev5FFybPJjhrCCQizK08Yy1A2EDO1SNNg,60
|
|
16
|
+
agents/model_settings.py,sha256=NOV5evwpdylX5sXsroz1DWQn1gFZTRwEKo6C-dTK7rY,7181
|
|
17
|
+
agents/prompts.py,sha256=Ss5y_7s2HFcRAOAKu4WTxQszs5ybI8TfbxgEYdnj9sg,2231
|
|
18
|
+
agents/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
19
|
+
agents/repl.py,sha256=NX0BE5YDnmGQ2rdQsmLm3CKkQZ5m4GC95xXmUsAXJVs,2539
|
|
20
|
+
agents/result.py,sha256=xuJrWfDvu3qDV8pk4u4PXTB-KxF-fHeZ1HIHyzjLSCI,17698
|
|
21
|
+
agents/run.py,sha256=mIjOGwBO63Wj4jJAhatW6dCXUrsGOcguG4oF4JhhXvQ,92373
|
|
22
|
+
agents/run_context.py,sha256=-jQBCayTjgDYE60ySKcqsq_tzW_sHXkpYmJNoynl5ec,1195
|
|
23
|
+
agents/stream_events.py,sha256=vW7O5T6iwFuRFvds1Bq3zMB60fRCz7lWryMkHSL-bAo,1733
|
|
24
|
+
agents/strict_schema.py,sha256=HFm4j753-UKDfJ0zSiQYf5V1qGuHY6TRm2zzwI0f0E0,6382
|
|
25
|
+
agents/tool.py,sha256=uodTVeL_LAipwOEnlluHATt3D15XySqhQ6lbGR3lizk,29644
|
|
26
|
+
agents/tool_context.py,sha256=TuaP5R5ShOOs27ZRiP-mBY9HQT3APz9FAGbXCzRKp-c,2094
|
|
27
|
+
agents/tool_guardrails.py,sha256=2uXEr_R5AWy9NHtBjd7G7upc3uZSuoP86Hfsc-qTadM,8344
|
|
28
|
+
agents/usage.py,sha256=rv_LkfoQeYHKvA5QNy3bl-bBpN19fSl4w5xlxYOggOg,6900
|
|
29
|
+
agents/version.py,sha256=_1knUwzSK-HUeZTpRUkk6Z-CIcurqXuEplbV5TLJ08E,230
|
|
30
|
+
agents/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
agents/extensions/handoff_filters.py,sha256=greDlSFbYddps2uu6qLZQt8ts7UGO-BcAfp5OVCKKG0,2271
|
|
32
|
+
agents/extensions/handoff_prompt.py,sha256=oGWN0uNh3Z1L7E-Ev2up8W084fFrDNOsLDy7P6bcmic,1006
|
|
33
|
+
agents/extensions/visualization.py,sha256=sf9D_C-HMwkbWdZccTZvvMPRy_NSiwbm48tRJlESQBI,5144
|
|
34
|
+
agents/extensions/experimental/__init__.py,sha256=U4t2a9PPW6Sjb5LXSi1HiU3vfZR8lIU_dTdEy-TBR2A,177
|
|
35
|
+
agents/extensions/experimental/codex/__init__.py,sha256=wqCs_e7RHQbB0GBD66JIuzE2VoYL6yRo5iqsgvDCbiM,1914
|
|
36
|
+
agents/extensions/experimental/codex/codex.py,sha256=u5bqzKyVhH5nx8ZdwoOMJ482iXleg6eU5IL1InLIP5g,2932
|
|
37
|
+
agents/extensions/experimental/codex/codex_options.py,sha256=4mPW_GaTbPgRCnUIFC9MkUpUnXgteBsQZ01GjsWZiBg,1172
|
|
38
|
+
agents/extensions/experimental/codex/codex_tool.py,sha256=06Zjb48tKvPWrSip6Uq9N87STsTBx8_FFBYE-hmJMok,39164
|
|
39
|
+
agents/extensions/experimental/codex/events.py,sha256=eUiOcmfqWV3XvoOkVYIBecKb0Rum2h17XLvzNBLxv0I,4964
|
|
40
|
+
agents/extensions/experimental/codex/exec.py,sha256=YdaYRuwNLxffu5TFEnQ2Ism0onadOSXCyCF6GPHNLoQ,9223
|
|
41
|
+
agents/extensions/experimental/codex/items.py,sha256=or17cDgUZCfh4OkOqja2k_X7kr-25FNrZKf0aHs_vOs,7234
|
|
42
|
+
agents/extensions/experimental/codex/output_schema_file.py,sha256=Ych10pv8zvrzPV96_zVjHfr2fcnuEuDLtYpHV7vwF_E,1509
|
|
43
|
+
agents/extensions/experimental/codex/payloads.py,sha256=yS58UbMpGTbWeyFo7N_JWyvkFkcMt6bnDatlkWtjn7Q,892
|
|
44
|
+
agents/extensions/experimental/codex/thread.py,sha256=3HjWTf4eCKokWMdYSq9_aDUvwZaPWw39KUnVRX0CtRA,7129
|
|
45
|
+
agents/extensions/experimental/codex/thread_options.py,sha256=gNEFZhSOaIzXWxEQuzWI7Dh50jYsuNrYrEC_mVYgjJo,2095
|
|
46
|
+
agents/extensions/experimental/codex/turn_options.py,sha256=ANaichHiGPTdsRlbzsM7V1Lz8z3TUW7w-bHScPJ2oa8,1124
|
|
47
|
+
agents/extensions/memory/__init__.py,sha256=8HA24CtU_nG7gIUgw-5MNzMoLgHRqb5NjHxcHkdFw9E,4266
|
|
48
|
+
agents/extensions/memory/advanced_sqlite_session.py,sha256=rCrXM878foAuBN-rN2fibP2GHs-1hTtRx-TQcDKIfGI,52883
|
|
49
|
+
agents/extensions/memory/async_sqlite_session.py,sha256=HIdGi67bkmbX3Bv0_EqOiIKC-IMsa3i47apLe4y7N6A,8002
|
|
50
|
+
agents/extensions/memory/dapr_session.py,sha256=AZ2fOsHLqDIcS8Ash9jRYRsqB7lpcV1zJLeIMNVe41I,16663
|
|
51
|
+
agents/extensions/memory/encrypt_session.py,sha256=PVnZIEj50bjUq16OLnMKrbZiinLkrVpamPPEw8RnUCA,6485
|
|
52
|
+
agents/extensions/memory/redis_session.py,sha256=BuVV1JJ0Yd8fIjUmB5J-VyFNOn5TBI8tMGwLPcTDVNk,9724
|
|
53
|
+
agents/extensions/memory/sqlalchemy_session.py,sha256=fnlZkNF_XZekP44uhiR4rjlCkwG7JJEiFm35TJfiCtc,12325
|
|
54
|
+
agents/extensions/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
+
agents/extensions/models/litellm_model.py,sha256=hWKFTHKN5YgYW3k9d1TeQnqAp9hMckSEnB3pV-iuBqc,34727
|
|
56
|
+
agents/extensions/models/litellm_provider.py,sha256=ZHgh1nMoEvA7NpawkzLh3JDuDFtwXUV94Rs7UrwWqAk,1083
|
|
57
|
+
agents/handoffs/__init__.py,sha256=LAqmLzxHJey3zgKim8OF9mlrtqbKCeb2fRIpYrxQ8F4,13120
|
|
58
|
+
agents/handoffs/history.py,sha256=29RF-lIw8aq7wXFAXZiqnrW9bODqLHpwkIfkKi_3CBQ,9358
|
|
59
|
+
agents/mcp/__init__.py,sha256=yHmmYlrmEHzUas1inRLKL2iPqbb_-107G3gKe_tyg4I,750
|
|
60
|
+
agents/mcp/server.py,sha256=0cGwRZPHnESfKZrI5KRj0cHQsoJIpH75PW5bfCME6ys,36590
|
|
61
|
+
agents/mcp/util.py,sha256=HypJbTFTIZgWClqSknhtRjjzQcdqHhEfTt5Ff5W-qeI,8897
|
|
62
|
+
agents/memory/__init__.py,sha256=V4WXYGw4kxMCghhHTE0zYAVkLi7DKwkvLPoutLW_gx8,719
|
|
63
|
+
agents/memory/openai_conversations_session.py,sha256=FbV2YPbyTanBxY7pVcYQrlXTebsTKpRn7eIR6ESM1hU,3352
|
|
64
|
+
agents/memory/openai_responses_compaction_session.py,sha256=pj2lfgyquBH5eUjRWHQ2bc0sZ7xlvot-YPFCC9BEtn8,9434
|
|
65
|
+
agents/memory/session.py,sha256=smC7CzP3pf4I3u7xPNk4-ZkBE3IyHwKqOiHq-gn2yMk,3975
|
|
66
|
+
agents/memory/sqlite_session.py,sha256=Oh6g-7M51HR9EECHZZz_0-4yx2NaEYyeW2-AwdYxwfA,10098
|
|
67
|
+
agents/memory/util.py,sha256=ZAHOrNVA36xICFzuNgHgEA1_s_oEMO6Wsu6-EecY8JU,586
|
|
68
|
+
agents/models/__init__.py,sha256=E0XVqWayVAsFqxucDLBW30siaqfNQsVrAnfidG_C3ok,287
|
|
69
|
+
agents/models/_openai_shared.py,sha256=4Ngwo2Fv2RXY61Pqck1cYPkSln2tDnb8Ai-ao4QG-iE,836
|
|
70
|
+
agents/models/chatcmpl_converter.py,sha256=kP3A50j4ccwXAf9JA8a7PaPDPq1YKiwQBMLfApq3EPo,34121
|
|
71
|
+
agents/models/chatcmpl_helpers.py,sha256=UWwQpvh10EQUix3lFH8idXVuBiWZp1zw_Oiod7OGks4,3537
|
|
72
|
+
agents/models/chatcmpl_stream_handler.py,sha256=Usl00buiz4pr1mD8zF0tqVnSj8I9vMG7kzVAgenNG_s,37065
|
|
73
|
+
agents/models/default_models.py,sha256=mlvBePn8H4UkHo7lN-wh7A3k2ciLgBUFKpROQxzdTfs,2098
|
|
74
|
+
agents/models/fake_id.py,sha256=lbXjUUSMeAQ8eFx4V5QLUnBClHE6adJlYYav55RlG5w,268
|
|
75
|
+
agents/models/interface.py,sha256=-AFUHC8iRuGZmtQwguDw4s-M4OPL2y2mct4TAmWvVrU,4057
|
|
76
|
+
agents/models/multi_provider.py,sha256=aiDbls5G4YomPfN6qH1pGlj41WS5jlDp2T82zm6qcnM,5578
|
|
77
|
+
agents/models/openai_chatcompletions.py,sha256=dZygeKpRyUEx5jwZ6iAZ9KiRNB2zSVZotaaaX5C63Mc,15051
|
|
78
|
+
agents/models/openai_provider.py,sha256=5HQe92pYS4_eph-PNvLsOq7xJH8U9UoL0apZnyBMn6k,3809
|
|
79
|
+
agents/models/openai_responses.py,sha256=vebvi6OKGcO4v-ytLWdvUb7AwY-D0QhDDOcAj66Z4Yk,22377
|
|
80
|
+
agents/realtime/README.md,sha256=5YCYXH5ULmlWoWo1PE9TlbHjeYgjnp-xY8ZssSFY2Vk,126
|
|
81
|
+
agents/realtime/__init__.py,sha256=voXtgoWGR5ZFEipFDsXuz08rQDBAE6aMN4buBcpSlEI,5071
|
|
82
|
+
agents/realtime/_default_tracker.py,sha256=4OMxBvD1MnZmMn6JZYKL42uWhVzvK6NdDLDfPP54d78,1765
|
|
83
|
+
agents/realtime/_util.py,sha256=jYjvZcmwOiqKwrueCh_OpvlVUEXV4s-XPF-fgstVcp4,623
|
|
84
|
+
agents/realtime/agent.py,sha256=bkegBJ_lc3z3NtnlIyEkVZFxZWBJwVjsQVzpQZAu7PM,4283
|
|
85
|
+
agents/realtime/audio_formats.py,sha256=2_WYOpCkU1jsaTkscyDumqSz-anql5T43v3aeQvJGck,2117
|
|
86
|
+
agents/realtime/config.py,sha256=X0W18G9z3NrUDQOC-RYT5GLU2cJe4UXYcM21iLAuMRc,8199
|
|
87
|
+
agents/realtime/events.py,sha256=BkktfS4cCpz53Fn6Di-8kgRXlxzE9NvzqJFevDVE3uc,6084
|
|
88
|
+
agents/realtime/handoffs.py,sha256=pxLk0WQjRxyhqbRqGdL_iqd8vXK5F0vI1aIPFGnB2mI,6654
|
|
89
|
+
agents/realtime/items.py,sha256=5EG768FkKpbk-dhe4b_7BfFpdUEFWtxoiVUtNI9KXsc,5517
|
|
90
|
+
agents/realtime/model.py,sha256=jVZBhPRc2yDQfAFn2pqnnVNtkgsguKS8qO-KbQCtuEs,6774
|
|
91
|
+
agents/realtime/model_events.py,sha256=2NKofzLszKHwtlcsogsNnH6hdeFfO7S96yWDB4AlxB8,4340
|
|
92
|
+
agents/realtime/model_inputs.py,sha256=-pl8Oj0WVrA5Gt-dqP5Va3ZHqXyIXpsjMsf9UL-suEY,2789
|
|
93
|
+
agents/realtime/openai_realtime.py,sha256=9fjULSv7s2CpEochWdSiznJp_jqjZWQNfQycf__YtrQ,52984
|
|
94
|
+
agents/realtime/runner.py,sha256=KfU7utmc9QFH2htIKN2IN9H-5EnB0qN9ezmvlRTnOm4,2511
|
|
95
|
+
agents/realtime/session.py,sha256=7IykpeEeH_FhVHFTU58ie8TijBdfyzmYpFvFMlTdEc8,37200
|
|
96
|
+
agents/tracing/__init__.py,sha256=I3h0fuAcHCUhv6Wd3WPD9eTas1njM84YhQ0HYaYbcP0,3046
|
|
97
|
+
agents/tracing/config.py,sha256=D0NmDarZMQDc4uUplAAbbNVRjUpdKwjh-ooSqp9SAUw,185
|
|
98
|
+
agents/tracing/create.py,sha256=lu9RLqbE5dzq2JbTtQ9EhdN044FjjJOEIccd56T5PaY,18178
|
|
99
|
+
agents/tracing/logger.py,sha256=J4KUDRSGa7x5UVfUwWe-gbKwoaq8AeETRqkPt3QvtGg,68
|
|
100
|
+
agents/tracing/processor_interface.py,sha256=_kby-MyaJ9NSInZIoJi9tJlYkWsIlGm2WCeB8DhcPmY,4385
|
|
101
|
+
agents/tracing/processors.py,sha256=xy5MgB6f8tfHY9CKu2rHM5mcM70Ibwl68Fra3DogZ74,12014
|
|
102
|
+
agents/tracing/provider.py,sha256=PHMDTucLWgBAAKInDPvRxykneeTq5kh4Jt2viDY1Kns,12426
|
|
103
|
+
agents/tracing/scope.py,sha256=u17_m8RPpGvbHrTkaO_kDi5ROBWhfOAIgBe7suiaRD4,1445
|
|
104
|
+
agents/tracing/setup.py,sha256=2h9TH1GAKcXKM1U99dOKKR3XlHp8JKzh2JG3DQPKyhY,612
|
|
105
|
+
agents/tracing/span_data.py,sha256=nI2Fbu1ORE8ybE6m6RuddTJF5E5xFmEj8Mq5bSFv4bE,9017
|
|
106
|
+
agents/tracing/spans.py,sha256=KYtMIb_8M2Knikg_xqYJj-JFcDtocNpPU8-atpA3ZVA,9862
|
|
107
|
+
agents/tracing/traces.py,sha256=f4e2BF_ig3vXdTGiHX6NDhyMnU43GqaY89nuMUiLNYU,8398
|
|
108
|
+
agents/tracing/util.py,sha256=J7IZgVDmeW0aZDw8LBSjBKrlQbcOmaqZE7XQjolPwi8,490
|
|
109
|
+
agents/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
+
agents/util/_coro.py,sha256=S38XUYFC7bqTELSgMUBsAX1GoRlIrV7coupcUAWH__4,45
|
|
111
|
+
agents/util/_error_tracing.py,sha256=hdkYNx180b18lP0PSB1toE5atNHsMg_Bm9Osw812vLo,421
|
|
112
|
+
agents/util/_json.py,sha256=wC2NwwQspxo-PaZ3SmmlKS9KrBO5Gw4qkncpwtf86vA,1526
|
|
113
|
+
agents/util/_pretty_print.py,sha256=pnrM81KRG4G21jZnYrYBCkPgtUeP8qcnJm-9tpAV1WA,2738
|
|
114
|
+
agents/util/_transforms.py,sha256=9jbF1QGsUTxjxIDAUNg8HJdz7Z7kdo7KQvXNnzuZuiw,682
|
|
115
|
+
agents/util/_types.py,sha256=8KxYfCw0gYSMWcQmacJoc3Q7Lc46LmT-AWvhF10KJ-E,160
|
|
116
|
+
agents/voice/__init__.py,sha256=4VWBUjyoXC6dGFuk-oZQGg8T32bFxVwy371c-zDK-EU,1537
|
|
117
|
+
agents/voice/events.py,sha256=4aPAZC0__ocgmg_mcX4c1zv9Go-YdKIVItQ2kYgtye0,1216
|
|
118
|
+
agents/voice/exceptions.py,sha256=QcyfvaUTBe4gxbFP82oDSa_puzZ4Z4O4k01B8pAHnK0,233
|
|
119
|
+
agents/voice/imports.py,sha256=VaE5I8aJTP9Zl_0-y9dx1UcAP7KPRDMaikFK2jFnn8s,348
|
|
120
|
+
agents/voice/input.py,sha256=L4uriQOvMt5Sxn88pNrdeOyyA8KWVz2y4fOyvvVjd9s,3011
|
|
121
|
+
agents/voice/model.py,sha256=LWnIWEwU0-aFkff3kbTKkxejnYqzS2XHG5Qm2YcrzFI,5956
|
|
122
|
+
agents/voice/pipeline.py,sha256=Vgt6oNYQ68QTF2xocBLEAorh0eFKAL-va4LO24mcls4,6573
|
|
123
|
+
agents/voice/pipeline_config.py,sha256=n2pgGkEZheB4lAH7XmWEkNWg99p7yTbGUSz8TxH4fH0,1888
|
|
124
|
+
agents/voice/result.py,sha256=Yx9JCMGCE9OfXacaBFfFLQJRwkNo5-h4Nqm9OPnemU4,11107
|
|
125
|
+
agents/voice/utils.py,sha256=MrRomVqBLXeMAOue-Itwh0Fc5HjB0QCMKXclqFPhrbI,1309
|
|
126
|
+
agents/voice/workflow.py,sha256=m_-_4qU1gEE5gcGahiE2IrIimmRW2X1rR20zZEGivSc,3795
|
|
127
|
+
agents/voice/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
+
agents/voice/models/openai_model_provider.py,sha256=Khn0uT-VhsEbe7_OhBMGFQzXNwL80gcWZyTHl3CaBII,3587
|
|
129
|
+
agents/voice/models/openai_stt.py,sha256=Lb_F9160VNKDHXZ9zylSzeig7sB8lBjiYhQLDZsp6NQ,17257
|
|
130
|
+
agents/voice/models/openai_tts.py,sha256=4KoLQuFDHKu5a1VTJlu9Nj3MHwMlrn9wfT_liJDJ2dw,1477
|
|
131
|
+
openai_agents-0.6.8.dist-info/METADATA,sha256=BkDIcHAYOEC0bAi1KHWGBBuWcHUPsYz8r3uvdxlw-Fg,13303
|
|
132
|
+
openai_agents-0.6.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
133
|
+
openai_agents-0.6.8.dist-info/licenses/LICENSE,sha256=E994EspT7Krhy0qGiES7WYNzBHrh1YDk3r--8d1baRU,1063
|
|
134
|
+
openai_agents-0.6.8.dist-info/RECORD,,
|