openrag/src/api/v1/settings.py
2025-12-19 03:31:54 -05:00

86 lines
2.4 KiB
Python

"""
Public API v1 Settings endpoint.
Provides access to configuration settings.
Uses API key authentication.
"""
from starlette.requests import Request
from starlette.responses import JSONResponse
from utils.logging_config import get_logger
from config.settings import get_openrag_config
logger = get_logger(__name__)
async def get_settings_endpoint(request: Request):
"""
Get current OpenRAG configuration (read-only).
GET /v1/settings
Response:
{
"agent": {
"llm_provider": "openai",
"llm_model": "gpt-4"
},
"knowledge": {
"embedding_provider": "openai",
"embedding_model": "text-embedding-3-small"
}
}
Note: This endpoint returns a limited subset of settings.
Sensitive information (API keys, credentials) is never exposed.
"""
try:
from config.settings import get_openrag_config
config = get_openrag_config()
# Return only safe, non-sensitive settings
settings = {
"agent": {
"llm_provider": config.agent.llm_provider,
"llm_model": config.agent.llm_model,
},
"knowledge": {
"embedding_provider": config.knowledge.embedding_provider,
"embedding_model": config.knowledge.embedding_model,
"chunk_size": config.knowledge.chunk_size,
"chunk_overlap": config.knowledge.chunk_overlap,
},
}
return JSONResponse(settings)
except Exception as e:
logger.error("Failed to get settings", error=str(e))
return JSONResponse(
{"error": "Failed to get settings"},
status_code=500,
)
async def update_settings_endpoint(request: Request, session_manager):
"""
Update OpenRAG configuration settings.
POST /v1/settings
Request body (all fields optional):
{
"chunk_size": 1000,
"chunk_overlap": 200
}
Response:
{
"message": "Configuration updated successfully"
}
Note: This endpoint only allows updating a limited subset of settings.
Provider API keys and credentials cannot be updated via this endpoint.
"""
from api.settings import update_settings
return await update_settings(request, session_manager)