added onboarding request
This commit is contained in:
parent
03b827f3e0
commit
f5e2ee8059
2 changed files with 117 additions and 0 deletions
|
|
@ -231,3 +231,110 @@ async def update_settings(request, session_manager):
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
{"error": f"Failed to update settings: {str(e)}"}, status_code=500
|
{"error": f"Failed to update settings: {str(e)}"}, status_code=500
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def onboarding(request, session_manager):
|
||||||
|
"""Handle onboarding configuration setup"""
|
||||||
|
try:
|
||||||
|
# Get current configuration
|
||||||
|
current_config = get_openrag_config()
|
||||||
|
|
||||||
|
# Check if config is NOT marked as edited (only allow onboarding if not yet configured)
|
||||||
|
if current_config.edited:
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "Configuration has already been edited. Use /settings endpoint for updates."},
|
||||||
|
status_code=403
|
||||||
|
)
|
||||||
|
|
||||||
|
# Parse request body
|
||||||
|
body = await request.json()
|
||||||
|
|
||||||
|
# Validate allowed fields
|
||||||
|
allowed_fields = {
|
||||||
|
"model_provider", "api_key", "embedding_model", "llm_model", "sample_data"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for invalid fields
|
||||||
|
invalid_fields = set(body.keys()) - allowed_fields
|
||||||
|
if invalid_fields:
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": f"Invalid fields: {', '.join(invalid_fields)}. Allowed fields: {', '.join(allowed_fields)}"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
|
||||||
|
# Update configuration
|
||||||
|
config_updated = False
|
||||||
|
|
||||||
|
# Update provider settings
|
||||||
|
if "model_provider" in body:
|
||||||
|
if not isinstance(body["model_provider"], str) or not body["model_provider"].strip():
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "model_provider must be a non-empty string"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
current_config.provider.model_provider = body["model_provider"].strip()
|
||||||
|
config_updated = True
|
||||||
|
|
||||||
|
if "api_key" in body:
|
||||||
|
if not isinstance(body["api_key"], str):
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "api_key must be a string"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
current_config.provider.api_key = body["api_key"]
|
||||||
|
config_updated = True
|
||||||
|
|
||||||
|
# Update knowledge settings
|
||||||
|
if "embedding_model" in body:
|
||||||
|
if not isinstance(body["embedding_model"], str) or not body["embedding_model"].strip():
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "embedding_model must be a non-empty string"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
current_config.knowledge.embedding_model = body["embedding_model"].strip()
|
||||||
|
config_updated = True
|
||||||
|
|
||||||
|
# Update agent settings
|
||||||
|
if "llm_model" in body:
|
||||||
|
if not isinstance(body["llm_model"], str) or not body["llm_model"].strip():
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "llm_model must be a non-empty string"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
current_config.agent.llm_model = body["llm_model"].strip()
|
||||||
|
config_updated = True
|
||||||
|
|
||||||
|
# Handle sample_data (unused for now but validate)
|
||||||
|
if "sample_data" in body:
|
||||||
|
if not isinstance(body["sample_data"], bool):
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "sample_data must be a boolean value"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
# Note: sample_data is accepted but not used as requested
|
||||||
|
|
||||||
|
if not config_updated:
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "No valid fields provided for update"},
|
||||||
|
status_code=400
|
||||||
|
)
|
||||||
|
|
||||||
|
# Save the updated configuration (this will mark it as edited)
|
||||||
|
if config_manager.save_config_file(current_config):
|
||||||
|
updated_fields = [k for k in body.keys() if k != "sample_data"] # Exclude sample_data from log
|
||||||
|
logger.info("Onboarding configuration updated successfully", updated_fields=updated_fields)
|
||||||
|
return JSONResponse({
|
||||||
|
"message": "Onboarding configuration updated successfully",
|
||||||
|
"edited": True # Confirm that config is now marked as edited
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": "Failed to save configuration"},
|
||||||
|
status_code=500
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Failed to update onboarding settings", error=str(e))
|
||||||
|
return JSONResponse(
|
||||||
|
{"error": f"Failed to update onboarding settings: {str(e)}"}, status_code=500
|
||||||
|
)
|
||||||
|
|
|
||||||
10
src/main.py
10
src/main.py
|
|
@ -909,6 +909,16 @@ async def create_app():
|
||||||
),
|
),
|
||||||
methods=["POST"],
|
methods=["POST"],
|
||||||
),
|
),
|
||||||
|
# Onboarding endpoint
|
||||||
|
Route(
|
||||||
|
"/onboarding",
|
||||||
|
require_auth(services["session_manager"])(
|
||||||
|
partial(
|
||||||
|
settings.onboarding, session_manager=services["session_manager"]
|
||||||
|
)
|
||||||
|
),
|
||||||
|
methods=["POST"],
|
||||||
|
),
|
||||||
Route(
|
Route(
|
||||||
"/nudges",
|
"/nudges",
|
||||||
require_auth(services["session_manager"])(
|
require_auth(services["session_manager"])(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue