mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 06:52:20 +02:00
buffer rejected search drafts and cap interactive rounds
This commit is contained in:
@@ -1307,11 +1307,11 @@ def native_execution_limits(max_rounds):
|
||||
|
||||
|
||||
def interactive_execution_limit(max_rounds):
|
||||
"""Honor the WebUI agent-step setting for the compact preview loop."""
|
||||
"""Bound interactive turns independently of long-running native jobs."""
|
||||
if max_rounds is None:
|
||||
return INTERACTIVE_ROUND_LIMIT
|
||||
try:
|
||||
return max(1, min(int(max_rounds), 200))
|
||||
return max(1, min(int(max_rounds), INTERACTIVE_ROUND_LIMIT))
|
||||
except (TypeError, ValueError):
|
||||
return INTERACTIVE_ROUND_LIMIT
|
||||
|
||||
@@ -3891,6 +3891,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
||||
official_source_retry_attempted = False
|
||||
note_search_recovery_attempted = False
|
||||
replace_streamed_draft_on_finish = False
|
||||
buffer_completion_drafts = broad_current_web_request(direct_user_text)
|
||||
usage_in = usage_out = 0
|
||||
has_real_usage = False
|
||||
first_request_tokens = last_request_tokens = 0
|
||||
@@ -4108,7 +4109,11 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
||||
if text:
|
||||
first_token = first_token or time.monotonic()
|
||||
content += text
|
||||
if not prior_summary_answer and not progressive_thinking:
|
||||
if (
|
||||
not prior_summary_answer
|
||||
and not progressive_thinking
|
||||
and not buffer_completion_drafts
|
||||
):
|
||||
yield event({'delta': text})
|
||||
for fragment in delta.get('tool_calls') or []:
|
||||
call = pending.setdefault(fragment['index'], {'id': '', 'type': 'function', 'function': {'name': '', 'arguments': ''}})
|
||||
@@ -4118,7 +4123,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
||||
call['function'][key] += (fragment.get('function') or {}).get(key) or ''
|
||||
if progressive_thinking:
|
||||
content = visible_content_after_qwen_thinking(content)
|
||||
if content and not prior_summary_answer:
|
||||
if content and not prior_summary_answer and not buffer_completion_drafts:
|
||||
yield event({'delta': content})
|
||||
proposed = [pending[i] for i in sorted(pending)]
|
||||
proposed = serialize_required_email_attachment_chain(
|
||||
@@ -4377,7 +4382,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
||||
yield event({'delta': suffix})
|
||||
if not content:
|
||||
yield event({'delta': 'The test model returned no answer. No substitute answer was generated.'})
|
||||
elif replace_streamed_draft_on_finish:
|
||||
elif replace_streamed_draft_on_finish or buffer_completion_drafts:
|
||||
yield event({'type': 'final_response', 'content': content})
|
||||
break
|
||||
# Treat a model-proposed call batch atomically for preview
|
||||
|
||||
@@ -312,8 +312,8 @@ def test_native_execution_limits_allow_multi_artifact_work_without_unbounded_rou
|
||||
|
||||
|
||||
def test_compact_preview_honors_configured_interactive_round_limit():
|
||||
assert interactive_execution_limit(100) == 100
|
||||
assert interactive_execution_limit(1000) == 200
|
||||
assert interactive_execution_limit(100) == 8
|
||||
assert interactive_execution_limit(1000) == 8
|
||||
assert interactive_execution_limit(0) == 1
|
||||
assert interactive_execution_limit(None) == 8
|
||||
assert interactive_execution_limit("invalid") == 8
|
||||
@@ -1266,6 +1266,10 @@ async def test_stream_retries_an_obviously_truncated_broad_web_answer(monkeypatc
|
||||
and 'fuller evidence-based briefing' in event.get('content', '')
|
||||
for event in events
|
||||
)
|
||||
assert not any(
|
||||
event.get('delta') == 'Current AI news includes reports about U.'
|
||||
for event in events
|
||||
)
|
||||
|
||||
|
||||
def test_task_renderer_honors_few_and_filters_confirmed_morning_schedule():
|
||||
|
||||
Reference in New Issue
Block a user