#!/usr/bin/env python3 """Pipecat Flows 兼容性回归测试(Phase 1 spike 的断言版)。 对应交接文档 §九 Phase 1 的 7 项验证。**需要真实 DeepSeek 网络**, 所以和 test_search_live.py 一样属于"现场测试",不进离线回归集。 用法: ~/venvs/ai_assistant/bin/python app/tests/test_flows_spike.py 实现体在 p1/flows_spike.py——那里是探索脚本(带请求体抓取、逐项诊断), 这里只做断言与退出码,便于反复跑和接进 CI。 """ from __future__ import annotations import asyncio import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(ROOT)) # 复用探索脚本里的检查项,避免两处实现漂移 sys.path.insert(0, str(ROOT / "p1")) import flows_spike as spike # noqa: E402 async def main() -> int: print("=" * 64) print("Pipecat Flows 兼容性回归(Phase 1 spike 断言版)") print("=" * 64) results: list[dict] = [] for key, (label, fn) in spike.ITEMS.items(): print(f"\n--- {key}. {label} ---") try: results.extend(await fn()) except Exception as e: # noqa: BLE001 import traceback traceback.print_exc() results.append(spike.check(f"{key}. 执行", False, f"{type(e).__name__}: {e}")) print("\n" + "=" * 64) ok = sum(1 for r in results if r["ok"]) print(f"通过 {ok} / {len(results)}") for r in results: if not r["ok"]: print(f" 未通过: {r['name']} — {r['detail']}") return 0 if ok == len(results) else 1 if __name__ == "__main__": sys.exit(asyncio.run(main()))