Skip to main content

OpenAI-compatible transport for Axio

Project description

axio-transport-openai

PyPI Python License: MIT

OpenAI-compatible streaming transport for axio.

Works with any API that speaks the OpenAI chat completions format — OpenAI itself, Azure OpenAI, local models via Ollama/vLLM/LM Studio, and compatible cloud providers.

Features

  • Full SSE streaming — parses data: chunks incrementally; no waiting for full responses
  • Automatic retry — configurable backoff on transient HTTP errors
  • Tool calling — streams tool-use JSON fragments as ToolInputDelta events
  • aiohttp-based — zero blocking I/O
  • Optional TUI settings screen — install with [tui] extra for a Textual configuration UI

Installation

pip install axio-transport-openai

With TUI settings screen:

pip install "axio-transport-openai[tui]"

Usage

from axio.agent import Agent
from axio.context import MemoryContextStore
from axio_transport_openai import OpenAITransport, OPENAI_MODELS

transport = OpenAITransport(
    api_key="sk-...",
    model=OPENAI_MODELS["gpt-4o-mini"],
    base_url="https://api.openai.com/v1",  # default; override for local models
)

agent = Agent(system="You are a helpful assistant.", tools=[], transport=transport)

async def main() -> None:
    ctx = MemoryContextStore()
    result = await agent.run("What is 2 + 2?", ctx)
    print(result)

Local models (Ollama, vLLM, LM Studio)

from axio.models import ModelSpec, Capability

transport = OpenAITransport(
    api_key="ollama",                        # any non-empty string
    model=ModelSpec(id="llama3.2", capabilities=frozenset({Capability.text})),
    base_url="http://localhost:11434/v1",
)

Streaming events

import asyncio
from axio.agent import Agent
from axio.context import MemoryContextStore
from axio.testing import StubTransport, make_text_response
from axio.events import TextDelta, SessionEndEvent

agent = Agent(
    system="",
    tools=[],
    transport=StubTransport([make_text_response("Why did the chicken cross the road?")]),
)

async def main() -> None:
    ctx = MemoryContextStore()
    async for event in agent.run_stream("Tell me a joke", ctx):
        match event:
            case TextDelta(delta=text):
                print(text, end="", flush=True)
            case SessionEndEvent(total_usage=usage):
                print(f"\n[{usage.input_tokens}in / {usage.output_tokens}out tokens]")

asyncio.run(main())

Plugin registration

When installed, this package registers itself via entry points so axio-tui discovers it automatically:

[project.entry-points."axio.transport"]
openai = "axio_transport_openai:OpenAITransport"

Part of the axio ecosystem

axio · axio-transport-codex · axio-tui

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

axio_transport_openai-0.5.0.tar.gz (99.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

axio_transport_openai-0.5.0-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file axio_transport_openai-0.5.0.tar.gz.

File metadata

  • Download URL: axio_transport_openai-0.5.0.tar.gz
  • Upload date:
  • Size: 99.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for axio_transport_openai-0.5.0.tar.gz
Algorithm Hash digest
SHA256 96df5df7898576a1dff693006a684320a105f29ffda5633a1da86ca8ea20f0d0
MD5 a6c22b2a2cf19da1c6181635d3cc6066
BLAKE2b-256 719f0e09b1d3a87ee71c082b587548be3aecffd96dbd97b37d22f2f11d536636

See more details on using hashes here.

Provenance

The following attestation bundles were made for axio_transport_openai-0.5.0.tar.gz:

Publisher: publish.yml on axio-agent/monorepo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file axio_transport_openai-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for axio_transport_openai-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 375bcb263ff7c9766a6a39e56b3f01f21d2d594d92c60a1ac87b58b876a319c0
MD5 11b8d6d6c66a7f3778bdd1a0275a1cd2
BLAKE2b-256 df964726654cb56ff7f303808923ab87e504801ff9eb3a4d68fd8978f4172aab

See more details on using hashes here.

Provenance

The following attestation bundles were made for axio_transport_openai-0.5.0-py3-none-any.whl:

Publisher: publish.yml on axio-agent/monorepo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page