Skip to content

Add canonical streaming adapter layer for OpenAI - #40

Merged
tanaysd merged 1 commit into
mainfrom
codex/run-the-codex-command
Oct 24, 2025
Merged

Add canonical streaming adapter layer for OpenAI#40
tanaysd merged 1 commit into
mainfrom
codex/run-the-codex-command

Conversation

@tanaysd

@tanaysd tanaysd commented Oct 24, 2025

Copy link
Copy Markdown
Owner

Summary

  • add the canonical adapter protocol and event dataclasses under foundry.adapters
  • implement an OpenAI streaming adapter that normalizes provider chunks into deterministic events
  • document the adapter contract and add contract/parity/edge tests backed by the offline fake client

Testing

  • pytest tests/test_openai_adapter_contract.py tests/test_openai_adapter_parity.py tests/test_openai_adapter_edges.py -q
  • pytest tests/adapters -q
  • ruff check src/foundry/adapters tests/test_openai_adapter_contract.py tests/test_openai_adapter_parity.py tests/test_openai_adapter_edges.py
  • mypy src/foundry/adapters
  • pytest -q (fails: missing optional dependency pydantic for unrelated IO tests)

Closes #32

https://chatgpt.com/codex/tasks/task_e_68fb01a98ab08322aee133798fb3f068

@github-actions

Copy link
Copy Markdown

Review Brief

Task

Risk

  • Level: high
  • Changed files: 12

Scope

  • tests (4 files)
  • src/foundry/adapters (3 files)
  • src/foundry/runtime (3 files)
  • docs (1 file)
  • scripts/ci (1 file)

Coverage

Coverage report not found. Run pytest with --cov to generate coverage.xml.

API changes

Added functions

  • foundry.adapters.openai_adapter.monotonic_seq: (*, start: int = 0) -> Callable[[], int]
  • foundry.adapters.openai_adapter.stable_ts: (*, origin: datetime = TS_ORIGIN, step: timedelta = TS_STEP) -> Callable[[], datetime]

Added classes

  • foundry.adapters.base.AdapterStreamError (methods: no public methods)
  • foundry.adapters.base.BaseAdapter (methods: stream)
  • foundry.adapters.base.FinalEvent (methods: no public methods)
  • foundry.adapters.base.TokenEvent (methods: no public methods)
  • foundry.adapters.base.ToolCallEvent (methods: no public methods)
  • foundry.adapters.base.ToolResultEvent (methods: no public methods)
  • foundry.adapters.openai_adapter.OpenAIAdapter (methods: stream)

Removed classes

  • foundry.runtime.loop.AgentRuntime (methods: aclose, closed, on_complete, on_event, on_tool)
  • foundry.runtime.loop.SessionTranscript (methods: events, record, replay, states)
  • foundry.runtime.state.AgentState (methods: snapshot)

Contracts

No contract tests changed. High-risk change — run pytest tests/contracts for safety.

Notes

  • ℹ️ coverage.xml not found; coverage section includes guidance.

1 similar comment
@github-actions

Copy link
Copy Markdown

Review Brief

Task

Risk

  • Level: high
  • Changed files: 12

Scope

  • tests (4 files)
  • src/foundry/adapters (3 files)
  • src/foundry/runtime (3 files)
  • docs (1 file)
  • scripts/ci (1 file)

Coverage

Coverage report not found. Run pytest with --cov to generate coverage.xml.

API changes

Added functions

  • foundry.adapters.openai_adapter.monotonic_seq: (*, start: int = 0) -> Callable[[], int]
  • foundry.adapters.openai_adapter.stable_ts: (*, origin: datetime = TS_ORIGIN, step: timedelta = TS_STEP) -> Callable[[], datetime]

Added classes

  • foundry.adapters.base.AdapterStreamError (methods: no public methods)
  • foundry.adapters.base.BaseAdapter (methods: stream)
  • foundry.adapters.base.FinalEvent (methods: no public methods)
  • foundry.adapters.base.TokenEvent (methods: no public methods)
  • foundry.adapters.base.ToolCallEvent (methods: no public methods)
  • foundry.adapters.base.ToolResultEvent (methods: no public methods)
  • foundry.adapters.openai_adapter.OpenAIAdapter (methods: stream)

Removed classes

  • foundry.runtime.loop.AgentRuntime (methods: aclose, closed, on_complete, on_event, on_tool)
  • foundry.runtime.loop.SessionTranscript (methods: events, record, replay, states)
  • foundry.runtime.state.AgentState (methods: snapshot)

Contracts

No contract tests changed. High-risk change — run pytest tests/contracts for safety.

Notes

  • ℹ️ coverage.xml not found; coverage section includes guidance.

@tanaysd
tanaysd merged commit b74264d into main Oct 24, 2025
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TC-06 — Adapter Layer: Canonical Streaming Integration (V2)

1 participant