| 5514 | } |
| 5515 | |
| 5516 | def _new_stream_state(self, plan: Dict[str, Any]) -> ResponseParser.StreamState: |
| 5517 | if plan["kind"] == "json-root": |
| 5518 | return ResponseParser.StreamState( |
| 5519 | kind="json-root", |
| 5520 | pending="", |
| 5521 | mode="prelude", |
| 5522 | current_item=None, |
| 5523 | current_segment=None, |
| 5524 | done=False, |
| 5525 | saw_tool_calls=False, |
| 5526 | parsed={"role": "assistant"}, |
| 5527 | buffer="", |
| 5528 | ) |
| 5529 | if plan.get("direct_deltas"): |
| 5530 | return ResponseParser.StreamState( |
| 5531 | kind="tagged-message", |
| 5532 | pending="", |
| 5533 | mode="assistant-prefix" if plan.get("assistant_prefix") else "prelude", |
| 5534 | current_item=None, |
| 5535 | current_segment=None, |
| 5536 | done=False, |
| 5537 | saw_tool_calls=False, |
| 5538 | tool_call_count=0, |
| 5539 | ) |
| 5540 | if plan["kind"] == "segment-message": |
| 5541 | return ResponseParser.StreamState( |
| 5542 | kind="segment-message", |
| 5543 | pending="", |
| 5544 | mode="segment-start", |
| 5545 | current_item=None, |
| 5546 | current_segment=None, |
| 5547 | done=False, |
| 5548 | saw_tool_calls=False, |
| 5549 | parsed={"role": "assistant"}, |
| 5550 | ) |
| 5551 | return ResponseParser.StreamState( |
| 5552 | kind="tagged-message", |
| 5553 | pending="", |
| 5554 | mode="assistant-prefix" if plan.get("assistant_prefix") else "prelude", |
| 5555 | current_item=None, |
| 5556 | current_segment=None, |
| 5557 | done=False, |
| 5558 | saw_tool_calls=False, |
| 5559 | parsed={"role": "assistant"}, |
| 5560 | ) |
| 5561 | |
| 5562 | def _start_direct_tool_call(self, tool_call_index: int) -> None: |
| 5563 | self._item.pending = "" |