Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException | |
| from loguru import logger | |
| from api.models import SettingsResponse, SettingsUpdate | |
| from open_notebook.domain.content_settings import ContentSettings | |
| from open_notebook.exceptions import InvalidInputError | |
| router = APIRouter() | |
| async def get_settings(): | |
| """Get all application settings.""" | |
| try: | |
| settings: ContentSettings = await ContentSettings.get_instance() # type: ignore[assignment] | |
| return SettingsResponse( | |
| default_content_processing_engine_doc=settings.default_content_processing_engine_doc, | |
| default_content_processing_engine_url=settings.default_content_processing_engine_url, | |
| default_embedding_option=settings.default_embedding_option, | |
| auto_delete_files=settings.auto_delete_files, | |
| youtube_preferred_languages=settings.youtube_preferred_languages, | |
| ) | |
| except Exception as e: | |
| logger.error(f"Error fetching settings: {str(e)}") | |
| raise HTTPException(status_code=500, detail=f"Error fetching settings: {str(e)}") | |
| async def update_settings(settings_update: SettingsUpdate): | |
| """Update application settings.""" | |
| try: | |
| settings: ContentSettings = await ContentSettings.get_instance() # type: ignore[assignment] | |
| # Update only provided fields | |
| if settings_update.default_content_processing_engine_doc is not None: | |
| # Cast to proper literal type | |
| from typing import Literal, cast | |
| settings.default_content_processing_engine_doc = cast( | |
| Literal["auto", "docling", "simple"], | |
| settings_update.default_content_processing_engine_doc | |
| ) | |
| if settings_update.default_content_processing_engine_url is not None: | |
| from typing import Literal, cast | |
| settings.default_content_processing_engine_url = cast( | |
| Literal["auto", "firecrawl", "jina", "simple"], | |
| settings_update.default_content_processing_engine_url | |
| ) | |
| if settings_update.default_embedding_option is not None: | |
| from typing import Literal, cast | |
| settings.default_embedding_option = cast( | |
| Literal["ask", "always", "never"], | |
| settings_update.default_embedding_option | |
| ) | |
| if settings_update.auto_delete_files is not None: | |
| from typing import Literal, cast | |
| settings.auto_delete_files = cast( | |
| Literal["yes", "no"], | |
| settings_update.auto_delete_files | |
| ) | |
| if settings_update.youtube_preferred_languages is not None: | |
| settings.youtube_preferred_languages = settings_update.youtube_preferred_languages | |
| await settings.update() | |
| return SettingsResponse( | |
| default_content_processing_engine_doc=settings.default_content_processing_engine_doc, | |
| default_content_processing_engine_url=settings.default_content_processing_engine_url, | |
| default_embedding_option=settings.default_embedding_option, | |
| auto_delete_files=settings.auto_delete_files, | |
| youtube_preferred_languages=settings.youtube_preferred_languages, | |
| ) | |
| except HTTPException: | |
| raise | |
| except InvalidInputError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| except Exception as e: | |
| logger.error(f"Error updating settings: {str(e)}") | |
| raise HTTPException(status_code=500, detail=f"Error updating settings: {str(e)}") |