Refactor project structure and enhance backend integration

- Expanded package inclusion in `pyproject.toml` to support new modules.
- Introduced new `adapters` and `protocol` packages for better organization.
- Added backend adapter implementations for control plane integration.
- Updated main application imports to reflect new package structure.
- Removed deprecated core components and adjusted documentation accordingly.
- Enhanced architecture documentation to clarify the new runtime and integration layers.
This commit is contained in:
Xin Wang
2026-03-06 09:51:56 +08:00
parent 4e2450e800
commit 7e0b777923
75 changed files with 274 additions and 688 deletions

View File

@@ -0,0 +1 @@
"""Runtime pipeline package."""

View File

@@ -0,0 +1,13 @@
"""ASR flow helpers extracted from the duplex pipeline.
This module is intentionally lightweight for phase-wise migration.
"""
from __future__ import annotations
from providers.common.base import ASRResult
def is_final_result(result: ASRResult) -> bool:
"""Return whether an ASR result is final."""
return bool(result.is_final)

View File

@@ -0,0 +1,6 @@
"""Shared constants for the runtime duplex pipeline."""
TRACK_AUDIO_IN = "audio_in"
TRACK_AUDIO_OUT = "audio_out"
TRACK_CONTROL = "control"
PCM_FRAME_BYTES = 640 # 16k mono pcm_s16le, 20ms

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
"""Output-event shaping helpers for the runtime pipeline."""
from __future__ import annotations
from typing import Any, Dict
def assistant_text_delta_event(text: str, **extra: Any) -> Dict[str, Any]:
"""Build a normalized assistant text delta payload."""
payload: Dict[str, Any] = {"type": "assistant.text.delta", "text": str(text)}
payload.update(extra)
return payload

View File

@@ -0,0 +1,8 @@
"""Interruption-related helpers extracted from the duplex pipeline."""
from __future__ import annotations
def should_interrupt(min_duration_ms: int, detected_ms: int) -> bool:
"""Decide whether interruption conditions are met."""
return int(detected_ms) >= max(0, int(min_duration_ms))

View File

@@ -0,0 +1,13 @@
"""LLM flow helpers extracted from the duplex pipeline.
This module is intentionally lightweight for phase-wise migration.
"""
from __future__ import annotations
from providers.common.base import LLMStreamEvent
def is_done_event(event: LLMStreamEvent) -> bool:
"""Return whether an LLM stream event signals completion."""
return str(event.type) == "done"

View File

@@ -0,0 +1,13 @@
"""Tooling helpers extracted from the duplex pipeline."""
from __future__ import annotations
from typing import Any
def normalize_tool_name(name: Any, aliases: dict[str, str]) -> str:
"""Normalize tool name with alias mapping."""
normalized = str(name or "").strip()
if not normalized:
return ""
return aliases.get(normalized, normalized)

View File

@@ -0,0 +1,15 @@
"""TTS flow helpers extracted from the duplex pipeline.
This module is intentionally lightweight for phase-wise migration.
"""
from __future__ import annotations
from providers.common.base import TTSChunk
def chunk_duration_ms(chunk: TTSChunk) -> float:
"""Estimate chunk duration in milliseconds for pcm16 mono."""
if chunk.sample_rate <= 0:
return 0.0
return (len(chunk.audio) / 2.0 / float(chunk.sample_rate)) * 1000.0