From 15bf9d39351c32bbcacd72e1c69495305529acdb Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Mon, 23 Mar 2026 14:30:16 +0000 Subject: [PATCH] feat: add full AI provider config to .env.example and docker-compose - All OpenAI, Gemini, Anthropic model/timeout/temperature settings - Brief extraction processing config (models, cost limits, concurrency) - File upload and WebSocket settings Co-Authored-By: Claude Sonnet 4.6 --- .env.example | 43 +++++++++++++++++++++++++++++++++++++------ docker-compose.yml | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index c039f0f..a15b785 100644 --- a/.env.example +++ b/.env.example @@ -15,16 +15,42 @@ AZURE_REDIRECT_URI=https://ai-sandbox.oliver.solutions/ac-helper/ # First login with this email automatically receives the admin role ADMIN_EMAIL= -# ── AI providers ────────────────────────────────────────────────────────────── -# Required: Gemini is used for AI spreadsheet commands -GEMINI_API_KEY= -GEMINI_MODEL=gemini-2.0-flash-exp - -# Optional: only needed if you use the brief-extraction feature with these providers +# ── OpenAI ──────────────────────────────────────────────────────────────────── OPENAI_API_KEY= +OPENAI_MODEL=gpt-4.1 +OPENAI_REASONING_EFFORT=medium +OPENAI_TIMEOUT=3600 +OPENAI_MAX_RETRIES=2 + +# ── Google Gemini ───────────────────────────────────────────────────────────── +# Required: used for AI spreadsheet commands +GEMINI_API_KEY= +GOOGLE_MODEL=gemini-2.0-flash-exp +GOOGLE_TEMPERATURE=0.7 +GOOGLE_MAX_OUTPUT_TOKENS=100000 +GOOGLE_THINKING_BUDGET=12000 +GOOGLE_TIMEOUT=3600 + +# ── Anthropic Claude ────────────────────────────────────────────────────────── ANTHROPIC_API_KEY= +ANTHROPIC_MODEL_OPUS=claude-opus-4-5-20251101 +ANTHROPIC_MODEL_SONNET=claude-sonnet-4-5-20250929 +ANTHROPIC_TEMPERATURE=1 +ANTHROPIC_MAX_TOKENS=32000 +ANTHROPIC_THINKING_BUDGET=12000 +ANTHROPIC_TIMEOUT=300 + +# ── LlamaCloud (PDF parsing) ────────────────────────────────────────────────── LLAMA_CLOUD_API_KEY= +# ── Brief extraction processing ─────────────────────────────────────────────── +DEFAULT_PRIMARY_MODELS=anthropic-sonnet45,google-gemini20 +DEFAULT_CONSOLIDATION_MODEL=anthropic-sonnet45 +MINIMUM_SUCCESS_THRESHOLD=1 +ENABLE_COST_ESTIMATION=true +MAX_PROCESSING_COST_USD=10.00 +MAX_CONCURRENT_JOBS=5 + # ── Security ────────────────────────────────────────────────────────────────── # Generate with: python3 -c "import secrets; print(secrets.token_hex(32))" SESSION_SECRET= @@ -32,5 +58,10 @@ SESSION_SECRET= # ── CORS ────────────────────────────────────────────────────────────────────── ALLOWED_ORIGINS=https://ai-sandbox.oliver.solutions +# ── File upload ─────────────────────────────────────────────────────────────── +MAX_UPLOAD_SIZE_MB=200 +FILE_RETENTION_HOURS=24 +WS_PING_INTERVAL_SECONDS=30 + # ── Dev mode (must be false in production) ──────────────────────────────────── DEV_MODE=false diff --git a/docker-compose.yml b/docker-compose.yml index 09395e9..c9d530e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,12 +49,46 @@ services: # Admin bootstrap ADMIN_EMAIL: ${ADMIN_EMAIL:-daveporter@oliver.agency} - # AI providers - GEMINI_API_KEY: ${GEMINI_API_KEY} + # OpenAI OPENAI_API_KEY: ${OPENAI_API_KEY:-} + OPENAI_MODEL: ${OPENAI_MODEL:-gpt-4.1} + OPENAI_REASONING_EFFORT: ${OPENAI_REASONING_EFFORT:-medium} + OPENAI_TIMEOUT: ${OPENAI_TIMEOUT:-3600} + OPENAI_MAX_RETRIES: ${OPENAI_MAX_RETRIES:-2} + + # Google Gemini + GEMINI_API_KEY: ${GEMINI_API_KEY:-} + GOOGLE_MODEL: ${GOOGLE_MODEL:-gemini-2.0-flash-exp} + GOOGLE_TEMPERATURE: ${GOOGLE_TEMPERATURE:-0.7} + GOOGLE_MAX_OUTPUT_TOKENS: ${GOOGLE_MAX_OUTPUT_TOKENS:-100000} + GOOGLE_THINKING_BUDGET: ${GOOGLE_THINKING_BUDGET:-12000} + GOOGLE_TIMEOUT: ${GOOGLE_TIMEOUT:-3600} + + # Anthropic ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} + ANTHROPIC_MODEL_OPUS: ${ANTHROPIC_MODEL_OPUS:-claude-opus-4-5-20251101} + ANTHROPIC_MODEL_SONNET: ${ANTHROPIC_MODEL_SONNET:-claude-sonnet-4-5-20250929} + ANTHROPIC_TEMPERATURE: ${ANTHROPIC_TEMPERATURE:-1} + ANTHROPIC_MAX_TOKENS: ${ANTHROPIC_MAX_TOKENS:-32000} + ANTHROPIC_THINKING_BUDGET: ${ANTHROPIC_THINKING_BUDGET:-12000} + ANTHROPIC_TIMEOUT: ${ANTHROPIC_TIMEOUT:-300} + + # LlamaCloud LLAMA_CLOUD_API_KEY: ${LLAMA_CLOUD_API_KEY:-} + # Brief extraction + DEFAULT_PRIMARY_MODELS: ${DEFAULT_PRIMARY_MODELS:-anthropic-sonnet45,google-gemini20} + DEFAULT_CONSOLIDATION_MODEL: ${DEFAULT_CONSOLIDATION_MODEL:-anthropic-sonnet45} + MINIMUM_SUCCESS_THRESHOLD: ${MINIMUM_SUCCESS_THRESHOLD:-1} + ENABLE_COST_ESTIMATION: ${ENABLE_COST_ESTIMATION:-true} + MAX_PROCESSING_COST_USD: ${MAX_PROCESSING_COST_USD:-10.00} + MAX_CONCURRENT_JOBS: ${MAX_CONCURRENT_JOBS:-5} + + # File upload + MAX_UPLOAD_SIZE_MB: ${MAX_UPLOAD_SIZE_MB:-200} + FILE_RETENTION_HOURS: ${FILE_RETENTION_HOURS:-24} + WS_PING_INTERVAL_SECONDS: ${WS_PING_INTERVAL_SECONDS:-30} + # Paths DATA_DIR: /app/data UPLOADS_DIR: /app/data/uploads