feat: add shared config and models
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
|
|
||||||
|
class Settings(BaseSettings):
|
||||||
|
db_path: str = "/data/linkedstorm.db"
|
||||||
|
clips_dir: str = "/data/clips"
|
||||||
|
speaches_url: str = "http://192.168.86.150:8000"
|
||||||
|
ollama_url: str = "http://192.168.86.150:11434"
|
||||||
|
ollama_model: str = "qwen2.5:14b"
|
||||||
|
livekit_url: str = "ws://192.168.86.150:7880"
|
||||||
|
livekit_api_key: str = "devkey"
|
||||||
|
livekit_api_secret: str = "devsecret"
|
||||||
|
pipeline_internal_url: str = "http://linkedstorm-pipeline:8300"
|
||||||
|
clip_retention_days: int = 30
|
||||||
|
speaker_known_threshold: float = 0.85
|
||||||
|
speaker_ambiguous_threshold: float = 0.60
|
||||||
|
vad_silence_ms: int = 600
|
||||||
|
vad_min_speech_ms: int = 500
|
||||||
|
|
||||||
|
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
|
||||||
|
|
||||||
|
|
||||||
|
def get_settings() -> Settings:
|
||||||
|
return Settings()
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Room:
|
||||||
|
id: int
|
||||||
|
name: str
|
||||||
|
device_label: Optional[str]
|
||||||
|
is_active: bool
|
||||||
|
last_seen: Optional[datetime]
|
||||||
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Speaker:
|
||||||
|
id: int
|
||||||
|
name: str
|
||||||
|
created_at: datetime
|
||||||
|
updated_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class VoiceEmbedding:
|
||||||
|
id: int
|
||||||
|
speaker_id: int
|
||||||
|
embedding: bytes # packed float32
|
||||||
|
audio_sample: Optional[bytes]
|
||||||
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Utterance:
|
||||||
|
id: int
|
||||||
|
room_id: int
|
||||||
|
speaker_id: Optional[int]
|
||||||
|
transcript: str
|
||||||
|
embedding: Optional[bytes]
|
||||||
|
match_status: str # known | unknown | ambiguous | unreviewed
|
||||||
|
match_confidence: Optional[float]
|
||||||
|
start_time: datetime
|
||||||
|
end_time: datetime
|
||||||
|
audio_clip_path: Optional[str]
|
||||||
|
livekit_room: Optional[str]
|
||||||
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class DailySummary:
|
||||||
|
id: int
|
||||||
|
date: str # YYYY-MM-DD
|
||||||
|
summary_text: str
|
||||||
|
generated_at: datetime
|
||||||
Reference in New Issue
Block a user