Skip to content

finding: DataBlock is refused on input, so structured context has no typed form #226

Description

@sagi5060

What

DataBlock is the content block that exists to carry JSON. The openai-agents engine refuses it
as input:

ConfigError: openai-agents engine cannot send a 'data' block to the model;
it accepts text, image, and audio (chat-completions only) input blocks

Reproduced at ca03ae8 (v3.0.0):

payload = [DataBlock(data={"page": "reference/deck"}), TextBlock(text="what page am I on?")]
await deck.run("AskAgentDeck", payload, context=corpus)   # raises

Raised from adapters/engines/openai_agents/engine.py:271 (_part_of). ResourceBlock takes
the same path.

Why it matters

DataBlock is an output block in practice — the engine produces one for structured output and
refuses one on input — but nothing says so. The consequence showed up building the v3 reference
app (#219): the natural, typed way to hand a model structured per-run context does not exist, so
every embedded application invents its own prose preamble. Ask AgentDeck's is
<context>…</context> in examples/ask-agentdeck/ask_agentdeck/server.py. No two applications
will agree on a format, and each one re-solves delimiter injection from scratch.

reference/deck.mdx lists all five block types under What input accepts and qualifies it a
paragraph later. Accurate, but it reads as an afterthought for something that is closer to a
type error.

Two directions, neither chosen here

  • The engine renders a DataBlock as JSON text rather than refusing it — cheap, and arguably
    what a caller means.
  • The block table states plainly which types are input-capable, and the docs stop implying
    symmetry the content model does not have.

Version anchor

dev at ca03ae8, v3.0.0. Recorded in docs/delivery/plan-219-delivery.md §4.

What is not yet known

Whether the LangGraph engine behaves the same way — the reproduction above is openai-agents
only, and a divergence between the two engines on the same block type would be its own finding.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions