mirror of
https://github.com/openai/codex.git
synced 2026-10-21 07:42:01 +00:00
## Why
`TurnHandle.run()` returned the raw app-server `Turn`, whose live
start/completed payloads do not include loaded `items`, so users saw
empty `items` after starting a turn. That made the handle-based path
behave differently from `Thread.run(...)`, and pushed examples toward
persisted-thread reads plus helper extraction.
This PR makes the run APIs standalone: starting a turn and running it
returns collected turn data directly, or fails visibly when required
stream events are missing.
## What Changed
- Replaces the public `RunResult` export with `TurnResult`.
- Adds turn metadata to `TurnResult`: `id`, `status`, `error`,
`started_at`, `completed_at`, and `duration_ms`, alongside
`final_response`, `items`, and `usage`.
- Changes `TurnHandle.run()` and `AsyncTurnHandle.run()` to consume
stream events with the same collector used by `Thread.run(...)`.
- Exports `TurnError` from `openai_codex.types` for the new result
shape.
- Updates tests, examples, docs, and the walkthrough notebook to use
`result.final_response` and `result.items` directly.
- Removes persisted-thread helper paths and placeholder/skipped control
flows from the public examples and notebook.
## Verification
- `python3 -m py_compile ...` over changed SDK, example, and test Python
files.
- `python3 -c "import json;
json.load(open('sdk/python/notebooks/sdk_walkthrough.ipynb'))"`
- `git diff --check`
- `PYTHONPATH=sdk/python/src python3 -c ...` import/signature smoke for
`TurnResult`, `TurnHandle.run`, and `AsyncTurnHandle.run`.
76 lines
1.5 KiB
Python
76 lines
1.5 KiB
Python
from ._version import __version__
|
|
from .api import (
|
|
ApprovalMode,
|
|
AsyncChatgptLoginHandle,
|
|
AsyncCodex,
|
|
AsyncDeviceCodeLoginHandle,
|
|
AsyncThread,
|
|
AsyncTurnHandle,
|
|
ChatgptLoginHandle,
|
|
Codex,
|
|
DeviceCodeLoginHandle,
|
|
ImageInput,
|
|
Input,
|
|
InputItem,
|
|
LocalImageInput,
|
|
MentionInput,
|
|
SkillInput,
|
|
TextInput,
|
|
Thread,
|
|
TurnHandle,
|
|
TurnResult,
|
|
)
|
|
from .client import AppServerConfig
|
|
from .errors import (
|
|
AppServerError,
|
|
AppServerRpcError,
|
|
InternalRpcError,
|
|
InvalidParamsError,
|
|
InvalidRequestError,
|
|
JsonRpcError,
|
|
MethodNotFoundError,
|
|
ParseError,
|
|
RetryLimitExceededError,
|
|
ServerBusyError,
|
|
TransportClosedError,
|
|
is_retryable_error,
|
|
)
|
|
from .retry import retry_on_overload
|
|
|
|
__all__ = [
|
|
"__version__",
|
|
"AppServerConfig",
|
|
"Codex",
|
|
"AsyncCodex",
|
|
"ApprovalMode",
|
|
"ChatgptLoginHandle",
|
|
"DeviceCodeLoginHandle",
|
|
"AsyncChatgptLoginHandle",
|
|
"AsyncDeviceCodeLoginHandle",
|
|
"Thread",
|
|
"AsyncThread",
|
|
"TurnHandle",
|
|
"AsyncTurnHandle",
|
|
"TurnResult",
|
|
"Input",
|
|
"InputItem",
|
|
"TextInput",
|
|
"ImageInput",
|
|
"LocalImageInput",
|
|
"SkillInput",
|
|
"MentionInput",
|
|
"retry_on_overload",
|
|
"AppServerError",
|
|
"TransportClosedError",
|
|
"JsonRpcError",
|
|
"AppServerRpcError",
|
|
"ParseError",
|
|
"InvalidRequestError",
|
|
"MethodNotFoundError",
|
|
"InvalidParamsError",
|
|
"InternalRpcError",
|
|
"ServerBusyError",
|
|
"RetryLimitExceededError",
|
|
"is_retryable_error",
|
|
]
|