[依赖、模型和配置]:完成本地语音模型准备,包含.env配置、模型下载脚本和model-check
This commit is contained in:
@@ -12,6 +12,7 @@ from .conversation import ConversationContext
|
||||
from .llm import MockLlmProvider, OpenAICompatibleLlmProvider
|
||||
from .models import AudioFrame, ProviderError
|
||||
from .pipeline import VoicePipeline
|
||||
from .speech_models import check_speech_models, model_status_errors
|
||||
from .stt import MetadataSttProvider
|
||||
from .transport import MemoryAudioTransport
|
||||
from .tts import SineTtsProvider
|
||||
@@ -27,6 +28,8 @@ def main(argv: list[str] | None = None) -> int:
|
||||
subparsers.add_parser("acceptance", help="Run deterministic end-to-end pipeline acceptance")
|
||||
subparsers.add_parser("validate-assets", help="Validate project pet assets")
|
||||
subparsers.add_parser("security-check", help="Scan tracked files for leaked API keys")
|
||||
model_check = subparsers.add_parser("model-check", help="Validate local speech model files")
|
||||
model_check.add_argument("--models-dir", default=None, help="Speech models directory. Defaults to .env or models")
|
||||
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")
|
||||
@@ -46,6 +49,7 @@ def main(argv: list[str] | None = None) -> int:
|
||||
"llm_stream": config.llm_stream,
|
||||
"llm_api_key_present": bool(config.llm_api_key),
|
||||
"asset_dir": str(config.asset_dir),
|
||||
"speech_models_dir": str(config.speech_models_dir),
|
||||
},
|
||||
ensure_ascii=False,
|
||||
sort_keys=True,
|
||||
@@ -63,6 +67,16 @@ def main(argv: list[str] | None = None) -> int:
|
||||
print(json.dumps({"secret_leaks": leaks, "valid": not leaks}, ensure_ascii=False, sort_keys=True))
|
||||
return 1 if leaks else 0
|
||||
|
||||
if args.command == "model-check":
|
||||
config = AppConfig.from_dotenv(args.env_file)
|
||||
models_dir = Path(args.models_dir) if args.models_dir else config.speech_models_dir
|
||||
status = check_speech_models(models_dir, require_sherpa=True)
|
||||
errors = model_status_errors(status)
|
||||
data = status.to_json()
|
||||
data["errors"] = [str(error) for error in errors]
|
||||
print(json.dumps(data, ensure_ascii=False, sort_keys=True))
|
||||
return 1 if errors else 0
|
||||
|
||||
if args.command == "acceptance":
|
||||
result = run_acceptance()
|
||||
print(json.dumps(result, ensure_ascii=False, sort_keys=True))
|
||||
@@ -84,6 +98,7 @@ def main(argv: list[str] | None = None) -> int:
|
||||
audio_output_device=config.audio_output_device,
|
||||
asset_dir=config.asset_dir,
|
||||
log_dir=config.log_dir,
|
||||
speech_models_dir=config.speech_models_dir,
|
||||
context_max_messages=config.context_max_messages,
|
||||
context_max_chars=config.context_max_chars,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user