Localize the web console and persist custom model and capability settings. Use OpenAI Responses exclusively and move runtime limits into environment configuration. Bootstrap uv and the virtual environment on Windows, support optional China mirrors, and package source distributions without environments, build output, or credentials. Update regression tests and repository quality checks for the new behavior.
115 lines
3.2 KiB
Python
115 lines
3.2 KiB
Python
import json
|
|
|
|
from apps.admin_console.database.repositories.step_repository import StepRepository
|
|
|
|
|
|
def test_legacy_pause_log_is_normalized_to_failed_llm_trace():
|
|
repository = StepRepository()
|
|
trace = {
|
|
"trace_id": "pause-log",
|
|
"type": "log",
|
|
"name": "artemis.services.llm",
|
|
"status": "success",
|
|
"payload": json.dumps(
|
|
{
|
|
"message": (
|
|
"LLM Error: 503 UNAVAILABLE. {'error': {'message': 'High demand'}}. "
|
|
"Pausing execution to wait for resume signal..."
|
|
)
|
|
}
|
|
),
|
|
}
|
|
|
|
normalized = repository._normalize_display_trace(trace)
|
|
|
|
assert normalized["type"] == "llm_call"
|
|
assert normalized["name"] == "llm_pause"
|
|
assert normalized["status"] == "failed"
|
|
assert normalized["payload"]["pause"] is True
|
|
assert normalized["payload"]["error"].startswith("503 UNAVAILABLE")
|
|
|
|
|
|
def test_unrelated_log_is_not_presented_as_llm_failure():
|
|
repository = StepRepository()
|
|
trace = {
|
|
"trace_id": "ordinary-log",
|
|
"type": "log",
|
|
"name": "artemis.services.llm",
|
|
"status": "success",
|
|
"payload": json.dumps({"message": "LLM request completed"}),
|
|
}
|
|
|
|
normalized = repository._normalize_display_trace(trace)
|
|
|
|
assert normalized["type"] == "log"
|
|
assert normalized["status"] == "success"
|
|
|
|
|
|
def test_retrying_llm_payload_keeps_user_visible_retry_details():
|
|
repository = StepRepository()
|
|
trace = {
|
|
"trace_id": "retry-1",
|
|
"type": "llm_call",
|
|
"name": "llm_retry",
|
|
"status": "retrying",
|
|
"payload": json.dumps(
|
|
{
|
|
"error": "503 UNAVAILABLE: high demand",
|
|
"delay": 1.18,
|
|
"provider": "openai",
|
|
"source": "provider_sdk",
|
|
"recoverable": True,
|
|
"internal_noise": "do not expose",
|
|
}
|
|
),
|
|
}
|
|
|
|
normalized = repository._normalize_display_trace(trace)
|
|
|
|
assert normalized["payload"] == {
|
|
"error": "503 UNAVAILABLE: high demand",
|
|
"delay": 1.18,
|
|
"provider": "openai",
|
|
"source": "provider_sdk",
|
|
"recoverable": True,
|
|
}
|
|
|
|
|
|
def test_terminal_llm_payload_keeps_wait_and_retry_aggregation():
|
|
repository = StepRepository()
|
|
retries = [
|
|
{
|
|
"delay": 5.0,
|
|
"scheduled_at": 100.0,
|
|
"provider": "openai",
|
|
"source": "provider_sdk",
|
|
}
|
|
]
|
|
trace = {
|
|
"type": "llm_call",
|
|
"name": "llm_pause",
|
|
"status": "failed",
|
|
"payload": json.dumps(
|
|
{
|
|
"error": "503 UNAVAILABLE",
|
|
"pause": True,
|
|
"request_id": "request-1",
|
|
"provider": "openai",
|
|
"waited_seconds": 18.5,
|
|
"retries": retries,
|
|
"messages": ["private prompt"],
|
|
}
|
|
),
|
|
}
|
|
|
|
normalized = repository._normalize_display_trace(trace)
|
|
|
|
assert normalized["payload"] == {
|
|
"error": "503 UNAVAILABLE",
|
|
"provider": "openai",
|
|
"pause": True,
|
|
"request_id": "request-1",
|
|
"waited_seconds": 18.5,
|
|
"retries": retries,
|
|
}
|