mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-23 07:12:21 +02:00
Recognize explicit link instructions and expose tool latency in search audit
This commit is contained in:
@@ -82,6 +82,9 @@ async function send(page, prompt) {
|
|||||||
const observation = {
|
const observation = {
|
||||||
prompt, seconds: (performance.now() - started) / 1000,
|
prompt, seconds: (performance.now() - started) / 1000,
|
||||||
rounds: metrics?.agent_rounds ?? null,
|
rounds: metrics?.agent_rounds ?? null,
|
||||||
|
tool_execution_timings: metrics?.tool_execution_timings || [],
|
||||||
|
runtime_seconds: metrics?.response_time ?? null,
|
||||||
|
output_tokens: metrics?.output_tokens ?? null,
|
||||||
actual_model: metrics?.model ?? null,
|
actual_model: metrics?.model ?? null,
|
||||||
selection_mode: contract?.selection_mode ?? null,
|
selection_mode: contract?.selection_mode ?? null,
|
||||||
policy_decisions: metrics?.policy_decisions || [],
|
policy_decisions: metrics?.policy_decisions || [],
|
||||||
|
|||||||
@@ -3251,6 +3251,7 @@ def requested_web_source_links(user_text):
|
|||||||
r'|\b(?:\d+|one|two|three|four|five)\s+(?:official\s+)?(?:source\s+)?links?\b'
|
r'|\b(?:\d+|one|two|three|four|five)\s+(?:official\s+)?(?:source\s+)?links?\b'
|
||||||
r'|\bofficial\s+source\b'
|
r'|\bofficial\s+source\b'
|
||||||
r'|\b(?:with|include|provide|cite|show|give|find)\s+(?:the\s+)?(?:official\s+)?(?:sources|citations)\b'
|
r'|\b(?:with|include|provide|cite|show|give|find)\s+(?:the\s+)?(?:official\s+)?(?:sources|citations)\b'
|
||||||
|
r'|\blink\s+(?:to\s+)?(?:the\s+|your\s+)?(?:original\s+|official\s+)?(?:instructions|sources|documentation|articles?|reports?|studies|manuals?|guides?)\b'
|
||||||
r'|\b(?:find|locate|get|download)\b.{0,60}\bofficial\b.{0,60}\b(?:manual|guide|handbook|pdf|documentation)\b'
|
r'|\b(?:find|locate|get|download)\b.{0,60}\bofficial\b.{0,60}\b(?:manual|guide|handbook|pdf|documentation)\b'
|
||||||
r'|\b(?:find|locate|get|download)\b.{0,80}\b(?:manual|guide|handbook|pdf)\b.{0,40}\b(?:online|official)\b',
|
r'|\b(?:find|locate|get|download)\b.{0,80}\b(?:manual|guide|handbook|pdf)\b.{0,40}\b(?:online|official)\b',
|
||||||
str(user_text or ''),
|
str(user_text or ''),
|
||||||
@@ -3798,6 +3799,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
|||||||
if is_odysseus_merged_tools_model(model):
|
if is_odysseus_merged_tools_model(model):
|
||||||
temperature = 0.0
|
temperature = 0.0
|
||||||
started = time.monotonic()
|
started = time.monotonic()
|
||||||
|
tool_execution_timings = []
|
||||||
model_choice_experiment = getattr(turn_contract, 'routing_experiment', 'baseline') != 'baseline'
|
model_choice_experiment = getattr(turn_contract, 'routing_experiment', 'baseline') != 'baseline'
|
||||||
direct_user_text = next(
|
direct_user_text = next(
|
||||||
(_conversation_user_text(m.get('content', '')) for m in reversed(messages)
|
(_conversation_user_text(m.get('content', '')) for m in reversed(messages)
|
||||||
@@ -4871,6 +4873,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
|||||||
else:
|
else:
|
||||||
from src.tool_routing_experiment import note_fixture_scope
|
from src.tool_routing_experiment import note_fixture_scope
|
||||||
fixture_token = note_fixture_scope.set(experiment_fixture_ids or None)
|
fixture_token = note_fixture_scope.set(experiment_fixture_ids or None)
|
||||||
|
tool_started = time.monotonic()
|
||||||
try:
|
try:
|
||||||
execution_attempted = True
|
execution_attempted = True
|
||||||
desc, result = await execute_tool_block(
|
desc, result = await execute_tool_block(
|
||||||
@@ -4886,6 +4889,10 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
|||||||
):
|
):
|
||||||
result = ui_toggle_state_result(client_runtime_context)
|
result = ui_toggle_state_result(client_runtime_context)
|
||||||
finally:
|
finally:
|
||||||
|
tool_execution_timings.append({
|
||||||
|
'tool': canonical(block.tool_type), 'round': round_number,
|
||||||
|
'seconds': round(time.monotonic() - tool_started, 3),
|
||||||
|
})
|
||||||
note_fixture_scope.reset(fixture_token)
|
note_fixture_scope.reset(fixture_token)
|
||||||
if (tool_type == 'private_browser'
|
if (tool_type == 'private_browser'
|
||||||
and not (result or {}).get('blocked')
|
and not (result or {}).get('blocked')
|
||||||
@@ -5692,6 +5699,7 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac
|
|||||||
'temperature': temperature,
|
'temperature': temperature,
|
||||||
'max_output_tokens': request_max_tokens,
|
'max_output_tokens': request_max_tokens,
|
||||||
'tool_calls': calls,
|
'tool_calls': calls,
|
||||||
|
'tool_execution_timings': tool_execution_timings,
|
||||||
'tool_events': executions, 'clean_v3_turn': text_only_clean_trace(history[initial_length:]),
|
'tool_events': executions, 'clean_v3_turn': text_only_clean_trace(history[initial_length:]),
|
||||||
'policy_decisions': policy_decisions,
|
'policy_decisions': policy_decisions,
|
||||||
'schema_mode': 'compact_contract_v5', 'clean_v3_preview': True,
|
'schema_mode': 'compact_contract_v5', 'clean_v3_preview': True,
|
||||||
|
|||||||
@@ -4,6 +4,22 @@ import json
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('prompt', [
|
||||||
|
'Explain the settings and link the instructions, not just the homepage.',
|
||||||
|
'Can you link to the original studies?',
|
||||||
|
'Summarize this and link your sources.',
|
||||||
|
])
|
||||||
|
def test_link_as_a_verb_requests_source_completion(prompt):
|
||||||
|
from src.clean_agent_preview import requested_web_source_links
|
||||||
|
assert requested_web_source_links(prompt)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('prompt', ['Link my calendar to email', 'Explain linked lists', 'What is a network link?'])
|
||||||
|
def test_non_source_link_intent_does_not_require_citations(prompt):
|
||||||
|
from src.clean_agent_preview import requested_web_source_links
|
||||||
|
assert not requested_web_source_links(prompt)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('prompt', [
|
@pytest.mark.parametrize('prompt', [
|
||||||
'fix spelling: i recieved the calender invte',
|
'fix spelling: i recieved the calender invte',
|
||||||
'fix typos only: serch teh web for latset ai neews',
|
'fix typos only: serch teh web for latset ai neews',
|
||||||
|
|||||||
Reference in New Issue
Block a user