47e24dbe59
server/services/base.py defines three abstract base classes with type annotations: TTSProvider (async synthesize/synthesize_all, voice_id), LLMProvider (async chat/chat_full, roleplay_model, debrief_model), Guardrail (async check, session_start_disclaimer). GuardrailVerdict/Context/TTSResult/LLMStreamChunk dataclasses carry typed metadata. server/services/registry.py resolves the active adapter from env (PRAXIS_TTS, PRAXIS_GUARDRAIL) so the pipeline never imports a concrete adapter directly — D-014/D-019/D-020 swap wiring. Verified: 'from server.services import TTSProvider, LLMProvider, Guardrail' succeeds. ---ci--- phase: 1 milestone: v0.1 plan: 02 task: 02-01 status: execute persona: backend-engineer requirements: covered: [REQ-VOICE-02, REQ-LLM-01, REQ-ORCH-02] ---/ci---
36 lines
795 B
Python
36 lines
795 B
Python
"""Praxis service interfaces and adapter registry.
|
|
|
|
Public API:
|
|
from server.services import TTSProvider, LLMProvider, Guardrail
|
|
from server.services import get_tts, get_llm, get_guardrail
|
|
|
|
Adapters are resolved from env vars:
|
|
PRAXIS_TTS=cartesia|piper
|
|
OLLAMA_ROLEPLAY_MODEL / OLLAMA_DEBRIEF_MODEL
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from server.services.base import (
|
|
Guardrail,
|
|
GuardrailContext,
|
|
GuardrailVerdict,
|
|
LLMProvider,
|
|
LLMStreamChunk,
|
|
TTSProvider,
|
|
TTSResult,
|
|
)
|
|
from server.services.registry import get_guardrail, get_llm, get_tts
|
|
|
|
__all__ = [
|
|
"TTSProvider",
|
|
"TTSResult",
|
|
"LLMProvider",
|
|
"LLMStreamChunk",
|
|
"Guardrail",
|
|
"GuardrailVerdict",
|
|
"GuardrailContext",
|
|
"get_tts",
|
|
"get_llm",
|
|
"get_guardrail",
|
|
] |