mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 02:05:22 -04:00
Chat: route image sessions only to matching image endpoints
Co-authored-by: ghreprimand <203024559+ghreprimand@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import json
|
||||
from types import SimpleNamespace
|
||||
|
||||
from routes import chat_routes
|
||||
|
||||
|
||||
class _FakeQuery:
|
||||
def __init__(self, rows):
|
||||
self.rows = rows
|
||||
|
||||
def filter(self, *conditions):
|
||||
return self
|
||||
|
||||
def all(self):
|
||||
return list(self.rows)
|
||||
|
||||
|
||||
class _FakeDb:
|
||||
def __init__(self, rows):
|
||||
self.rows = rows
|
||||
self.closed = False
|
||||
|
||||
def query(self, model):
|
||||
return _FakeQuery(self.rows)
|
||||
|
||||
def close(self):
|
||||
self.closed = True
|
||||
|
||||
|
||||
def _session(model="qwen3.5:latest", endpoint_url="http://localhost:11434/v1/chat/completions"):
|
||||
return SimpleNamespace(model=model, endpoint_url=endpoint_url)
|
||||
|
||||
|
||||
def _endpoint(base_url, model_type="image", models=None):
|
||||
cached_models = None if models is None else json.dumps(models)
|
||||
return SimpleNamespace(
|
||||
base_url=base_url,
|
||||
model_type=model_type,
|
||||
is_enabled=True,
|
||||
cached_models=cached_models,
|
||||
)
|
||||
|
||||
|
||||
def test_image_model_prefix_routes_to_image_generation_without_endpoint_lookup(monkeypatch):
|
||||
def fail_if_called():
|
||||
raise AssertionError("prefixed image models should not need a DB lookup")
|
||||
|
||||
monkeypatch.setattr(chat_routes, "SessionLocal", fail_if_called)
|
||||
|
||||
assert chat_routes._is_image_generation_session(_session(model="dall-e-3"))
|
||||
|
||||
|
||||
def test_image_endpoint_does_not_catch_text_model_on_different_path(monkeypatch):
|
||||
db = _FakeDb([
|
||||
_endpoint("http://localhost:11434/v1/images", models=["sdxl-local"]),
|
||||
])
|
||||
monkeypatch.setattr(chat_routes, "SessionLocal", lambda: db)
|
||||
|
||||
assert not chat_routes._is_image_generation_session(_session())
|
||||
assert db.closed
|
||||
|
||||
|
||||
def test_image_endpoint_cache_must_contain_selected_model(monkeypatch):
|
||||
db = _FakeDb([
|
||||
_endpoint("http://localhost:11434/v1", models=["sdxl-local"]),
|
||||
])
|
||||
monkeypatch.setattr(chat_routes, "SessionLocal", lambda: db)
|
||||
|
||||
assert not chat_routes._is_image_generation_session(_session(model="qwen3.5:latest"))
|
||||
|
||||
|
||||
def test_matching_image_endpoint_routes_selected_image_model(monkeypatch):
|
||||
db = _FakeDb([
|
||||
_endpoint("http://localhost:11434/v1", models=["sdxl-local"]),
|
||||
])
|
||||
monkeypatch.setattr(chat_routes, "SessionLocal", lambda: db)
|
||||
|
||||
assert chat_routes._is_image_generation_session(_session(model="sdxl-local"))
|
||||
Reference in New Issue
Block a user