Documentation Index
Fetch the complete documentation index at: https://mintlify.com/sibblegp/ODAI/llms.txt
Use this file to discover all available pages before exploring further.
ODAI runs on Google App Engine (Flexible Environment) using Python 3.13 with Gunicorn and Uvicorn workers. Two separate Google Cloud projects are used to isolate environments:
| Environment | Project ID | Config file |
|---|
| Development | odai-dev-5e4fd | app.yaml |
| Production | odai-prod | prod.yaml |
Prerequisites
Authenticate with the Google Cloud SDK before deploying:
gcloud auth login
gcloud auth application-default login
Configuration differences
Development (app.yaml)
Production (prod.yaml)
The development configuration uses manual scaling with a single instance, keeping costs low during active development.runtime: python
entrypoint: gunicorn -w 2 -k uvicorn.workers.UvicornWorker api:APP
env: flex
runtime_config:
operating_system: ubuntu22
runtime_version: "3.13"
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 4
disk_size_gb: 20
env_variables:
LOCAL: "false"
Key characteristics:
- 1 Gunicorn worker process with 2 Uvicorn workers
- 1 fixed instance (manual scaling — no auto-scaling)
- 1 vCPU, 4 GB RAM
LOCAL=false so the app reads secrets from Google Secret Manager
The production configuration uses automatic scaling between 2 and 20 instances based on CPU utilization and concurrent request load.runtime: python
entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker api:APP
env: flex
runtime_config:
operating_system: ubuntu22
runtime_version: "3.13"
automatic_scaling:
min_num_instances: 2
max_num_instances: 20
cool_down_period_sec: 600
cpu_utilization:
target_utilization: 0.5
target_concurrent_requests: 25
resources:
cpu: 2
memory_gb: 4
disk_size_gb: 15
env_variables:
LOCAL: "false"
PRODUCTION: "true"
Key characteristics:
- 1 Gunicorn worker process with 4 Uvicorn workers per instance
- Auto-scaling from 2 to 20 instances
- Scales up when CPU exceeds 50% or concurrent requests exceed 25
- 600-second cool-down between scaling events
- 2 vCPUs, 4 GB RAM per instance
PRODUCTION=true activates strict authentication, production KMS key ring, and Secret Manager project odai-prod
Deploying
Use the provided shell script to deploy to the development environment. The script runs the full test suite before deploying to catch regressions early:This script executes the following steps:gcloud config set project odai-dev
python run_tests.py --workers 8
gcloud app deploy
To deploy manually without the script:gcloud config set project odai-dev-5e4fd
gcloud app deploy app.yaml --version=your-version-name
Production deployments serve real users. Always ensure all tests pass locally before deploying, and verify your changes are fully tested in the development environment first.
Use the production deploy script, which runs tests with 8 parallel workers before pushing:This script executes the following steps:gcloud config set project odai-prod
python run_tests.py --workers 8
gcloud app deploy prod.yaml
To deploy manually without the script:gcloud config set project odai-prod
gcloud app deploy prod.yaml --version=your-version-name
Secrets in deployed environments
Neither app.yaml nor prod.yaml contains API keys. Since LOCAL is set to false in both configs, the application fetches all secrets from Google Secret Manager at startup using the project’s service account.
Ensure every required secret is stored in Secret Manager under the appropriate project before deploying. Secret IDs match the variable names from config.py (e.g., openai_api_key, plaid_client_id). See Environment Variables for the complete list.
Checking deployment status
# View deployed versions
gcloud app versions list
# Stream application logs
gcloud app logs tail -s default
# Open the deployed app in a browser
gcloud app browse