Skip to content

Codex-Authenticated Models

Codex Responses provides model access inside a framework adapter. This is different from Codex App Server, which runs an agent harness. Choosing a model route does not switch the surrounding agent framework.

Codex Responses Connections

The factory signature is codex_responses_model(model_id, adapter, *, connection="http", fallback="error", transport_observer=None). adapter must be "pydantic" or "langchain". The identifier may include the codex/ prefix. fallback="http" is valid only with WebSocket. transport_observer receives content-free transport events. The helper reads existing Codex login credentials; KEDI_CODEX_AUTH_FILE selects an explicit auth file. Do not include that file in source, logs, or published examples.

codex_responses_model() builds a Codex-authenticated Pydantic model. HTTP is the default. Install kedi[codex-model] on Python 3.11 or newer for the pinned codex-auth-helper[websocket]==1.8.0. Select WebSocket explicitly; it is not enabled just by installing the extra.

from kedi import codex_responses_model
from kedi.agent_adapter import PydanticAdapter

model = codex_responses_model(
    "gpt-5.6-luna",
    adapter="pydantic",
    connection="websocket",
    fallback="error",
)
adapter = PydanticAdapter(model)

async def review():
    async with adapter.responses_session():
        first = await adapter.run("The current release is amber. Acknowledge it.")
        second = await adapter.run(
            "Which release is current?",
            message_history=first.all_messages(),
        )
    return second.output

An ordinary adapter run keeps its connection across model/tool turns. The explicit session above also retains it across sequential adapter calls. It owns the connection, not the history: supply native message history as shown or use Kedi's normal stateful-history surface. Concurrent child tasks remain isolated, and exit, errors, and cancellation clean up the connection.

Updated helper builds scope a separate routing turn to every adapter run. HTTP and WebSocket echo the first server-provided x-codex-turn-state within its tool loop, but discard it before the next run, even on a shared connection. Kedi does not put this opaque value in history or transport metrics. Prompt-cache keys and native history remain unchanged; provider cache hits are not guaranteed.

Auth recovery reloads same-account credentials after an explicit 401, then allows one refresh if necessary. Account changes require a new client; permanent auth failures and exhausted 401s do not trigger HTTP fallback. Same-file refresh locking is in-process only. Older helper builds work without the new turn-state feature.

Append-only requests can transmit only their new suffix. History edits or changed request settings reset continuation. If the socket is already known to be closed before the next request, a new connection receives full history. Changing handshake headers also replaces the connection.

With helper 1.8.0, non-streaming model requests recover transient WebSocket send/receive failures by discarding incomplete output and rebuilding full history on a new connection. Completed local tools are not rerun by recovery. The client max_retries controls reconnects (default two), with bounded backoff. fallback="http" permits HTTP after retries are exhausted, as well as initial-handshake fallback. The model can still choose another tool call, and lost provider work may incur unreported cost.

Raw client calls and exposed streams are not replayed; cancellation, permanent auth/permission failures and provider-hosted tools also prevent response replay. Install the pinned helper with uv add 'kedi[codex-model]'. Stream consumers can stop on response.completed without discarding the completed response; stopping before completion abandons it. The closing handshake has a 250 ms timeout, separate from generation and tool execution.

Connection reuse can improve provider cache reads, but does not guarantee a particular hit rate or lower latency. Cached input is part of total input, not an additional token count.