Ingot

Configuration

Platform uses environment variables and protected configuration storage. Never commit passwords, tokens, or model keys to the repository.

Required configuration

{
  "Urls": "http://0.0.0.0:8000",
  "ConnectionStrings": {
    "Events": "Host=postgres;Database=ingot;Username=ingot;Password=<secret>"
  },
  "EventIngest": {
    "RequireToken": true,
    "EdgeTokens": {
      "EDGE-001": "<secret>"
    }
  },
  "Cors": {
    "AllowedOrigins": ["https://platform.example.com"]
  },
  "Chat": {
    "Enabled": true,
    "Provider": "OpenAI",
    "FastModel": "<fast-model>",
    "ReasoningModel": "<reasoning-model>",
    "MaxToolCalls": 8,
    "MaxRunSeconds": 60
  }
}

Every EventIngest:EdgeTokens key must match the batch request edgeId. Give every source-adaptation runtime an independent, rotatable token.

Chat data scope and production enablement

{
  "ChatDataAccess": {
    "Users": {
      "operator": { "AllowAll": true, "EdgeIds": [] }
    }
  }
}

Chat registers only check_data_quality and get_cycle_trace. Every platform-authenticated user needs an explicit record-data scope. Chat has no separate username or password; production establishes HttpContext.User through platform authentication middleware. The production Compose example gives operator AllowAll=true; restricted deployments can list explicit EdgeIds for a user in protected configuration.

Environment variables

ConnectionStrings__Events='Host=postgres;Database=ingot;Username=ingot;Password=<secret>'
EventIngest__RequireToken=true
EventIngest__EdgeTokens__EDGE-001='<secret>'
Cors__AllowedOrigins__0='https://platform.example.com'
Chat__Enabled=true
Chat__Provider=OpenAI
Chat__FastModel='<fast-model>'
Chat__ReasoningModel='<reasoning-model>'
OPENAI_API_KEY='<secret>'
ChatDataAccess__Users__operator__AllowAll=true

With Docker Compose, use these production variable names:

INGOT_CHAT_ENABLED=true
INGOT_CHAT_PROVIDER=OpenAI
INGOT_CHAT_FAST_MODEL='<fast-model>'
INGOT_CHAT_REASONING_MODEL='<reasoning-model>'
OPENAI_API_KEY='<secret>'
INGOT_CHAT_OPERATOR_ALLOW_ALL=true

The production validator requires an event-ingestion token, a CORS origin, OpenAI as the Chat provider, both Fast and Reasoning models, OPENAI_API_KEY, and at least one platform-user data scope. Inspection submission, visual review, and original-image access use the platform identity and roles directly; there is no inspection-specific username or access token. Model keys are read only from a secret store or environment variables. Logs do not record complete questions, answers, or sensitive tool parameters by default.

Runtime limits

  • Chat:MaxToolCalls: maximum read-only tool calls per conversation;
  • Chat:MaxRunSeconds: maximum duration of one conversation;
  • event batches: 1–500 events each;
  • event source: must start with edge/{edgeId}/;
  • when Chat is disabled or its authentication is not configured, Platform event, query, and inspection paths remain available.

See deployment and the production event specification.

View source on GitHub