Skip to content

Commit 7ae3ce0

Browse files
Sherin Joseph Royclaude
andcommitted
Initial commit: Golden Hour Engine v1.0.0
Autonomous emergency response orchestration platform for road accidents. Detects incidents via CCTV (CV/ML), dispatches ambulances, pre-alerts hospitals, and clears green traffic corridors within the golden hour. - FastAPI backend with 32 REST endpoints and 3 WebSocket channels - Next.js 14 dashboard with MapLibre GL JS real-time map - PostgreSQL + PostGIS, Redis, MQTT, MinIO infrastructure - Saga-based orchestration engine with incident state machine - Multi-detector fusion pipeline (vehicle, crowd, traffic, audio, flash) - Weighted scoring for ambulance dispatch and hospital selection - Docker Compose dev and production stacks - Prometheus + Grafana + Loki monitoring configuration - Alembic database migrations - Comprehensive configuration via 120+ environment variables Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
0 parents  commit 7ae3ce0

133 files changed

Lines changed: 44265 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
# =============================================================================
2+
# Golden Hour Engine - .dockerignore
3+
# Keep Docker build context lean and secure
4+
# =============================================================================
5+
6+
# -- Version control ---------------------------------------------------------
7+
.git
8+
.gitignore
9+
.gitattributes
10+
11+
# -- Python ------------------------------------------------------------------
12+
__pycache__
13+
*.py[cod]
14+
*$py.class
15+
*.so
16+
.Python
17+
build/
18+
develop-eggs/
19+
dist/
20+
downloads/
21+
eggs/
22+
.eggs/
23+
*.egg-info/
24+
.installed.cfg
25+
*.egg
26+
sdist/
27+
wheels/
28+
29+
# Virtual environments
30+
.venv
31+
venv
32+
ENV
33+
env
34+
.conda
35+
36+
# Testing and quality
37+
.tox
38+
.nox
39+
.coverage
40+
.coverage.*
41+
htmlcov/
42+
.cache
43+
.pytest_cache/
44+
.mypy_cache/
45+
.ruff_cache/
46+
.hypothesis/
47+
reports/
48+
nosetests.xml
49+
coverage.xml
50+
51+
# -- Node.js / Dashboard ----------------------------------------------------
52+
dashboard/node_modules
53+
dashboard/.next
54+
dashboard/out
55+
dashboard/.turbo
56+
node_modules
57+
.next
58+
.turbo
59+
60+
# -- Environment files -------------------------------------------------------
61+
.env
62+
.env.*
63+
!.env.example
64+
65+
# -- IDE / Editor ------------------------------------------------------------
66+
.vscode
67+
.idea
68+
*.iml
69+
*.sublime-project
70+
*.sublime-workspace
71+
*.swp
72+
*.swo
73+
*~
74+
75+
# -- OS files ----------------------------------------------------------------
76+
.DS_Store
77+
Thumbs.db
78+
Desktop.ini
79+
80+
# -- Documentation -----------------------------------------------------------
81+
docs/
82+
*.md
83+
LICENSE
84+
CHANGELOG
85+
86+
# -- Docker (prevent recursive inclusion) ------------------------------------
87+
Dockerfile*
88+
docker-compose*.yml
89+
docker/
90+
.dockerignore
91+
92+
# -- CI/CD -------------------------------------------------------------------
93+
.github
94+
.gitlab-ci.yml
95+
.circleci
96+
.travis.yml
97+
Jenkinsfile
98+
99+
# -- Terraform / IaC ---------------------------------------------------------
100+
.terraform
101+
*.tfstate
102+
*.tfstate.*
103+
*.tfvars
104+
infra/
105+
106+
# -- Logs --------------------------------------------------------------------
107+
logs/
108+
*.log
109+
110+
# -- ML models (built into image separately) ---------------------------------
111+
models/*.onnx
112+
models/*.pt
113+
models/*.pth
114+
models/*.bin
115+
models/*.safetensors
116+
117+
# -- Large data files --------------------------------------------------------
118+
data/
119+
datasets/
120+
*.h5
121+
*.hdf5
122+
*.parquet
123+
*.feather
124+
125+
# -- Media and uploads -------------------------------------------------------
126+
uploads/
127+
*.mp4
128+
*.avi
129+
*.mov
130+
*.mkv
131+
132+
# -- Secrets -----------------------------------------------------------------
133+
*.pem
134+
*.key
135+
*.crt
136+
*.p12
137+
credentials.json
138+
service-account.json
139+
secrets/
140+
141+
# -- Misc --------------------------------------------------------------------
142+
*.bak
143+
*.tmp
144+
*.temp
145+
*.orig
146+
.ipynb_checkpoints/
147+
scripts/
148+
tests/
149+
monitoring/grafana/
150+
monitoring/prometheus/

.env.example

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
# =============================================================================
2+
# Golden Hour Engine - Environment Variables
3+
# =============================================================================
4+
# Copy this file to .env and fill in the values for your environment.
5+
# All variables have sensible defaults for local development.
6+
# =============================================================================
7+
8+
# -- Application -------------------------------------------------------------
9+
GHE_APP_NAME="Golden Hour Engine"
10+
GHE_APP_VERSION="1.0.0"
11+
GHE_ENVIRONMENT=development
12+
GHE_DEBUG=true
13+
GHE_LOG_LEVEL=INFO
14+
GHE_HOST=0.0.0.0
15+
GHE_PORT=8000
16+
GHE_WORKERS=1
17+
GHE_RELOAD=true
18+
GHE_CORS_ORIGINS=["http://localhost:3000","http://localhost:8000"]
19+
GHE_TIMEZONE=Asia/Kolkata
20+
GHE_API_V1_PREFIX=/api/v1
21+
GHE_DOCS_URL=/docs
22+
GHE_REDOC_URL=/redoc
23+
24+
# -- PostgreSQL + PostGIS ----------------------------------------------------
25+
DB_HOST=localhost
26+
DB_PORT=5432
27+
DB_USER=ghe_user
28+
DB_PASSWORD=ghe_password
29+
DB_NAME=golden_hour_engine
30+
DB_ECHO=false
31+
DB_POOL_SIZE=20
32+
DB_MAX_OVERFLOW=10
33+
DB_POOL_TIMEOUT=30
34+
DB_POOL_RECYCLE=1800
35+
DB_STATEMENT_TIMEOUT_MS=30000
36+
37+
# -- Redis -------------------------------------------------------------------
38+
REDIS_HOST=localhost
39+
REDIS_PORT=6379
40+
REDIS_PASSWORD=
41+
REDIS_DB=0
42+
REDIS_CACHE_DB=1
43+
REDIS_CELERY_DB=2
44+
REDIS_MAX_CONNECTIONS=50
45+
REDIS_SOCKET_TIMEOUT=5
46+
REDIS_SOCKET_CONNECT_TIMEOUT=5
47+
REDIS_RETRY_ON_TIMEOUT=true
48+
REDIS_SSL=false
49+
50+
# -- MQTT Broker -------------------------------------------------------------
51+
MQTT_HOST=localhost
52+
MQTT_PORT=1883
53+
MQTT_USERNAME=
54+
MQTT_PASSWORD=
55+
MQTT_CLIENT_ID=ghe-backend
56+
MQTT_KEEPALIVE=60
57+
MQTT_USE_TLS=false
58+
MQTT_TOPIC_PREFIX=ghe
59+
MQTT_QOS=1
60+
MQTT_RECONNECT_INTERVAL=5
61+
MQTT_MAX_RECONNECT_DELAY=120
62+
63+
# -- OSRM Routing Engine ----------------------------------------------------
64+
OSRM_ENDPOINT=http://localhost:5000
65+
OSRM_TIMEOUT=10
66+
OSRM_MAX_RETRIES=3
67+
OSRM_PROFILE=driving
68+
OSRM_ALTERNATIVES=3
69+
OSRM_STEPS=true
70+
OSRM_GEOMETRIES=geojson
71+
OSRM_OVERVIEW=full
72+
OSRM_ANNOTATIONS=true
73+
74+
# -- MinIO (S3-Compatible Object Storage) -----------------------------------
75+
MINIO_ENDPOINT=localhost:9000
76+
MINIO_ACCESS_KEY=minioadmin
77+
MINIO_SECRET_KEY=minioadmin
78+
MINIO_SECURE=false
79+
MINIO_REGION=us-east-1
80+
MINIO_BUCKET_VIDEO=ghe-video
81+
MINIO_BUCKET_SNAPSHOTS=ghe-snapshots
82+
MINIO_BUCKET_EVIDENCE=ghe-evidence
83+
MINIO_BUCKET_MODELS=ghe-models
84+
MINIO_PRESIGNED_EXPIRY_SECONDS=3600
85+
86+
# -- Nominatim Geocoding ----------------------------------------------------
87+
NOMINATIM_ENDPOINT=http://localhost:8080
88+
NOMINATIM_TIMEOUT=10
89+
NOMINATIM_MAX_RETRIES=3
90+
NOMINATIM_USER_AGENT=golden-hour-engine/1.0
91+
NOMINATIM_RATE_LIMIT_RPS=1.0
92+
NOMINATIM_CACHE_TTL_SECONDS=86400
93+
94+
# -- Camera Defaults ---------------------------------------------------------
95+
CAMERA_DEFAULT_FPS=15
96+
CAMERA_SNAPSHOT_INTERVAL_SECONDS=5
97+
CAMERA_STREAM_PROTOCOL=rtsp
98+
CAMERA_RTSP_TRANSPORT=tcp
99+
CAMERA_RECONNECT_DELAY_SECONDS=5
100+
CAMERA_MAX_RECONNECT_ATTEMPTS=10
101+
CAMERA_FRAME_WIDTH=1920
102+
CAMERA_FRAME_HEIGHT=1080
103+
CAMERA_JPEG_QUALITY=85
104+
CAMERA_BUFFER_SIZE=30
105+
CAMERA_ONVIF_PORT=80
106+
CAMERA_ONVIF_WSDL_DIR=
107+
CAMERA_HEALTH_CHECK_INTERVAL_SECONDS=30
108+
109+
# -- Detection Thresholds ---------------------------------------------------
110+
DETECTION_ACCIDENT_CONFIDENCE_THRESHOLD=0.65
111+
DETECTION_VEHICLE_CONFIDENCE_THRESHOLD=0.50
112+
DETECTION_PERSON_CONFIDENCE_THRESHOLD=0.50
113+
DETECTION_FIRE_CONFIDENCE_THRESHOLD=0.60
114+
DETECTION_SMOKE_CONFIDENCE_THRESHOLD=0.55
115+
DETECTION_SEVERITY_LOW_THRESHOLD=0.3
116+
DETECTION_SEVERITY_MEDIUM_THRESHOLD=0.6
117+
DETECTION_SEVERITY_HIGH_THRESHOLD=0.8
118+
DETECTION_NMS_IOU_THRESHOLD=0.45
119+
DETECTION_MAX_DETECTIONS_PER_FRAME=100
120+
DETECTION_MODEL_PATH=models/accident_detector.onnx
121+
DETECTION_MODEL_DEVICE=cpu
122+
DETECTION_MODEL_INPUT_SIZE=640
123+
DETECTION_BATCH_SIZE=1
124+
DETECTION_ENABLE_TRACKING=true
125+
DETECTION_TRACKER_TYPE=bytetrack
126+
DETECTION_CONFIRMATION_FRAMES=3
127+
DETECTION_COOLDOWN_SECONDS=60
128+
DETECTION_FALSE_POSITIVE_FILTER_ENABLED=true
129+
130+
# -- Dispatch Scoring Weights -----------------------------------------------
131+
DISPATCH_WEIGHT_DISTANCE=0.30
132+
DISPATCH_WEIGHT_ETA=0.25
133+
DISPATCH_WEIGHT_EQUIPMENT_MATCH=0.20
134+
DISPATCH_WEIGHT_CREW_SKILL=0.15
135+
DISPATCH_WEIGHT_FATIGUE_PENALTY=0.05
136+
DISPATCH_WEIGHT_AVAILABILITY=0.05
137+
DISPATCH_WEIGHT_MAX_DISPATCH_RADIUS_KM=25.0
138+
DISPATCH_WEIGHT_MAX_ETA_MINUTES=30.0
139+
DISPATCH_WEIGHT_REASSIGNMENT_THRESHOLD=0.15
140+
DISPATCH_WEIGHT_CONCURRENT_INCIDENT_LIMIT=1
141+
142+
# -- Hospital Selection Weights ---------------------------------------------
143+
HOSPITAL_WEIGHT_DISTANCE=0.25
144+
HOSPITAL_WEIGHT_ETA=0.25
145+
HOSPITAL_WEIGHT_SPECIALTY_MATCH=0.20
146+
HOSPITAL_WEIGHT_BED_AVAILABILITY=0.15
147+
HOSPITAL_WEIGHT_TRAUMA_CENTER_LEVEL=0.10
148+
HOSPITAL_WEIGHT_HISTORICAL_OUTCOME=0.05
149+
HOSPITAL_WEIGHT_MAX_HOSPITAL_RADIUS_KM=50.0
150+
HOSPITAL_WEIGHT_MAX_ETA_MINUTES=45.0
151+
HOSPITAL_WEIGHT_BED_AVAILABILITY_CACHE_TTL_SECONDS=300
152+
153+
# -- WhatsApp Business API ---------------------------------------------------
154+
WHATSAPP_ENABLED=false
155+
WHATSAPP_API_URL=https://graph.facebook.com/v18.0
156+
WHATSAPP_PHONE_NUMBER_ID=
157+
WHATSAPP_ACCESS_TOKEN=
158+
WHATSAPP_VERIFY_TOKEN=
159+
WHATSAPP_TEMPLATE_NAMESPACE=
160+
WHATSAPP_INCIDENT_TEMPLATE_NAME=incident_alert
161+
WHATSAPP_DISPATCH_TEMPLATE_NAME=dispatch_notification
162+
WHATSAPP_TIMEOUT=10
163+
WHATSAPP_MAX_RETRIES=3
164+
165+
# -- SMS (Twilio / MSG91 / TextLocal) ---------------------------------------
166+
SMS_ENABLED=false
167+
SMS_PROVIDER=twilio
168+
SMS_ACCOUNT_SID=
169+
SMS_AUTH_TOKEN=
170+
SMS_FROM_NUMBER=
171+
SMS_API_URL=https://api.twilio.com/2010-04-01
172+
SMS_TIMEOUT=10
173+
SMS_MAX_RETRIES=3
174+
SMS_RATE_LIMIT_PER_MINUTE=60
175+
176+
# -- Voice Call Notifications ------------------------------------------------
177+
VOICE_ENABLED=false
178+
VOICE_PROVIDER=twilio
179+
VOICE_ACCOUNT_SID=
180+
VOICE_AUTH_TOKEN=
181+
VOICE_FROM_NUMBER=
182+
VOICE_TWIML_URL=
183+
VOICE_TIMEOUT=10
184+
VOICE_MAX_RETRIES=3
185+
VOICE_MAX_CALL_DURATION_SECONDS=120
186+
VOICE_RETRY_DELAY_SECONDS=30
187+
188+
# -- Notification General ----------------------------------------------------
189+
NOTIFICATION_ESCALATION_TIMEOUT_SECONDS=120
190+
NOTIFICATION_MAX_ESCALATION_LEVELS=3
191+
NOTIFICATION_DEDUP_WINDOW_SECONDS=300
192+
NOTIFICATION_QUIET_HOURS_START=0
193+
NOTIFICATION_QUIET_HOURS_END=0
194+
195+
# -- Prometheus Monitoring ---------------------------------------------------
196+
PROMETHEUS_ENABLED=true
197+
PROMETHEUS_PORT=9090
198+
PROMETHEUS_METRICS_PATH=/metrics
199+
PROMETHEUS_PUSH_GATEWAY_URL=
200+
PROMETHEUS_PUSH_INTERVAL_SECONDS=15
201+
202+
# -- Grafana -----------------------------------------------------------------
203+
GRAFANA_ENABLED=true
204+
GRAFANA_URL=http://localhost:3001
205+
GRAFANA_API_KEY=
206+
GRAFANA_ORG_ID=1
207+
GRAFANA_DASHBOARD_FOLDER=Golden Hour Engine
208+
209+
# -- Loki Log Aggregation ---------------------------------------------------
210+
LOKI_ENABLED=true
211+
LOKI_URL=http://localhost:3100
212+
LOKI_PUSH_PATH=/loki/api/v1/push
213+
LOKI_BATCH_SIZE=100
214+
LOKI_FLUSH_INTERVAL_SECONDS=5
215+
216+
# -- Authentication / JWT ----------------------------------------------------
217+
AUTH_SECRET_KEY=CHANGE-ME-in-production-use-a-real-256-bit-key
218+
AUTH_ALGORITHM=HS256
219+
AUTH_ACCESS_TOKEN_EXPIRE_MINUTES=30
220+
AUTH_REFRESH_TOKEN_EXPIRE_DAYS=7
221+
AUTH_ISSUER=golden-hour-engine
222+
AUTH_AUDIENCE=ghe-api
223+
AUTH_BCRYPT_ROUNDS=12
224+
225+
# -- Celery Task Queue -------------------------------------------------------
226+
CELERY_TASK_SERIALIZER=json
227+
CELERY_RESULT_SERIALIZER=json
228+
CELERY_TIMEZONE=Asia/Kolkata
229+
CELERY_ENABLE_UTC=true
230+
CELERY_TASK_TRACK_STARTED=true
231+
CELERY_TASK_TIME_LIMIT=300
232+
CELERY_TASK_SOFT_TIME_LIMIT=240
233+
CELERY_WORKER_PREFETCH_MULTIPLIER=1
234+
CELERY_WORKER_MAX_TASKS_PER_CHILD=1000
235+
CELERY_WORKER_CONCURRENCY=4
236+
CELERY_RESULT_EXPIRES=3600

0 commit comments

Comments
 (0)