Files
odysseus/tests/test_task_endpoint_normalization.py
T

44 lines
1.7 KiB
Python

"""Regression test for the task-path endpoint-URL normalization fix.
Bug: the task executor passed ``task.endpoint_url`` verbatim to the model HTTP
call (unlike the chat path, which normalizes via ``build_chat_url``). A bare
OpenAI-compatible base such as ``http://host:11434/v1`` POSTed to a 404 and the
run silently reported "The model returned an empty response".
The fix routes every resolved task endpoint through ``_normalize_chat_endpoint``.
"""
from src.task_scheduler import _normalize_chat_endpoint
def test_bare_v1_base_gets_chat_completions_suffix():
# The exact failure case: a bare /v1 base must become a full chat URL.
assert (
_normalize_chat_endpoint("http://localhost:11434/v1")
== "http://localhost:11434/v1/chat/completions"
)
def test_full_chat_url_is_unchanged_idempotent():
full = "http://localhost:11434/v1/chat/completions"
assert _normalize_chat_endpoint(full) == full
# Idempotent under repeated application.
assert _normalize_chat_endpoint(_normalize_chat_endpoint(full)) == full
def test_native_ollama_url_left_alone():
# Native Ollama (/api...) has its own downstream normalizer — don't touch it.
assert _normalize_chat_endpoint("http://localhost:11434/api") == "http://localhost:11434/api"
assert _normalize_chat_endpoint("http://localhost:11434/api/chat") == "http://localhost:11434/api/chat"
def test_empty_and_none_are_passthrough():
assert _normalize_chat_endpoint("") == ""
assert _normalize_chat_endpoint(None) is None
def test_trailing_slash_base_normalized():
assert (
_normalize_chat_endpoint("http://localhost:11434/v1/")
== "http://localhost:11434/v1/chat/completions"
)