v0.5.2
What's Changed
Fixed
- Streaming round-trip event inflation (#157): Fixed multiple scenarios where
Provider A → IR → Provider Bstreaming conversion produced more output events than input events:- OpenAI Chat, Anthropic, and Google GenAI converters emitted redundant
content_block_endevents when no content block was open - Google GenAI compound chunks (text + finish in the same SSE frame) triggered duplicate text and finish events. Deferred via
StreamContext.pending_text/pending_finish - Tool call events generated spurious
content_block_start/content_block_endwrappers in non-Anthropic targets
- OpenAI Chat, Anthropic, and Google GenAI converters emitted redundant
Refactored
- Unified
stream_response_to_providerdispatch (#73, #157): Extracted identical dispatch logic (10-entry_TO_P_DISPATCHtable + dispatch skeleton) from all 4 provider converters intoBaseConverter. Each converter now only implements a provider-specific_post_process_to_providerhook StreamContextbuffer convenience methods: Addedbuffer_usage()/pop_pending_usage()/buffer_finish()/pop_pending_finish()to replace manual set-and-clear patterns
Changed
- Pinned dev tooling versions:
ty>=0.0.31andruff>=0.15.0inpyproject.tomldev dependencies. CI uses versions frompip install -e ".[all]" - Converter tests added to CI:
tests/converters/(1086+ tests) now runs in GitHub Actions - Roundtrip inflation regression test: New pytest-parametrized test suite (15 cases) verifies
len(output_events) <= len(input_events)for all 4 providers
Full Changelog: v0.5.1...v0.5.2