Skip to content

From an OpenAI client — host surface

A host may expose every agent through the OpenAI chat API, so tools that speak it (Open WebUI, LibreChat, an OpenAI SDK) talk to an agent unchanged. The caller authenticates as themselves, with an API key sent as Authorization: Bearer, and is the speaker. A host should offer agent keys: a key minted for named agents (or any) that talks only to them, reaches nothing else of its owner’s, and lists only them as models — the key to paste into a chat client.

Path Meaning
GET <base>/openai/v1/models The agents the caller can talk to now, each an OpenAI model whose id is the agent’s name.
POST <base>/openai/v1/chat/completions Talk to the agent named in model.
GET/POST <base>/agents/<name>/v1/… The same for one agent, for a client that cannot choose a model. model is ignored.

Standard parameters.

Parameter What the host does
model Names the agent. Never chooses a model: the model is the agent’s conversation.llm role.
messages The client’s whole history. Only the newest user message is a new turn; the conversation is recognised as described below.
stream Answered as server-sent chat.completion.chunk events ending in [DONE]. An agent produces messages rather than tokens, so each message arrives as one chunk.
max_tokens (max_completion_tokens) Honoured within the agent’s sampling bound and capped at it. With no bound declared, the role’s own setting stands and the value is ignored.
temperature Accepted and ignored. Common clients send one on every request; the host sets no sampling temperature.
top_p, stop, seed Passed to the model when the role’s provider supports them; otherwise ignored.
user The client’s end-user id, kept apart in recognising conversations.
tools, tool_choice, response_format Ignored. The agent’s tools are its own, and a caller cannot hand it others.

Embabel parameters, sent as extra fields in the request body. Each narrows; none widens.

Field Meaning
embabel_conversation A conversation id the caller chooses. The same id from two clients is the same conversation. Without it, a conversation is recognised by the caller, the agent, user and the first user message.
embabel_observing true: every effect the agent attempts in this turn is refused and reported, even if it is on duty.
embabel_realms Narrow the conversation to some of the agent’s conversation.realms. A realm outside them is ignored.
embabel_verbosity terse, normal or full: how long an answer the agent gives. It shapes the reply and never changes the agent’s rules.
embabel_evidence true: the response carries an embabel object with the conversation id, the run and the requests the turn raised.

What the flat shape hides. One answer per turn, with no progress or tool activity. A request the agent raises for a person’s approval is named after the answer, with where to approve or reject it: a link to the host’s approvals when the host knows where they are. Nothing is approved from the client.