[真实流程命令]:完成完整链路自测入口,包含真实Provider CLI、播放验收和文档测试

This commit is contained in:
mkbk
2026-06-17 23:57:24 +08:00
parent b2822dc1af
commit b9b501cf74
9 changed files with 462 additions and 3 deletions
+24
View File
@@ -13,6 +13,7 @@ from .conversation import ConversationContext
from .llm import MockLlmProvider, OpenAICompatibleLlmProvider
from .models import AudioFrame, ProviderError
from .pipeline import VoicePipeline
from .real_live_check import run_real_live_check
from .runtime import build_live_runtime
from .simulation import run_simulated_live
from .speech_models import check_speech_models, model_status_errors
@@ -40,6 +41,12 @@ def main(argv: list[str] | None = None) -> int:
simulate.add_argument("--turns", type=int, default=2, help="Number of simulated turns. Default: 2")
simulate.add_argument("--fixture", default=None, help="Replay simulated microphone frames from JSONL")
simulate.add_argument("--write-fixture", default=None, help="Write generated simulated microphone frames to JSONL")
real_check = subparsers.add_parser("real-live-check", help="Run generated-audio live check with real providers")
real_check.add_argument("--turns", type=int, default=2, help="Number of generated live turns. Default: 2")
real_check.add_argument("--voice", default="Tingting", help="macOS say voice used for generated microphone input")
real_check.add_argument("--wake-text", default="小杰小杰。", help="Generated wake utterance")
real_check.add_argument("--question", action="append", default=None, help="Generated user question; can be repeated")
real_check.add_argument("--no-playback", action="store_true", help="Synthesize but do not play generated TTS output")
smoke = subparsers.add_parser("llm-smoke", help="Call configured OpenAI/NewAPI endpoint")
smoke.add_argument("--message", default="用一句中文回复:小杰在线。")
smoke.add_argument("--no-stream", action="store_true")
@@ -159,6 +166,23 @@ def main(argv: list[str] | None = None) -> int:
print(json.dumps(data, ensure_ascii=False, sort_keys=True))
return 0 if data["success"] else 1
if args.command == "real-live-check":
config = AppConfig.from_dotenv(args.env_file)
try:
data = run_real_live_check(
config=config,
turns=args.turns,
voice=args.voice,
wake_text=args.wake_text,
questions=args.question,
play_audio=not args.no_playback,
)
except (ProviderError, ValueError) as exc:
print(json.dumps({"success": False, "error": str(exc)}, ensure_ascii=False, sort_keys=True))
return 1
print(json.dumps(data, ensure_ascii=False, sort_keys=True))
return 0 if data["success"] else 1
if args.command == "acceptance":
result = run_acceptance()
print(json.dumps(result, ensure_ascii=False, sort_keys=True))