services: db: image: postgres:18.1 shm_size: ${MMA_AI_POSTGRES_SHM_SIZE:-2gb} environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: mma-ai healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d mma-ai"] interval: 5s timeout: 5s retries: 20 ports: - "${MMA_AI_POSTGRES_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql - ./docker/postgres-init:/docker-entrypoint-initdb.d:ro web: build: . depends_on: db: condition: service_healthy extra_hosts: - "host.docker.internal:host-gateway" environment: DATABASE_URL: ${MMA_AI_COMPOSE_DATABASE_URL:-postgresql://postgres:postgres@db:5432/mma-ai} ODDS_DATABASE_URL: ${MMA_AI_COMPOSE_ODDS_DATABASE_URL:-postgresql://postgres:postgres@db:5432/odds} MMA_AI_DATA_DIR: /app/data MMA_AI_UFCSTATS_DIR: /app/data/raw/ufcstats MMA_AI_MODELS_DIR: /app/AutogluonModels MMA_AI_PICKS_DIR: /app/pics/picks MMA_AI_MAX_FEATURE_COLUMNS_PER_QUERY: ${MMA_AI_MAX_FEATURE_COLUMNS_PER_QUERY:-200} MMA_AI_MAX_FEATURE_TABLES_PER_QUERY: ${MMA_AI_MAX_FEATURE_TABLES_PER_QUERY:-6} LLM_PROVIDER: ${LLM_PROVIDER:-} LLM_MODEL: ${LLM_MODEL:-} LLM_API_KEY: ${LLM_API_KEY:-} LLM_BASE_URL: ${LLM_BASE_URL:-} LLM_TIMEOUT_SECONDS: ${LLM_TIMEOUT_SECONDS:-90} OPENAI_API_KEY: ${OPENAI_API_KEY:-} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} XAI_API_KEY: ${XAI_API_KEY:-} GROK_API_KEY: ${GROK_API_KEY:-} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-} MISTRAL_API_KEY: ${MISTRAL_API_KEY:-} TOGETHER_API_KEY: ${TOGETHER_API_KEY:-} PERPLEXITY_API_KEY: ${PERPLEXITY_API_KEY:-} GEMINI_API_KEY: ${GEMINI_API_KEY:-} GOOGLE_API_KEY: ${GOOGLE_API_KEY:-} THE_ODDS_API_KEY: ${THE_ODDS_API_KEY:-} ports: - "127.0.0.1:${MMA_AI_WEB_PORT:-8000}:8000" volumes: - ./data:/app/data - ./AutogluonModels:/app/AutogluonModels - ./pics:/app/pics volumes: postgres-data: