mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-19 05:12:19 +02:00
fix(ci): restore dev pytest baseline (#6704)
* chore(ci): initialize dev pytest baseline repair * fix(ci): restore utility compaction tests and CSS snapshot
This commit is contained in:
@@ -989,6 +989,7 @@ a.chat-link[href^="#research-"] {
|
|||||||
.settings-row {
|
.settings-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
}
|
}
|
||||||
.settings-col {
|
.settings-col {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -997,7 +998,7 @@ a.chat-link[href^="#research-"] {
|
|||||||
}
|
}
|
||||||
.settings-label {
|
.settings-label {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
min-width: 85px;
|
min-width: 70px;
|
||||||
}
|
}
|
||||||
#set-utilityEffortLabel { flex: 0 0 85px; line-height: 1.2; }
|
#set-utilityEffortLabel { flex: 0 0 85px; line-height: 1.2; }
|
||||||
.settings-label-sub {
|
.settings-label-sub {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import ast
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
@@ -8,11 +9,42 @@ def _src(path: str) -> str:
|
|||||||
return (ROOT / path).read_text(encoding="utf-8")
|
return (ROOT / path).read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def _utility_kwargs(source: str, function_name: str) -> dict:
|
||||||
|
tree = ast.parse(source)
|
||||||
|
|
||||||
|
functions = [
|
||||||
|
node for node in ast.walk(tree)
|
||||||
|
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef))
|
||||||
|
and node.name == function_name
|
||||||
|
]
|
||||||
|
assert len(functions) == 1, function_name
|
||||||
|
|
||||||
|
calls = [
|
||||||
|
node for node in ast.walk(functions[0])
|
||||||
|
if isinstance(node, ast.Call)
|
||||||
|
and isinstance(node.func, ast.Name)
|
||||||
|
and node.func.id == "resolve_endpoint"
|
||||||
|
and node.args
|
||||||
|
and isinstance(node.args[0], ast.Constant)
|
||||||
|
and node.args[0].value == "utility"
|
||||||
|
]
|
||||||
|
assert len(calls) == 1, function_name
|
||||||
|
|
||||||
|
return {
|
||||||
|
kw.arg: ast.unparse(kw.value)
|
||||||
|
for kw in calls[0].keywords
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_registered_manual_compaction_uses_session_owner_for_utility_endpoint():
|
def test_registered_manual_compaction_uses_session_owner_for_utility_endpoint():
|
||||||
session_src = _src("routes/session_routes.py")
|
session_src = _src("routes/session_routes.py")
|
||||||
|
|
||||||
assert 'owner = getattr(session, "owner", None) or effective_user(request)' in session_src
|
assert 'owner = getattr(session, "owner", None) or effective_user(request)' in session_src
|
||||||
assert 'resolve_endpoint("utility", owner=owner)' in session_src
|
kwargs = _utility_kwargs(session_src, "compact_session")
|
||||||
|
assert kwargs["owner"] == "owner"
|
||||||
|
assert kwargs["fallback_url"] == "getattr(session, 'endpoint_url', None)"
|
||||||
|
assert kwargs["fallback_model"] == "getattr(session, 'model', None)"
|
||||||
|
assert kwargs["fallback_headers"] == "getattr(session, 'headers', None)"
|
||||||
|
|
||||||
|
|
||||||
def test_task_name_generation_uses_owner_scoped_session_endpoint():
|
def test_task_name_generation_uses_owner_scoped_session_endpoint():
|
||||||
@@ -31,7 +63,11 @@ def test_auto_compaction_utility_endpoint_keeps_chat_owner():
|
|||||||
|
|
||||||
assert "owner=user" in helper_src
|
assert "owner=user" in helper_src
|
||||||
assert "owner: Optional[str] = None" in compact_src
|
assert "owner: Optional[str] = None" in compact_src
|
||||||
assert 'resolve_endpoint("utility", owner=owner)' in compact_src
|
kwargs = _utility_kwargs(compact_src, "maybe_compact")
|
||||||
|
assert kwargs["owner"] == "owner"
|
||||||
|
assert kwargs["fallback_url"] == "endpoint_url"
|
||||||
|
assert kwargs["fallback_model"] == "model"
|
||||||
|
assert kwargs["fallback_headers"] == "headers"
|
||||||
|
|
||||||
|
|
||||||
def test_background_session_sort_uses_owner_task_endpoint():
|
def test_background_session_sort_uses_owner_task_endpoint():
|
||||||
|
|||||||
@@ -183,7 +183,10 @@ def test_history_and_chat_routes_support_reasoning_effort():
|
|||||||
"""Verify history and chat routes support reasoning_effort and thinking_mode persistence."""
|
"""Verify history and chat routes support reasoning_effort and thinking_mode persistence."""
|
||||||
hist_src = (ROOT / "routes/history/history_routes.py").read_text(encoding="utf-8")
|
hist_src = (ROOT / "routes/history/history_routes.py").read_text(encoding="utf-8")
|
||||||
assert "reasoning_effort" in hist_src
|
assert "reasoning_effort" in hist_src
|
||||||
assert 'mode = f"effort:{clean_effort}"' in hist_src
|
assert "def _effort_mode(" in hist_src
|
||||||
|
assert 'return f"effort:{effort}" if effort else "off"' in hist_src
|
||||||
|
assert "mode = _effort_mode(session.model, raw_effort)" in hist_src
|
||||||
|
assert "mode = _effort_mode(session.model, raw_mode[7:])" in hist_src
|
||||||
|
|
||||||
chat_src = (ROOT / "routes/chat_routes.py").read_text(encoding="utf-8")
|
chat_src = (ROOT / "routes/chat_routes.py").read_text(encoding="utf-8")
|
||||||
assert "validate_reasoning_effort(sess.model, reasoning_effort)" in chat_src
|
assert "validate_reasoning_effort(sess.model, reasoning_effort)" in chat_src
|
||||||
|
|||||||
@@ -311,7 +311,14 @@ class TestMaybeCompactFourthMessage:
|
|||||||
|
|
||||||
cc.get_context_length = lambda url, model: context_length
|
cc.get_context_length = lambda url, model: context_length
|
||||||
cc.llm_call_async = _fake_summary
|
cc.llm_call_async = _fake_summary
|
||||||
cc.resolve_endpoint = lambda which, owner=None: (None, None, None)
|
def fake_resolve_endpoint(which, **kwargs):
|
||||||
|
assert which == "utility"
|
||||||
|
assert kwargs["fallback_url"] == "http://local/v1/chat/completions"
|
||||||
|
assert kwargs["fallback_model"] == "local-model"
|
||||||
|
assert kwargs["fallback_headers"] == {}
|
||||||
|
return None, None, None
|
||||||
|
|
||||||
|
cc.resolve_endpoint = fake_resolve_endpoint
|
||||||
cc._update_session_history = lambda *a, **k: None
|
cc._update_session_history = lambda *a, **k: None
|
||||||
try:
|
try:
|
||||||
return asyncio.run(
|
return asyncio.run(
|
||||||
|
|||||||
@@ -108,8 +108,12 @@ def _compact_prompt_for(monkeypatch, history):
|
|||||||
import src.model_context as model_context
|
import src.model_context as model_context
|
||||||
|
|
||||||
monkeypatch.setattr(agent_runs, "is_active", lambda session_id: False)
|
monkeypatch.setattr(agent_runs, "is_active", lambda session_id: False)
|
||||||
def fake_resolve_endpoint(kind, owner=None):
|
def fake_resolve_endpoint(kind, owner=None, **kwargs):
|
||||||
captured.setdefault("resolve_calls", []).append((kind, owner))
|
captured.setdefault("resolve_calls", []).append((kind, owner))
|
||||||
|
if "fallback_url" in kwargs:
|
||||||
|
captured.setdefault("fallback_calls", []).append(
|
||||||
|
(kind, owner, kwargs)
|
||||||
|
)
|
||||||
return None, None, {}
|
return None, None, {}
|
||||||
|
|
||||||
monkeypatch.setattr(endpoint_resolver, "resolve_endpoint", fake_resolve_endpoint)
|
monkeypatch.setattr(endpoint_resolver, "resolve_endpoint", fake_resolve_endpoint)
|
||||||
@@ -127,6 +131,13 @@ def _compact_prompt_for(monkeypatch, history):
|
|||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert response.json()["status"] == "ok"
|
assert response.json()["status"] == "ok"
|
||||||
assert manager.saved is True
|
assert manager.saved is True
|
||||||
|
assert any(
|
||||||
|
kind == "utility"
|
||||||
|
and kwargs.get("fallback_url") == session.endpoint_url
|
||||||
|
and kwargs.get("fallback_model") == session.model
|
||||||
|
and kwargs.get("fallback_headers") == session.headers
|
||||||
|
for kind, _owner, kwargs in captured.get("fallback_calls", [])
|
||||||
|
)
|
||||||
return captured["messages"][1]["content"]
|
return captured["messages"][1]["content"]
|
||||||
|
|
||||||
|
|
||||||
@@ -151,8 +162,12 @@ def _registered_compact_response(monkeypatch, history, active_run=False):
|
|||||||
import src.llm_core as llm_core
|
import src.llm_core as llm_core
|
||||||
|
|
||||||
monkeypatch.setattr(agent_runs, "is_active", lambda session_id: active_run)
|
monkeypatch.setattr(agent_runs, "is_active", lambda session_id: active_run)
|
||||||
def fake_resolve_endpoint(kind, owner=None):
|
def fake_resolve_endpoint(kind, owner=None, **kwargs):
|
||||||
captured.setdefault("resolve_calls", []).append((kind, owner))
|
captured.setdefault("resolve_calls", []).append((kind, owner))
|
||||||
|
if "fallback_url" in kwargs:
|
||||||
|
captured.setdefault("fallback_calls", []).append(
|
||||||
|
(kind, owner, kwargs)
|
||||||
|
)
|
||||||
return None, None, {}
|
return None, None, {}
|
||||||
|
|
||||||
monkeypatch.setattr(endpoint_resolver, "resolve_endpoint", fake_resolve_endpoint)
|
monkeypatch.setattr(endpoint_resolver, "resolve_endpoint", fake_resolve_endpoint)
|
||||||
@@ -237,6 +252,14 @@ def test_registered_manual_compact_route_uses_session_owner(monkeypatch):
|
|||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert manager.replaced_messages is not None
|
assert manager.replaced_messages is not None
|
||||||
assert ("utility", "session-owner") in captured["resolve_calls"]
|
assert ("utility", "session-owner") in captured["resolve_calls"]
|
||||||
|
assert any(
|
||||||
|
kind == "utility"
|
||||||
|
and owner == "session-owner"
|
||||||
|
and kwargs.get("fallback_url") == manager.session.endpoint_url
|
||||||
|
and kwargs.get("fallback_model") == manager.session.model
|
||||||
|
and kwargs.get("fallback_headers") == manager.session.headers
|
||||||
|
for kind, owner, kwargs in captured.get("fallback_calls", [])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_registered_manual_compact_route_rejects_active_agent_run(monkeypatch):
|
def test_registered_manual_compact_route_rejects_active_agent_run(monkeypatch):
|
||||||
|
|||||||
@@ -36,7 +36,26 @@ def test_task_parse_resolves_with_owner_scope():
|
|||||||
def test_history_compact_resolves_with_owner_scope():
|
def test_history_compact_resolves_with_owner_scope():
|
||||||
body = _function_source("routes/history/history_routes.py", "compact_session")
|
body = _function_source("routes/history/history_routes.py", "compact_session")
|
||||||
assert "owner = effective_user(request)" in body
|
assert "owner = effective_user(request)" in body
|
||||||
assert 'resolve_endpoint("utility", owner=owner or None)' in body
|
tree = ast.parse(body)
|
||||||
|
calls = [
|
||||||
|
node for node in ast.walk(tree)
|
||||||
|
if isinstance(node, ast.Call)
|
||||||
|
and isinstance(node.func, ast.Name)
|
||||||
|
and node.func.id == "resolve_endpoint"
|
||||||
|
and node.args
|
||||||
|
and isinstance(node.args[0], ast.Constant)
|
||||||
|
and node.args[0].value == "utility"
|
||||||
|
]
|
||||||
|
assert len(calls) == 1
|
||||||
|
|
||||||
|
kwargs = {
|
||||||
|
kw.arg: ast.unparse(kw.value)
|
||||||
|
for kw in calls[0].keywords
|
||||||
|
}
|
||||||
|
assert kwargs["owner"] == "owner or None"
|
||||||
|
assert kwargs["fallback_url"] == "getattr(session, 'endpoint_url', None)"
|
||||||
|
assert kwargs["fallback_model"] == "getattr(session, 'model', None)"
|
||||||
|
assert kwargs["fallback_headers"] == "getattr(session, 'headers', None)"
|
||||||
|
|
||||||
|
|
||||||
def test_note_reminder_synthesis_resolves_with_owner_scope():
|
def test_note_reminder_synthesis_resolves_with_owner_scope():
|
||||||
|
|||||||
Reference in New Issue
Block a user