Build and Push / lint-and-test (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.adapters.broker_adapter name:broker-adapter]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.aggregation.worker name:aggregation]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.extractor.worker name:extractor]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.ingestion.worker name:ingestion]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.lake_publisher.worker name:lake-publisher]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.parser.worker name:parser]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.recommendation.worker name:recommendation]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:python -m services.scheduler.app name:scheduler]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:uvicorn services.api.app:app --host 0.0.0.0 --port 8000 name:query-api]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:uvicorn services.risk.app:app --host 0.0.0.0 --port 8000 name:risk]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000 name:symbol-registry]) (push) Canceled after 0s
Build and Push / build-services (map[cmd:uvicorn services.trading.app:app --host 0.0.0.0 --port 8000 name:trading-engine]) (push) Canceled after 0s
Build and Push / build-dashboard (push) Canceled after 0s
Build and Push / build-superset (push) Canceled after 0s
Build and Push / integration-test (push) Canceled after 0s
Build and Push / beta-gate (push) Canceled after 0s
313 lines
8.7 KiB
YAML
313 lines
8.7 KiB
YAML
## Global image settings
|
|
image:
|
|
registry: registry.celestium.life/stonks-oracle
|
|
pullPolicy: Always
|
|
tag: latest
|
|
|
|
## Pipeline toggle — when false, all worker services (ingestion, parsing,
|
|
## extraction, aggregation, recommendation, broker, lake-publisher, scheduler)
|
|
## are scaled to 0. API services always run.
|
|
pipelineEnabled: true
|
|
|
|
## Service deployments — replicas and resource overrides
|
|
services:
|
|
scheduler:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: scheduler
|
|
command: "python -m services.scheduler.app"
|
|
tier: orchestration
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 50m, memory: 128Mi }
|
|
limits: { cpu: 200m, memory: 256Mi }
|
|
|
|
symbolRegistry:
|
|
replicas: 1
|
|
image: symbol-registry
|
|
command: "uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000"
|
|
tier: api
|
|
port: 8000
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
probes:
|
|
readiness: { path: /docs, port: 8000, initialDelay: 5, period: 10 }
|
|
liveness: { path: /docs, port: 8000, initialDelay: 10, period: 30 }
|
|
|
|
ingestion:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: ingestion
|
|
command: "python -m services.ingestion.worker"
|
|
tier: ingestion
|
|
secrets: [stonks-core-secrets, stonks-market-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
parser:
|
|
replicas: 2
|
|
pipeline: true
|
|
image: parser
|
|
command: "python -m services.parser.worker"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
extractor:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: extractor
|
|
command: "python -m services.extractor.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 200m, memory: 256Mi }
|
|
limits: { cpu: "1", memory: 512Mi }
|
|
|
|
aggregation:
|
|
replicas: 4
|
|
pipeline: true
|
|
image: aggregation
|
|
command: "python -m services.aggregation.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
recommendation:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: recommendation
|
|
command: "python -m services.recommendation.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
tradingEngine:
|
|
replicas: 1
|
|
image: trading-engine
|
|
command: "uvicorn services.trading.app:app --host 0.0.0.0 --port 8000"
|
|
tier: trading
|
|
port: 8000
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets, stonks-gmail-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 512Mi }
|
|
limits: { cpu: 1000m, memory: 1024Mi }
|
|
probes:
|
|
readiness: { path: /ready, port: 8000, initialDelay: 5, period: 10 }
|
|
liveness: { path: /health, port: 8000, initialDelay: 10, period: 30 }
|
|
|
|
riskEngine:
|
|
replicas: 1
|
|
image: risk
|
|
command: "uvicorn services.risk.app:app --host 0.0.0.0 --port 8000"
|
|
tier: trading
|
|
port: 8000
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
brokerAdapter:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: broker-adapter
|
|
command: "python -m services.adapters.broker_service"
|
|
tier: trading
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 50m, memory: 64Mi }
|
|
limits: { cpu: 200m, memory: 128Mi }
|
|
|
|
signalEngine:
|
|
replicas: 0
|
|
pipeline: true
|
|
image: signal-engine
|
|
command: "python -m services.signal_engine.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets, stonks-market-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
lakePublisher:
|
|
replicas: 0
|
|
pipeline: true
|
|
image: lake-publisher
|
|
command: "python -m services.lake_publisher.jobs"
|
|
tier: analytics
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
queryApi:
|
|
replicas: 1
|
|
image: query-api
|
|
command: "uvicorn services.api.app:app --host 0.0.0.0 --port 8000"
|
|
tier: api
|
|
port: 8000
|
|
secrets: [stonks-core-secrets, stonks-market-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
probes:
|
|
readiness: { path: /docs, port: 8000, initialDelay: 5, period: 10 }
|
|
|
|
dashboard:
|
|
replicas: 1
|
|
image: dashboard
|
|
tier: frontend
|
|
port: 8080
|
|
resources:
|
|
requests: { cpu: 50m, memory: 64Mi }
|
|
limits: { cpu: 200m, memory: 128Mi }
|
|
probes:
|
|
readiness: { path: /, port: 8080, initialDelay: 3, period: 10 }
|
|
liveness: { path: /, port: 8080, initialDelay: 5, period: 30 }
|
|
|
|
## ConfigMap data
|
|
config:
|
|
POSTGRES_HOST: "postgresql-rw.postgresql-service.svc.cluster.local"
|
|
POSTGRES_PORT: "5432"
|
|
POSTGRES_DB: "stonks"
|
|
POSTGRES_USER: "stonks"
|
|
REDIS_HOST: "redis-master.redis-service.svc.cluster.local"
|
|
REDIS_PORT: "6379"
|
|
REDIS_DB: "0"
|
|
MINIO_ENDPOINT: "minio.minio-service.svc.cluster.local:80"
|
|
MINIO_SECURE: "false"
|
|
OLLAMA_BASE_URL: "http://nuextract-external.vllm-service.svc.cluster.local:2701"
|
|
OLLAMA_MODEL: "numind/NuExtract3"
|
|
OLLAMA_TIMEOUT: "240"
|
|
OLLAMA_MAX_RETRIES: "2"
|
|
OLLAMA_RETRY_BASE_DELAY: "1.0"
|
|
OLLAMA_RETRY_MAX_DELAY: "10.0"
|
|
OLLAMA_RETRY_BACKOFF_MULTIPLIER: "2.0"
|
|
VLLM_BASE_URL: "http://nuextract-external.vllm-service.svc.cluster.local:2701"
|
|
VLLM_MODEL: "numind/NuExtract3"
|
|
VLLM_TIMEOUT: "120"
|
|
VLLM_MAX_RETRIES: "2"
|
|
VLLM_TEMPERATURE: "0.7"
|
|
VLLM_API_KEY: ""
|
|
TRINO_HOST: "trino.stonks-oracle.svc.cluster.local"
|
|
TRINO_PORT: "8080"
|
|
TRINO_CATALOG: "lakehouse"
|
|
TRINO_SCHEMA: "stonks"
|
|
TRINO_ICEBERG_CATALOG: "iceberg"
|
|
BROKER_MODE: "paper"
|
|
BROKER_PROVIDER: ""
|
|
MARKET_DATA_BASE_URL: "https://api.polygon.io"
|
|
MARKET_DATA_PROVIDER: "polygon"
|
|
RETENTION_RAW_MARKET_DAYS: "90"
|
|
RETENTION_RAW_NEWS_DAYS: "180"
|
|
RETENTION_RAW_FILINGS_DAYS: "365"
|
|
RETENTION_NORMALIZED_DAYS: "180"
|
|
RETENTION_LLM_PROMPTS_DAYS: "365"
|
|
RETENTION_LLM_RESULTS_DAYS: "365"
|
|
RETENTION_LAKEHOUSE_DAYS: "730"
|
|
RETENTION_AUDIT_DAYS: "730"
|
|
RETENTION_CLEANUP_INTERVAL_HOURS: "24"
|
|
RETENTION_BATCH_SIZE: "1000"
|
|
LOG_LEVEL: "INFO"
|
|
JSON_LOGS: "true"
|
|
DEPLOY_STAGE: ""
|
|
ALERT_SOURCE_FAILURE_THRESHOLD: "3"
|
|
ALERT_SOURCE_FAILURE_WINDOW_HOURS: "6"
|
|
ALERT_SCHEMA_FAILURE_RATE_THRESHOLD: "0.3"
|
|
ALERT_SCHEMA_FAILURE_WINDOW_HOURS: "1"
|
|
ALERT_LAKE_LAG_THRESHOLD_MINUTES: "60"
|
|
ALERT_BROKER_ERROR_THRESHOLD: "3"
|
|
ALERT_BROKER_ERROR_WINDOW_HOURS: "1"
|
|
ALERT_CHECK_INTERVAL_SECONDS: "120"
|
|
TRADING_ENABLED: "true"
|
|
TRADING_RISK_TIER: "moderate"
|
|
TRADING_ABSOLUTE_POSITION_CAP: "10000.0"
|
|
TRADING_MAX_OPEN_POSITIONS: "10"
|
|
TZ: "America/Los_Angeles"
|
|
|
|
## Secrets
|
|
secrets:
|
|
core:
|
|
POSTGRES_PASSWORD: "St0nks0racl3!"
|
|
MINIO_ACCESS_KEY: "AKIA6V7J3N9B5P0D2YQH"
|
|
MINIO_SECRET_KEY: "8fG3!v2rJ7$wN@9mLpQ6zXbC4tKdPqW1"
|
|
REDIS_PASSWORD: "SGaIkaf342Ljym7jChmqPY7i"
|
|
broker:
|
|
BROKER_API_KEY: "PKECQBNHD6ZLKEXZZVIFTOLX72"
|
|
BROKER_API_SECRET: "5pV8zfUn92zAUL4TAwFor3Lk8RqNBcRzN12Y1HJjU7Gn"
|
|
BROKER_BASE_URL: "https://paper-api.alpaca.markets"
|
|
market:
|
|
MARKET_DATA_API_KEY: "NPwKtrLvoBxcKt3Byp5PEvuZiBZU_d8E"
|
|
gmail:
|
|
GMAIL_SENDER: "celes@celestium.life"
|
|
GMAIL_RECIPIENT: "celes@celestium.life"
|
|
GMAIL_APP_PASSWORD: ""
|
|
dashboard:
|
|
SUPERSET_SECRET_KEY: ""
|
|
SUPERSET_ADMIN_PASSWORD: ""
|
|
|
|
## Ingress
|
|
ingress:
|
|
enabled: true
|
|
className: traefik
|
|
clusterIssuer: ca-issuer
|
|
hosts:
|
|
queryApi: stonks-api.celestium.life
|
|
symbolRegistry: stonks-registry.celestium.life
|
|
dashboard: stonks.celestium.life
|
|
superset: stonks-dash.celestium.life
|
|
trino: stonks-trino.celestium.life
|
|
tradingEngine: stonks-trading.celestium.life
|
|
|
|
## Analytics stack
|
|
trino:
|
|
enabled: true
|
|
resources:
|
|
requests: { cpu: 500m, memory: 1Gi }
|
|
limits: { cpu: "2", memory: 4Gi }
|
|
|
|
hiveMetastore:
|
|
enabled: true
|
|
storageSize: 1Gi
|
|
resources:
|
|
requests: { cpu: 200m, memory: 512Mi }
|
|
limits: { cpu: "1", memory: 1Gi }
|
|
|
|
superset:
|
|
enabled: true
|
|
storageSize: 2Gi
|
|
resources:
|
|
requests: { cpu: 200m, memory: 512Mi }
|
|
limits: { cpu: "1", memory: 2Gi }
|
|
|
|
## Specialist inference service (CPU-first NER/classification)
|
|
specialist:
|
|
enabled: true
|
|
replicas: 2
|
|
model: "urchade/gliner_large-v2.1"
|
|
maxBatchSize: "32"
|
|
maxWaitMs: "50.0"
|
|
maxQueueSize: "256"
|
|
testMode: "0"
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests:
|
|
cpu: "2"
|
|
memory: 4Gi
|
|
limits:
|
|
cpu: "6"
|
|
memory: 10Gi
|
|
|
|
## Network policies
|
|
networkPolicies:
|
|
enabled: true
|