Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5ea13cc
refactor memory
0xrushi Dec 18, 2025
9a372f5
Merge branch 'main' into fix/cleanup-model
0xrushi Dec 18, 2025
649c0de
add config
0xrushi Dec 18, 2025
4597b80
merge
0xrushi Dec 18, 2025
ab89263
Merge branch 'fix/cleanup-model' of github.com:0xrushi/friend-lite in…
0xrushi Dec 18, 2025
6976b6f
docstring
0xrushi Dec 18, 2025
77fea64
more cleanup
0xrushi Dec 18, 2025
c9b0590
code quality
0xrushi Dec 18, 2025
9816c2f
code quality
0xrushi Dec 18, 2025
0464b32
unused return
0xrushi Dec 18, 2025
5f325c1
DOTTED GET
0xrushi Dec 18, 2025
686f357
Merge branch 'dev' into fix/cleanup-model
AnkushMalaker Dec 18, 2025
43ed63e
Refactor Docker and CI configurations
AnkushMalaker Dec 19, 2025
db83fe4
Merge branch 'dev' into fix/cleanup-model
AnkushMalaker Dec 20, 2025
790ba69
Update configuration files for model providers and Docker setup
AnkushMalaker Dec 20, 2025
3608383
Merge pull request #220 from chronicler-ai/fix/cleanup-model-2
AnkushMalaker Dec 20, 2025
b9642c8
Update transcription job handling to format speaker IDs
AnkushMalaker Dec 22, 2025
a8e8bcc
Remove loading of backend .env file in test environment setup
AnkushMalaker Dec 22, 2025
f3701c7
Enhance configuration management and setup wizard
AnkushMalaker Dec 22, 2025
5de2dc9
Enhance HTTPS configuration in setup wizard
AnkushMalaker Dec 22, 2025
7f77600
Add source parameter to audio file writing in websocket controller
AnkushMalaker Dec 22, 2025
b6ba9ea
Merge branch 'fix/cleanup-model' into feat/config-yaml-compatible-wizard
AnkushMalaker Dec 22, 2025
24dcde4
Refactor error handling in system controller and update memory config…
AnkushMalaker Dec 22, 2025
913108c
Merge branch 'dev' into fix/tests
AnkushMalaker Dec 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
from datetime import UTC, datetime

import yaml
from fastapi import HTTPException

from advanced_omi_backend.config import (
load_diarization_settings_from_file,
save_diarization_settings_to_file,
)
from advanced_omi_backend.models.user import User
from advanced_omi_backend.model_registry import _find_config_path, load_models_config
from advanced_omi_backend.models.user import User
from advanced_omi_backend.task_manager import get_task_manager

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -80,24 +81,24 @@ async def save_diarization_settings(settings: dict):
try:
# Validate settings
valid_keys = {
"diarization_source", "similarity_threshold", "min_duration", "collar",
"diarization_source", "similarity_threshold", "min_duration", "collar",
"min_duration_off", "min_speakers", "max_speakers"
}

for key, value in settings.items():
if key not in valid_keys:
raise ValueError(f"Invalid setting key: {key}")
raise HTTPException(status_code=400, detail=f"Invalid setting key: {key}")

# Type validation
if key in ["min_speakers", "max_speakers"]:
if not isinstance(value, int) or value < 1 or value > 20:
raise ValueError(f"Invalid value for {key}: must be integer 1-20")
raise HTTPException(status_code=400, detail=f"Invalid value for {key}: must be integer 1-20")
elif key == "diarization_source":
if not isinstance(value, str) or value not in ["pyannote", "deepgram"]:
raise ValueError(f"Invalid value for {key}: must be 'pyannote' or 'deepgram'")
raise HTTPException(status_code=400, detail=f"Invalid value for {key}: must be 'pyannote' or 'deepgram'")
else:
if not isinstance(value, (int, float)) or value < 0:
raise ValueError(f"Invalid value for {key}: must be positive number")
raise HTTPException(status_code=400, detail=f"Invalid value for {key}: must be positive number")

# Get current settings and merge with new values
current_settings = load_diarization_settings_from_file()
Expand Down Expand Up @@ -321,15 +322,18 @@ async def validate_memory_config(config_yaml: str):
try:
parsed = yaml.safe_load(config_yaml)
except yaml.YAMLError as e:
raise ValueError(f"Invalid YAML syntax: {str(e)}")
raise HTTPException(status_code=400, detail=f"Invalid YAML syntax: {str(e)}")
if not isinstance(parsed, dict):
raise ValueError("Configuration must be a YAML object")
raise HTTPException(status_code=400, detail="Configuration must be a YAML object")
# Minimal checks
# provider optional; timeout_seconds optional; extraction enabled/prompt optional
return {"message": "Configuration is valid", "status": "success"}
except HTTPException:
# Re-raise HTTPExceptions without wrapping
raise
except Exception as e:
logger.exception("Error validating memory config")
raise e
raise HTTPException(status_code=500, detail=f"Error validating memory config: {str(e)}")


async def reload_memory_config():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,27 @@
from typing import Optional

from fastapi import APIRouter, Body, Depends, Request
from pydantic import BaseModel

from advanced_omi_backend.auth import current_active_user, current_superuser
from advanced_omi_backend.controllers import system_controller, session_controller, queue_controller
from advanced_omi_backend.controllers import (
queue_controller,
session_controller,
system_controller,
)
from advanced_omi_backend.models.user import User

logger = logging.getLogger(__name__)

router = APIRouter(tags=["system"])


# Request models for memory config endpoints
class MemoryConfigRequest(BaseModel):
"""Request model for memory configuration validation and updates."""
config_yaml: str


@router.get("/metrics")
async def get_current_metrics(current_user: User = Depends(current_superuser)):
"""Get current system metrics. Admin only."""
Expand Down Expand Up @@ -91,11 +102,11 @@ async def update_memory_config_raw(

@router.post("/admin/memory/config/validate")
async def validate_memory_config(
config_yaml: str = Body(..., media_type="text/plain"),
request: MemoryConfigRequest,
current_user: User = Depends(current_superuser)
):
"""Validate memory configuration YAML syntax. Admin only."""
return await system_controller.validate_memory_config(config_yaml)
return await system_controller.validate_memory_config(request.config_yaml)


@router.post("/admin/memory/config/reload")
Expand Down
Loading