mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
[codex] Prepare Python SDK beta documentation and package metadata (#24836)
## Why The initial public `openai-codex` beta should read and install like a normal published Python package before a release tag is created. This follows merged PR #24828, which establishes the independent SDK beta release plumbing and exact runtime dependency. ## What changed - Rewrote `sdk/python/README.md` as a compact PyPI-facing beta package page: published installation, one quickstart, short login examples, built-in help, and links to deeper guides. - Updated the getting-started guide, API reference, FAQ, and examples index to present the published beta consistently without repeating onboarding in the package landing page or reference page. - Made `pip install openai-codex` the primary install path while beta releases are the only published SDK releases, with `--pre` documented for opting into prereleases after a stable release exists. - Added curated `help()` / `pydoc` docstrings across the public API and generated public convenience methods through `scripts/update_sdk_artifacts.py`. - Declared the repository `Apache-2.0` license expression and Documentation URL in package metadata, without introducing a duplicated SDK-local license file. - Kept the source distribution focused on installable package material (`src/openai_codex`, `README.md`, and `pyproject.toml`); the repository docs and runnable examples remain linked from the PyPI README. - Built release artifacts in an Alpine container on the Ubuntu runner, matching Python SDK CI and allowing type generation to install the published `musllinux` runtime wheel. - Added `twine check --strict` to the release workflow so malformed PyPI metadata or rendered README content fails before publishing. - Added focused SDK assertions for beta metadata, the exact runtime pin, source distribution contents, and the built-in Python documentation surface. ## Validation - Ran `uv run --frozen --extra dev ruff check scripts/update_sdk_artifacts.py src/openai_codex tests/test_public_api_signatures.py tests/test_artifact_workflow_and_binaries.py` before the final README-only reductions and review-fix follow-ups. - Built `openai_codex-0.1.0b1-py3-none-any.whl` and `openai_codex-0.1.0b1.tar.gz` before the final README-only reductions and review-fix follow-ups. - Ran `python -m twine check --strict` on both built artifacts before the final README-only reductions and review-fix follow-ups. - Verified artifact metadata reports `Apache-2.0` without a duplicated SDK-local license file. - Verified `inspect.getdoc(...)` resolves documentation for the package, `Codex`, `CodexConfig`, and key generated thread methods. - Rebased the documentation/readiness change onto merged PR #24828 without changing the intended SDK or workflow file contents. - Final verification is delegated to online CI for this PR.
This commit is contained in:
committed by
GitHub
Unverified
parent
4d0c4cd058
commit
eb1cc3824c
+56
-99
@@ -1,132 +1,89 @@
|
||||
# OpenAI Codex Python SDK (Experimental)
|
||||
# OpenAI Codex Python SDK (Beta)
|
||||
|
||||
Experimental Python SDK for `codex app-server` JSON-RPC v2 over stdio, with a small default surface optimized for real scripts and apps.
|
||||
Build Python applications that start Codex threads, run turns, stream progress,
|
||||
and control workspace access.
|
||||
|
||||
The generated wire-model layer is sourced from the pinned `openai-codex-cli-bin`
|
||||
runtime package and exposed as Pydantic models with snake_case Python fields
|
||||
that serialize back to the protocol's camelCase wire format.
|
||||
The package root exports the ergonomic client API; public Codex protocol value and
|
||||
event types live in `openai_codex.types`.
|
||||
> [!NOTE]
|
||||
> `openai-codex` is in beta. Public APIs may change before `1.0`.
|
||||
|
||||
## Install
|
||||
|
||||
Install the SDK:
|
||||
|
||||
```bash
|
||||
cd sdk/python
|
||||
uv sync
|
||||
source .venv/bin/activate
|
||||
pip install openai-codex
|
||||
```
|
||||
|
||||
Published SDK builds pin an exact compatible `openai-codex-cli-bin` runtime
|
||||
dependency. Pass `CodexConfig(codex_bin=...)` only
|
||||
when you intentionally want to run against a specific local app-server binary.
|
||||
For reproducible environments, install this release exactly:
|
||||
|
||||
```bash
|
||||
pip install openai-codex==0.1.0b1
|
||||
```
|
||||
|
||||
The SDK requires Python `>=3.10` and installs its compatible Codex runtime
|
||||
dependency automatically. While beta releases are the only published SDK
|
||||
releases, the normal install command selects the latest beta. After a stable
|
||||
release exists, use `pip install --pre openai-codex` to explicitly select a
|
||||
newer prerelease.
|
||||
|
||||
## Quickstart
|
||||
|
||||
```python
|
||||
from openai_codex import Codex, Sandbox
|
||||
|
||||
with Codex() as codex:
|
||||
# Call login_api_key(...) first when this Codex session is not
|
||||
# already authenticated.
|
||||
thread = codex.thread_start(model="gpt-5", sandbox=Sandbox.workspace_write)
|
||||
result = thread.run("Say hello in one sentence.")
|
||||
print(result.final_response)
|
||||
print(len(result.items))
|
||||
```
|
||||
|
||||
`thread.run(...)` and `thread.turn(...).run()` return `TurnResult`. Its
|
||||
`final_response` is `None` when the turn completes without a final-answer or
|
||||
phase-less assistant message item.
|
||||
|
||||
## Sandbox
|
||||
|
||||
Use the same enum when creating a thread or changing its sandbox for a turn:
|
||||
|
||||
```python
|
||||
from openai_codex import Codex, Sandbox
|
||||
|
||||
with Codex() as codex:
|
||||
thread = codex.thread_start(sandbox=Sandbox.workspace_write)
|
||||
thread.run("Make the requested change.")
|
||||
review = thread.run("Review the diff only.", sandbox=Sandbox.read_only)
|
||||
```
|
||||
|
||||
Available presets:
|
||||
|
||||
- `Sandbox.read_only`: read files without allowing writes.
|
||||
- `Sandbox.workspace_write`: the normal default for projects with a recorded trust decision; read files and write inside the workspace and configured writable roots.
|
||||
- `Sandbox.full_access`: run without filesystem access restrictions.
|
||||
|
||||
When `sandbox=` is omitted, Codex uses its configured default. A sandbox
|
||||
passed to `run(...)` or `turn(...)` applies to that turn and subsequent turns
|
||||
on the thread.
|
||||
|
||||
## Login
|
||||
|
||||
Use the auth helper that matches your app:
|
||||
The SDK reuses your existing Codex authentication when one is already
|
||||
available:
|
||||
|
||||
```python
|
||||
from openai_codex import Codex
|
||||
|
||||
with Codex() as codex:
|
||||
codex.login_api_key("sk-...")
|
||||
account = codex.account()
|
||||
print(account.account)
|
||||
thread = codex.thread_start()
|
||||
result = thread.run("Explain this repository in three bullets.")
|
||||
print(result.final_response)
|
||||
```
|
||||
|
||||
Interactive ChatGPT login returns a handle. Open the provided URL or device-code
|
||||
page, then wait for the matching completion event:
|
||||
`thread.run(...)` returns a `TurnResult` containing the final response,
|
||||
collected items, and token usage.
|
||||
|
||||
## Authentication
|
||||
|
||||
Existing Codex authentication is reused automatically. To start ChatGPT
|
||||
browser login explicitly:
|
||||
|
||||
```python
|
||||
from openai_codex import Codex
|
||||
|
||||
with Codex() as codex:
|
||||
login = codex.login_chatgpt()
|
||||
print(login.auth_url)
|
||||
completed = login.wait()
|
||||
print(completed.success)
|
||||
print(login.wait().success)
|
||||
```
|
||||
|
||||
Use `login_chatgpt_device_code()` for device-code auth, `handle.cancel()` to
|
||||
stop an in-progress interactive login, and `logout()` to clear the active
|
||||
Codex account session.
|
||||
For device-code login:
|
||||
|
||||
## Docs map
|
||||
|
||||
- Golden path tutorial: `docs/getting-started.md`
|
||||
- API reference (signatures + behavior): `docs/api-reference.md`
|
||||
- Common decisions and pitfalls: `docs/faq.md`
|
||||
- Runnable examples index: `examples/README.md`
|
||||
- Jupyter walkthrough notebook: `notebooks/sdk_walkthrough.ipynb`
|
||||
|
||||
## Examples
|
||||
|
||||
Start here:
|
||||
|
||||
```bash
|
||||
cd sdk/python
|
||||
python examples/01_quickstart_constructor/sync.py
|
||||
python examples/01_quickstart_constructor/async.py
|
||||
```python
|
||||
with Codex() as codex:
|
||||
login = codex.login_chatgpt_device_code()
|
||||
print(login.verification_url, login.user_code)
|
||||
login.wait()
|
||||
```
|
||||
|
||||
## Runtime
|
||||
For API-key login:
|
||||
|
||||
Published SDK builds are pinned to an exact `openai-codex-cli-bin` package
|
||||
version, and that runtime package carries the platform-specific binary for the
|
||||
target wheel. SDK beta releases are versioned independently of runtime releases.
|
||||
```python
|
||||
with Codex() as codex:
|
||||
codex.login_api_key("sk-...")
|
||||
```
|
||||
|
||||
## Compatibility and versioning
|
||||
## Built-In Help
|
||||
|
||||
- Package: `openai-codex`
|
||||
- Runtime package: `openai-codex-cli-bin`
|
||||
- Python: `>=3.10`
|
||||
- Target protocol: Codex `app-server` JSON-RPC v2
|
||||
- Versioning rule: SDK releases pin one exact compatible Codex runtime version
|
||||
Use Python's standard `help(openai_codex)`, `help(Codex)`, or
|
||||
`python -m pydoc openai_codex` documentation tools.
|
||||
|
||||
## Notes
|
||||
## Documentation
|
||||
|
||||
- `Codex()` is eager and performs startup + `initialize` in the constructor.
|
||||
- Use context managers (`with Codex() as codex:`) to ensure shutdown.
|
||||
- Plain strings are accepted anywhere a turn input is accepted; they are
|
||||
shorthand for `TextInput(...)`.
|
||||
- Prefer `thread.run("...")` for the common case. Use `thread.turn(...)` when
|
||||
you need streaming, steering, or interrupt control.
|
||||
- For transient overload, use `retry_on_overload` from the package root.
|
||||
- [Getting started](https://github.com/openai/codex/blob/main/sdk/python/docs/getting-started.md)
|
||||
- [API reference](https://github.com/openai/codex/blob/main/sdk/python/docs/api-reference.md)
|
||||
- [FAQ](https://github.com/openai/codex/blob/main/sdk/python/docs/faq.md)
|
||||
- [Examples](https://github.com/openai/codex/blob/main/sdk/python/examples/README.md)
|
||||
|
||||
The package is licensed under the
|
||||
[repository Apache License 2.0](https://github.com/openai/codex/blob/main/LICENSE).
|
||||
|
||||
Reference in New Issue
Block a user