56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
"""Which title stage is allowed to spend a platform rename.
|
|
|
|
Titling is two-stage: a derived slice of the user's own words lands inline, and
|
|
the model's version replaces it a moment later. A local sidebar wants both. A
|
|
Discord thread or a Telegram topic wants only the second — renaming twice lands
|
|
on the same name at twice the cost, and Discord allows two channel renames per
|
|
ten minutes, so the throwaway can be the one that survives.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import types
|
|
|
|
import pytest
|
|
|
|
from gateway.config import Platform
|
|
from gateway.run import TurnRunner
|
|
|
|
|
|
def _attach(lane):
|
|
"""Attach the title callback for *lane* and return (callback, renames)."""
|
|
renames: list = []
|
|
source = types.SimpleNamespace(platform=Platform.DISCORD, chat_id="chan-1")
|
|
|
|
runner = types.SimpleNamespace(
|
|
_is_telegram_topic_lane=lambda src: lane == "telegram",
|
|
_is_discord_auto_thread_lane=lambda src: lane == "discord",
|
|
_is_relay_discord_channel_lane=lambda src: False,
|
|
_schedule_telegram_topic_title_rename=(
|
|
lambda src, sid, title: renames.append(title)
|
|
),
|
|
_schedule_discord_semantic_thread_rename=(
|
|
lambda src, sid, title: renames.append(title)
|
|
),
|
|
)
|
|
holder = types.SimpleNamespace(
|
|
_runner=runner,
|
|
_attach_session_title_callback=TurnRunner._attach_session_title_callback,
|
|
)
|
|
agent = types.SimpleNamespace(session_id="sess-1")
|
|
holder._attach_session_title_callback(
|
|
holder, agent, types.SimpleNamespace(source=source)
|
|
)
|
|
return agent._on_session_title, renames
|
|
|
|
|
|
@pytest.mark.parametrize("lane", ["telegram", "discord"])
|
|
def test_the_rename_waits_for_the_model_title(lane):
|
|
callback, renames = _attach(lane)
|
|
|
|
callback("fix the flaky auth test in log", "derived")
|
|
assert renames == []
|
|
|
|
callback("Fix flaky auth test", "llm")
|
|
assert renames == ["Fix flaky auth test"]
|