-
Notifications
You must be signed in to change notification settings - Fork 22
Open
Description
Summary
Add a protocol= parameter to generate()/analyze()/stream() that lets users target any server speaking a known wire protocol (OpenResponses API, Chat Completions API) without pretending it's a named provider.
# Instead of provider="openresponses" (semantically wrong — it's a protocol, not a provider):
await celeste.text.generate("hello", model="my-model", protocol="openresponses", base_url="https://my-server.com")
# Also for Chat Completions-compatible servers:
await celeste.text.generate("hello", model="my-model", protocol="chatcompletions", base_url="https://my-server.com")Motivation
Provider.OPENRESPONSES exists in the enum today but is broken — no register_auth, no registered models, create_client crashes with UnsupportedProviderError. The concept of "any Responses-API-compatible server" is valid but doesn't belong in the Provider enum alongside named providers like openai, anthropic, google.
Protocols are wire formats. Providers are entities you authenticate against. These are different concepts.
Scope
protocol=parameter — Thread through namespace methods,create_client, resolve to the right client class- Move openresponses modality client —
modalities/text/providers/openresponses/→modalities/text/protocols/openresponses/(it's a protocol, not a provider) - Build chatcompletions text-protocol layer —
modalities/text/protocols/chatcompletions/(currently missing — each CC provider reimplements the modality glue) - Fix
base_urlwiring — Currently threaded through signatures but silently discarded at the HTTP layer - Auth handling — Generic protocol usage may need
NoAuthdefault +api_key=override - Remove
Provider.OPENRESPONSESfrom enum (replaced byprotocol="openresponses")
Related
- Discovered during PR feat: unified tools= parameter for tool calling #199 (unified
tools=parameter) — the openresponses move was originally bundled there but separated out due to scope
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels