Files
openswarm/backend/tests/test_metadata.py
T

85 lines
3.2 KiB
Python

"""Pins generate_title (lifted into manager/metadata.py): the no-session guard and
the fallback-to-truncated-prompt path when the aux LLM is unavailable."""
import asyncio
import backend.apps.agents.manager.metadata as md
import backend.apps.agents.providers.registry as registry
from backend.apps.agents.core.models import AgentSession
def test_generate_title_raises_without_session():
try:
asyncio.run(md.generate_title(None, "sid", "hello"))
assert False, "expected ValueError when the session is missing"
except ValueError:
pass
def test_generate_title_falls_back_to_truncated_prompt_when_aux_unavailable(monkeypatch):
sent = []
async def fake_send(session_id, event, data):
sent.append((event, data))
async def boom(*a, **k):
raise RuntimeError("aux model unavailable")
monkeypatch.setattr(md.ws_manager, "send_to_session", fake_send, raising=True)
monkeypatch.setattr(registry, "resolve_aux_model", boom, raising=True)
session = AgentSession(name="x", model="sonnet")
prompt = "Plan me a really long trip to Tokyo with many stops and details everywhere"
title = asyncio.run(md.generate_title(session, "sid", prompt))
assert title == prompt[:40].strip() # fell back to the truncated prompt
assert session.name == title # still labels the session
assert any(e == "agent:name_updated" for e, _ in sent) # and notifies the UI
def test_generate_turn_label_is_silent_on_aux_failure(monkeypatch):
sent = []
async def fake_send(session_id, event, data):
sent.append((event, data))
async def boom(*a, **k):
raise RuntimeError("aux model unavailable")
monkeypatch.setattr(md.ws_manager, "send_to_session", fake_send, raising=True)
monkeypatch.setattr(registry, "resolve_aux_model", boom, raising=True)
session = AgentSession(name="x", model="sonnet")
# best-effort: must NOT raise, and emits no label (the heuristic narrator stands in)
asyncio.run(md.generate_turn_label(session, "sid", "turn-1", "do a thing"))
assert not any(e == "agent:turn_label" for e, _ in sent)
def test_generate_group_meta_raises_without_session():
try:
asyncio.run(md.generate_group_meta(None, "sid", "g1", [{"tool": "Gmail"}]))
assert False, "expected ValueError when the session is missing"
except ValueError:
pass
def test_generate_group_meta_falls_back_to_tool_name_when_aux_unavailable(monkeypatch):
sent = []
async def fake_send(session_id, event, data):
sent.append((event, data))
async def boom(*a, **k):
raise RuntimeError("aux model unavailable")
monkeypatch.setattr(md.ws_manager, "send_to_session", fake_send, raising=True)
monkeypatch.setattr(registry, "resolve_aux_model", boom, raising=True)
session = AgentSession(name="x", model="sonnet")
result = asyncio.run(md.generate_group_meta(session, "sid", "g1", [{"tool": "mcp__gmail__send_email"}]))
assert result["name"] == "Send Email" # fallback: last __ segment, humanized
assert result["svg"] == ""
assert "g1" in session.tool_group_meta # still records the group
assert any(e == "agent:group_meta_updated" for e, _ in sent)