Skip to content

Structured output streaming: no way to see the object while it generates #272

Description

@jaygupta17

Problem

With output_type=<pydantic model>, ai.stream() emits text deltas but the parsed object only exists after the stream ends (stream.output). Consumers rendering progressive results — live forms, tables, status panels — cannot show the object taking shape. The TypeScript AI SDK's streamObject() supports this and it's a common expectation coming from that ecosystem (pydantic-ai streams validated partials as well).

Suggested behavior

Emit a PartialOutput event after each text delta that changes the parse of the accumulated JSON, carrying the best-effort partial as a plain dict, plus a Stream.partial_output property for the latest snapshot.

Design notes:

  • partials are deliberately unvalidated dicts — validating incomplete JSON is meaningless; stream.output stays the validated contract
  • parsing uses json_repair with stream_stable=True so truncated values remain verbatim strings instead of being creatively repaired mid-stream
  • agent runs forward model stream events unchanged, so this surfaces through Agent.run for free

Happy to take this one.

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions