Initial commit — GeoOptions Intelligence Cockpit v2.0
Stack: FastAPI + React/TypeScript + SQLite + GPT-4o Features: Radar géopolitique, Marchés, Régime Macro, Journal de Bord MTM, Rapport IA, Super Contexte (base de raisonnement évolutive), Boucle feedback IA. Deploy: Docker + docker-compose + nginx pour openfin.open-squared.tech Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
91
backend/routers/config.py
Normal file
91
backend/routers/config.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from fastapi import APIRouter
|
||||
from pydantic import BaseModel
|
||||
from typing import Dict, Any, Optional
|
||||
import os
|
||||
from services.database import get_all_config, set_config, get_sources, update_sources, get_analysis_config, save_analysis_config
|
||||
|
||||
router = APIRouter(prefix="/api/config", tags=["config"])
|
||||
|
||||
|
||||
class ApiKeysRequest(BaseModel):
|
||||
openai_api_key: Optional[str] = None
|
||||
newsapi_key: Optional[str] = None
|
||||
eia_api_key: Optional[str] = None
|
||||
fred_api_key: Optional[str] = None
|
||||
|
||||
|
||||
class SourcesRequest(BaseModel):
|
||||
sources: Dict[str, Any]
|
||||
|
||||
|
||||
class SettingsRequest(BaseModel):
|
||||
ai_enabled: Optional[str] = None
|
||||
ai_auto_rescore: Optional[str] = None
|
||||
|
||||
|
||||
class AnalysisConfigRequest(BaseModel):
|
||||
top_n: Optional[int] = None
|
||||
category_filter: Optional[str] = None
|
||||
template: Optional[str] = None
|
||||
|
||||
|
||||
@router.get("/")
|
||||
def get_config_all():
|
||||
return get_all_config()
|
||||
|
||||
|
||||
@router.get("/sources")
|
||||
def list_sources():
|
||||
return get_sources()
|
||||
|
||||
|
||||
@router.put("/sources")
|
||||
def update_sources_endpoint(req: SourcesRequest):
|
||||
update_sources(req.sources)
|
||||
return {"status": "ok", "updated": len(req.sources)}
|
||||
|
||||
|
||||
@router.put("/api-keys")
|
||||
def update_api_keys(req: ApiKeysRequest):
|
||||
updated = []
|
||||
if req.openai_api_key is not None:
|
||||
set_config("openai_api_key", req.openai_api_key)
|
||||
os.environ["OPENAI_API_KEY"] = req.openai_api_key
|
||||
updated.append("openai")
|
||||
if req.newsapi_key is not None:
|
||||
set_config("newsapi_key", req.newsapi_key)
|
||||
updated.append("newsapi")
|
||||
if req.eia_api_key is not None:
|
||||
set_config("eia_api_key", req.eia_api_key)
|
||||
updated.append("eia")
|
||||
if req.fred_api_key is not None:
|
||||
set_config("fred_api_key", req.fred_api_key)
|
||||
updated.append("fred")
|
||||
return {"status": "ok", "updated": updated}
|
||||
|
||||
|
||||
@router.put("/settings")
|
||||
def update_settings(req: SettingsRequest):
|
||||
if req.ai_enabled is not None:
|
||||
set_config("ai_enabled", req.ai_enabled)
|
||||
if req.ai_auto_rescore is not None:
|
||||
set_config("ai_auto_rescore", req.ai_auto_rescore)
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@router.get("/analysis")
|
||||
def get_analysis_config_endpoint():
|
||||
return get_analysis_config()
|
||||
|
||||
|
||||
@router.put("/analysis")
|
||||
def save_analysis_config_endpoint(req: AnalysisConfigRequest):
|
||||
current = get_analysis_config()
|
||||
if req.top_n is not None:
|
||||
current["top_n"] = req.top_n
|
||||
if req.category_filter is not None:
|
||||
current["category_filter"] = req.category_filter
|
||||
if req.template is not None:
|
||||
current["template"] = req.template
|
||||
save_analysis_config(current)
|
||||
return {"status": "ok", "config": current}
|
||||
Reference in New Issue
Block a user