改用Grok联网搜索并保留每轮信号
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.db.models import AgentRun, Base
|
||||
from app.db.repository import AgentRepository
|
||||
from app.schemas.agent import SignalItem
|
||||
|
||||
|
||||
def test_save_signals_keeps_same_url_across_runs() -> None:
|
||||
# 跨运行保留同一链接,保证每轮日报的实际信号快照不会被历史结果吞掉。
|
||||
engine = create_engine(
|
||||
"sqlite:///:memory:",
|
||||
connect_args={"check_same_thread": False},
|
||||
poolclass=StaticPool,
|
||||
future=True,
|
||||
)
|
||||
Base.metadata.create_all(engine)
|
||||
TestingSessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True)
|
||||
with TestingSessionLocal() as session:
|
||||
repo = AgentRepository(session)
|
||||
first_run = AgentRun(status="running", started_at=datetime(2026, 7, 8), request_payload={})
|
||||
second_run = AgentRun(status="running", started_at=datetime(2026, 7, 8), request_payload={})
|
||||
session.add_all([first_run, second_run])
|
||||
session.flush()
|
||||
item = SignalItem(
|
||||
source_type="news",
|
||||
topic="AI 新闻",
|
||||
title="Same URL",
|
||||
summary="同一个来源链接。",
|
||||
source_url="https://example.com/same",
|
||||
source_name="Example",
|
||||
published_at=datetime(2026, 7, 8),
|
||||
importance=3,
|
||||
entities=["Example"],
|
||||
)
|
||||
|
||||
first_saved = repo.save_signals(first_run, [item])
|
||||
second_saved = repo.save_signals(second_run, [item])
|
||||
|
||||
assert len(first_saved) == 1
|
||||
assert len(second_saved) == 1
|
||||
assert first_saved[0].run_id != second_saved[0].run_id
|
||||
|
||||
|
||||
def test_save_signals_updates_duplicate_url_inside_same_run() -> None:
|
||||
# 同一运行内相同链接只保留一条,避免模型重复输出造成页面重复。
|
||||
engine = create_engine(
|
||||
"sqlite:///:memory:",
|
||||
connect_args={"check_same_thread": False},
|
||||
poolclass=StaticPool,
|
||||
future=True,
|
||||
)
|
||||
Base.metadata.create_all(engine)
|
||||
TestingSessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True)
|
||||
with TestingSessionLocal() as session:
|
||||
repo = AgentRepository(session)
|
||||
run = AgentRun(status="running", started_at=datetime(2026, 7, 8), request_payload={})
|
||||
session.add(run)
|
||||
session.flush()
|
||||
first = SignalItem(
|
||||
source_type="news",
|
||||
topic="AI 新闻",
|
||||
title="First title",
|
||||
summary="第一条摘要。",
|
||||
source_url="https://example.com/same",
|
||||
source_name="Example",
|
||||
published_at=datetime(2026, 7, 8),
|
||||
importance=3,
|
||||
entities=["Example"],
|
||||
)
|
||||
second = first.model_copy(update={"title": "Second title", "importance": 5})
|
||||
|
||||
saved = repo.save_signals(run, [first, second])
|
||||
|
||||
assert len(saved) == 2
|
||||
assert saved[0].id == saved[1].id
|
||||
assert saved[0].title == "Second title"
|
||||
assert saved[0].importance == 5
|
||||
Reference in New Issue
Block a user