Skip to content

Epic: Pillar 1 — governed model access through the Omni Gateway LLM proxy #2

Closed as not planned

Description

@amirkhan-ak-sf

Summary

Pillar 1 makes the Omni Gateway LLM proxy a drop-in model provider for eight
agent frameworks, so a developer keeps their framework and their IDE and gains
governed, attributed model access. This is the pillar whose platform contract is
live-verified, and the one that is useful on its own — build plan §9.1 says
ship M1 publicly rather than waiting for Pillars 2–3.

The one design rule (§3.1)

Adapters return native framework objects. donkey.langgraph.chat_model("gpt-4o")
returns a real ChatOpenAI, not a FabricChatModel wrapper. Consequences,
all deliberate:

  • zero surface area to maintain when a framework adds features
  • users keep structured output, streaming, caching, callbacks with no gaps
  • if the SDK is abandoned, user code degrades to three lines of manual config
  • the cost — no cross-framework portability of agent code — is accepted;
    portability was never the ask

Child issues

Core foundation — config, auth, transport, error taxonomy, telemetry, cache.
All built; core is framework-free and enforced by import-linter in CI.

LLM surface — donkey.llm.client() (async + blocking overloads),
resolve() / ModelHandle, honest list_models(), token-usage surfacing.

Eight framework adapters — one issue each, covering the factory, the
connection_kwargs() accessor, the module-level factory, header/transport
injection fidelity, and the TypeScript equivalent where one exists.

Header injection fidelity, per framework

The differentiator is that every governed value is injected in one place
(§2.3, core/transport.py). Frameworks differ in how much of it they accept:

Framework default_headers Our httpx client Correlation ID
LangGraph yes yes (http_async_client) per-run
OpenAI Agents SDK yes yes (we build the AsyncOpenAI) per-run
Anthropic SDK yes yes per-run
Strands yes (client_args) yes (client_args) per-run
Agent Framework yes yes per-run
LlamaIndex yes no per-client
Google ADK via LiteLLM extra_headers no — LiteLLM owns transport per-client
CrewAI via LiteLLM extra_headers no — LiteLLM owns transport per-client

ADK and CrewAI record an asserted, documented exemption for
correlation_id_propagated in the conformance kit's KNOWN_LIMITATIONS, never a
silent skip (§8.1).

Acceptance criteria

  • All eight adapters signature-verified against installed packages (§8)
  • Each passes the conformance kit or carries an asserted exemption
  • Each has a runnable examples/<framework>/ needing only env vars
  • Each has a docs page showing the manual equivalent, so users can eject (§9.2)
  • Each is listed in the nightly matrix with a version floor and no ceiling
  • 0.1.0 tagged once the Tier-1 four are green and §0.4 support statement is resolved

References

  • Build plan §3, §9.1 (M1), §9.2 (DoD per adapter)
  • python/src/donkey_kit/llm/, python/src/donkey_kit/integrations/
  • docs/m1-completion-checklist.md

Activity

  1. amirkhan-ak-sf commented on Sep 4, 2026

    @amirkhan-ak-sf
    CollaboratorAuthor

    Closing as superseded by the phase-based backlog rebuild.

    'Epic: Pillar 1' — the three-pillar framing is replaced by the phase model. Superseded by the new Phase 1 epic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking issue spanning several child issues

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions