From ecea2e8595e614d90aa40f0442114358ffdb4531 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Mon, 3 Aug 2026 15:30:00 +0200 Subject: [PATCH 1/4] docs(getting-started): fill in quickstart links, screenshot, and Anthropic SDK examples - Link provider setup to the env-var, config.yaml, and dashboard Providers docs - Add an "Add Provider" dashboard screenshot for the provider setup step - Add Python and JavaScript Anthropic SDK examples for /v1/messages - Fix grammar in the request-step intro and section headings Co-Authored-By: Claude Opus 5 (1M context) --- docs/getting-started/images/add-provider.png | Bin 0 -> 97174 bytes docs/getting-started/quickstart.mdx | 99 +++++++++++-------- 2 files changed, 59 insertions(+), 40 deletions(-) create mode 100644 docs/getting-started/images/add-provider.png diff --git a/docs/getting-started/images/add-provider.png b/docs/getting-started/images/add-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..355bfc4caf213e8aff9f0937d690d4c6fae89845 GIT binary patch literal 97174 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 jnC3dP@Hkhw}}Sc((A$Zh>s>2M{;% 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 ```bash curl -fsSL https://gomodel.enterpilot.io/install.sh | sh - GOMODEL_MASTER_KEY="change-me" OPENAI_API_KEY="sk-..." gomodel + gomodel ``` - - ```powershell irm https://gomodel.enterpilot.io/install.ps1 | iex - $env:GOMODEL_MASTER_KEY = "change-me"; $env:OPENAI_API_KEY = "sk-..."; gomodel + gomodel ``` - - ```bash - docker run --rm -p 8080:8080 \ - -e LOG_FORMAT=text \ - -e GOMODEL_MASTER_KEY="change-me" \ - -e OPENAI_API_KEY="sk-..." \ - enterpilot/gomodel + docker run --rm -p 8080:8080 enterpilot/gomodel ``` - - [https://demo.enterpilot.io/admin/dashboard](https://demo.enterpilot.io/admin/dashboard?utm_source=gomodel_docs) -### 2. Send your first request +### 2. Set up a provider -Use `curl` or the OpenAI SDKs for Python and JavaScript against the same -OpenAI-compatible endpoint: +You can do this with an [environment variable](/advanced/configuration#auto-discovery-from-environment-variables), +a [config.yaml file](/advanced/config-yaml) (infrastructure as code), or from +the Dashboard's [Providers page](/providers/overview#configuring-providers-without-env-vars) - +(no restart required in this case). + +![Add Provider dialog in the GoModel dashboard](./images/add-provider.png) + +### 3. Send your first request + +Use `curl`, the OpenAI SDK, or the Anthropic SDK for Python and JavaScript +against the same gateway: @@ -98,33 +90,60 @@ const completion = await client.chat.completions.create({ console.log(completion.choices[0].message.content); ``` - +```python Python (Anthropic) +import anthropic -### 3. Open the Admin Panel +client = anthropic.Anthropic( + base_url="http://localhost:8080", + api_key="change-me", +) -Open this URL in your browser: +message = client.messages.create( + model="claude-sonnet-4-6", + max_tokens=256, + messages=[{"role": "user", "content": "Say hello in one sentence."}], +) -`http://localhost:8080/admin/dashboard` +print(message.content[0].text) +``` - - Dashboard UI is enabled by default (`ADMIN_UI_ENABLED=true`). Admin API - endpoints are at `/admin/*` and use the same bearer auth as the main - API. - +```javascript JavaScript (Anthropic) +import Anthropic from "@anthropic-ai/sdk"; -## Verify Models +const client = new Anthropic({ + baseURL: "http://localhost:8080", + apiKey: "change-me", +}); -List currently available models: +const message = await client.messages.create({ + model: "claude-sonnet-4-6", + max_tokens: 256, + messages: [{ role: "user", content: "Say hello in one sentence." }], +}); -```bash -curl -s http://localhost:8080/v1/models \ - -H "Authorization: Bearer change-me" +console.log(message.content[0].text); ``` -Use one of those model IDs in your requests. + + + + The Anthropic SDK examples call `POST /v1/messages`, GoModel's + [Anthropic-compatible endpoint](/advanced/anthropic-messages-api). Any + configured provider's model can be used there, not only Anthropic's. + ## Admin Panel Preview +Open this URL in your browser to see the management dashboard and real-time audit logs and more: + +`http://localhost:8080/admin/dashboard` + + + Dashboard UI is enabled by default (`ADMIN_UI_ENABLED=true`). Admin API + endpoints are at `/admin/*` and use the same bearer auth as the main + API. + + ### Usage Analytics ![GoModel AI gateway usage analytics dashboard](./images/usage-analytics.png) From bac0428c5b2f4b90e86f60a3d31c3ab5b85ac38c Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Mon, 3 Aug 2026 16:09:09 +0200 Subject: [PATCH 2/4] docs(getting-started): add production deployment page Adds a production-grade deployment checklist covering footprint and serverless suitability, storage backend choice, credential handling, air-gapped operation, multi-replica behavior, retention, observability, and hardening. Also adds the missing icon to the Session Keeping feature page. Co-Authored-By: Claude Opus 5 (1M context) --- docs/docs.json | 3 +- docs/features/session-keeping.mdx | 1 + docs/getting-started/production.mdx | 380 ++++++++++++++++++++++++++++ 3 files changed, 383 insertions(+), 1 deletion(-) create mode 100644 docs/getting-started/production.mdx diff --git a/docs/docs.json b/docs/docs.json index 92ae7a98..faf0463d 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -79,7 +79,8 @@ "group": "Getting Started", "icon": "rocket", "pages": [ - "getting-started/quickstart" + "getting-started/quickstart", + "getting-started/production" ] }, { diff --git a/docs/features/session-keeping.mdx b/docs/features/session-keeping.mdx index fe29a2af..017144e4 100644 --- a/docs/features/session-keeping.mdx +++ b/docs/features/session-keeping.mdx @@ -1,6 +1,7 @@ --- title: "Session Keeping" description: "Group requests from one client session for sticky load balancing and threaded audit logs" +icon: "pin" --- Coding agents and chat apps send many requests that belong to one logical diff --git a/docs/getting-started/production.mdx b/docs/getting-started/production.mdx new file mode 100644 index 00000000..cd5ca20a --- /dev/null +++ b/docs/getting-started/production.mdx @@ -0,0 +1,380 @@ +--- +title: "Production Deployment" +description: "A production-grade deployment checklist for GoModel: storage backends, credential handling, air-gapped installs, multi-replica behavior, retention, and hardening." +icon: "server-cog" +keywords: ["production", "deployment", "self-hosted", "air-gapped", "offline", "Kubernetes", "hardening", "security"] +--- + +This page collects the best practices for running GoModel in production. The +[Quick Start](/getting-started/quickstart) gets you serving traffic in a minute; +this page covers what to decide before that install carries real load. + +Each section states the default, when the default is fine, and when you should +change it. A condensed [checklist](#production-checklist) is at the end. + +## Small enough to run anywhere + +GoModel is a single static Go binary with no runtime dependencies. It is built +`CGO_ENABLED=0` and ships on `distroless/static`, so the container has no shell, +no package manager, and no libc to patch. + +| | GoModel | +| --- | --- | +| Container image (compressed) | `16 MB` | +| Peak RAM under load | `37 MB` | +| Cold start | `0.56 s` | + +Those numbers are from the [benchmarks](/about/benchmarks) page, measured +against other gateways on identical hardware. + +The practical consequence is that GoModel fits comfortably where size and cold +starts are penalized: Cloud Run, Fargate, Container Apps, Fly.io, container +Lambdas, or a small VM next to your app. It does not need a dedicated node pool. + + + Scale-to-zero and autoscaling environments change two things. Local disk is + ephemeral, so SQLite is not a valid backend there (see + [storage](#choose-a-storage-backend)), and several in-memory controls are + multiplied by the number of live instances (see + [multiple replicas](#running-more-than-one-replica)). + + +## Choose a storage backend + +GoModel persists audit logs, usage records, budgets, virtual models, managed API +keys, and other admin state through `STORAGE_TYPE`. + +| Backend | `STORAGE_TYPE` | Use it when | +| --- | --- | --- | +| SQLite (default) | `sqlite` | A single instance with a durable local disk or a mounted volume. | +| PostgreSQL | `postgresql` | More than one replica, or you already operate Postgres. The usual production choice. | +| MongoDB | `mongodb` | You already operate MongoDB and prefer it over Postgres. | + +SQLite is the default so GoModel works with zero configuration, and it is a real +production option for a single instance with a persistent volume. It removes a +network hop and a component to operate. + +It stops being viable in two cases: more than one replica, and any runtime whose +filesystem does not survive a restart. Two SQLite replicas do not share a +database, they each get their own, so usage, budgets, and managed API keys +diverge silently. A key created on one pod does not exist on the other. + +SQLite also runs with a single open connection by design, to keep one writer and +avoid lock contention. Every audit flush, usage flush, and budget check +serializes through it, which is a throughput ceiling under sustained load. + +For Postgres, `POSTGRES_MAX_CONNS` defaults to `10`. Raise it first if you run +high concurrency with budgets or rate limits enabled. + + + **The Docker image does not declare a volume.** The default database path + resolves to `/app/data/gomodel.db` inside the image, which is an image-layer + directory. Without an explicit volume mount, every audit log, usage record, + budget, managed API key, and stored credential is lost when the container is + replaced. Always mount a volume at `/app/data`, or move to Postgres/MongoDB. + + +The default SQLite path is `./data/gomodel.db` when a `./data` directory already +exists next to the binary, and the OS per-user data directory otherwise. That +makes the default path dependent on the working directory, so set `SQLITE_PATH` +explicitly in production. The resolved path is printed at startup as +`storage configured`. See +[Where does GoModel store its data?](/about/faq#where-does-gomodel-store-its-data). + +### Redis + +Redis is optional. It backs the shared model catalog snapshot and the exact +[response cache](/features/cache). Without it, GoModel uses an in-process cache +plus a local file cache, which is correct but not shared between replicas. Add +Redis when several replicas should share discovery results and cache hits. + + + If a Redis model cache is configured and Redis is unreachable **at startup**, + the gateway fails to start. Losing Redis later is only a degraded condition. + Take that into account when ordering service startup. + + +Redis does not coordinate rate limits or budgets. It is a cache, not a +distributed lock. + +## Provider credentials + +GoModel takes provider credentials from environment variables, from +`config.yaml`, or from the dashboard's Providers page. All three work. They do +not carry the same risk. + +**For production, configure providers through environment variables and supply +the values from your secret manager.** Inject them with AWS Secrets Manager, +Google Secret Manager, Azure Key Vault, HashiCorp Vault, or a Kubernetes Secret +populated by the External Secrets Operator or the Secrets Store CSI driver. + +There are two reasons, and the second is the one people miss. + +**Secrets stay out of the database.** Provider credentials saved from the +dashboard are persisted to the `provider_credentials` store as plaintext. There +is no encryption at rest, and the `***` masking is applied on the read path +only: it stops a key being displayed back over the admin API, but the stored +value is readable to anyone with the database file, a backup, a snapshot, or a +read replica. The same is true of MCP server headers. Credentials declared via +environment variables or `config.yaml` are never written to the store at all. + +**Config-declared providers cannot be edited at runtime.** A provider declared +in env or `config.yaml` is read-only in the dashboard. A provider stored in the +database can be edited by anyone holding a dashboard-capable key, including its +`base_url`. Repointing `base_url` at an attacker-controlled host silently +redirects every prompt and the injected upstream key to it. Declaring providers +as code means that change can only arrive through your deploy pipeline. + + + An environment variable is only as good as its source. A key baked into a + `Dockerfile`, a committed `.env`, or a compose file is worse than the + dashboard, not better. The point is that the value is delivered at runtime by + a secret manager that owns its rotation, access control, and audit trail. + + Environment variables are also visible through `/proc//environ`, + `docker inspect`, and crash dumps, so restrict who can exec into the container + or describe the pod. + + +GoModel does not support a `_FILE` convention for reading secrets from +mounted files, with the single exception of the Vertex AI +`SERVICE_ACCOUNT_FILE`. If your secret tooling mounts files, materialize them +into environment variables in your entrypoint. + +The dashboard path stays the right choice for development, evaluations, and +adding a provider without a redeploy. If you use it in production, treat the +database as credential material: encrypt the volume, restrict access, and +classify backups accordingly. + +### Other credential handling + +- **Managed API keys** are stored as a SHA-256 hash of a high-entropy random + secret, never recoverably. The plaintext is shown once at creation. This is + deliberately different from provider credentials. +- **Client credential headers are redacted before they are persisted.** With + `LOGGING_LOG_HEADERS=true`, `Authorization`, `x-api-key`, `Cookie`, and the + other credential headers are replaced with `[REDACTED]` on the write path, so + the audit store never receives them. +- **Set `GOMODEL_MASTER_KEY`.** If it is empty and no managed keys exist, every + request is allowed through unauthenticated, and `/admin/*` is added to the + auth skip list as a lockout-recovery path. An internet-reachable gateway in + that state hands anyone the full admin API. + +### TLS + +GoModel does not terminate TLS. It serves plain HTTP and expects a reverse proxy +or load balancer in front of it. Run one for any deployment that is not +loopback-only: without it, client API keys, managed gateway keys, and the master +key all cross the network in cleartext. + +There is also no CORS middleware, so browser clients on another origin cannot +call the gateway directly. Add the headers at your proxy if you need that. + +## Air-gapped and offline deployments + +**GoModel runs fully air-gapped.** There is no telemetry, no phone-home, no +update check, and no license check. The admin dashboard is embedded in the +binary and its fonts are vendored, so the UI loads no CDN assets. Paired with +local model servers such as [Ollama](/providers/multiple-ollama) or +[vLLM](/providers/vllm), the gateway needs no route to the public internet. + +There is exactly one outbound call that is not to a configured provider: the +model metadata registry at `MODEL_LIST_URL`, which supplies pricing, context +windows, and capabilities. It is fetched in a background goroutine at startup +and again on each cache refresh. + +That fetch is best-effort. When it fails the gateway boots normally, `/health` +and `/health/ready` return `200`, provider discovery still works because model +lists come from each provider's own `/models` endpoint, and requests route +normally. What you lose is metadata enrichment. + + + Without metadata enrichment, models have **no pricing**. Cost tracking then + reports no cost, and since [budgets](/features/budgets) read spend from usage + cost records, budgets have nothing to charge against and will not enforce + spend limits. + + Fix it either by mirroring the model list internally and pointing + `MODEL_LIST_URL` at your mirror, or by declaring pricing per model under + `providers..models[].metadata.pricing` in `config.yaml`. + + + + Setting `MODEL_LIST_URL=""` does **not** disable the fetch. Empty environment + values are skipped when overrides are applied, so the compiled-in default URL + survives. To disable it, set `cache.model.model_list.url: ""` in + `config.yaml`. To redirect it, point `MODEL_LIST_URL` at an internal mirror. + + +If a Bedrock provider is configured, the AWS SDK may also probe the link-local +instance metadata endpoint (`169.254.169.254`) for credentials. An air-gapped +install would not configure Bedrock, but it is worth knowing. + +## Running more than one replica + +Request handling is stateless, so replicas need no affinity for ordinary +traffic. Several features, however, keep state in process memory and do not +coordinate across instances. + +| State | Scope | Consequence at N replicas | +| --- | --- | --- | +| [Budgets](/features/budgets) enforcement | Durable (database) | Correct across replicas. Spend is read from the shared usage table. | +| [Usage and cost records](/features/cost-tracking) | Durable (database) | Aggregated correctly. | +| Audit logs | Durable (database) | Complete across replicas. | +| [Rate limits](/features/rate-limits) | In-memory, per instance | Effective limit is about `N x` the configured limit. Counters reset on restart. | +| Circuit breakers | In-memory, per process | Each replica learns an outage separately, so upstream sees up to `N x failure_threshold` failures before any breaker opens. | +| [Session affinity](/features/session-keeping) pins | In-memory, per instance | Sessions stick per replica, not globally, unless the load balancer is sticky. | +| Live log buffer | In-memory, per instance | A connected dashboard sees only that replica's live traffic, roughly `1/N` of it. History still comes from the database. | +| MCP downstream sessions | In-memory, per instance | An `Mcp-Session-Id` from one replica returns 404 on another. [MCP](/features/mcp-gateway) clients need sticky sessions. | +| Provider request health | In-memory, per instance | Dashboard provider status reflects the replica that answered. | + +The one that surprises people is rate limits: they are an in-process control, so +three replicas with a 100 rpm rule admit up to 300 rpm in aggregate. Size rules +per replica, and use [budgets](/features/budgets) as the durable cross-instance +control since they read from the shared database. + +### Config changes do not propagate instantly + +Admin-managed configuration is durable in the database but served from an +in-memory snapshot on each replica. A change saved in the dashboard updates the +replica that handled the request immediately. Other replicas pick it up on their +own refresh cadence, and two of them have none. + +| Changed in the dashboard | Reaches other replicas after | +| --- | --- | +| Budget definitions | **Restart only** | +| Rate limit rules | **Restart only** | +| Virtual models | Up to `CACHE_REFRESH_INTERVAL` (1 hour by default) | +| Managed API keys | Up to 60 seconds | +| Guardrails, workflows, failover, pricing overrides | About 60 seconds | + + + Two of these matter operationally. **Revoking a managed API key can take up to + a minute to take effect on other replicas.** And **a budget or rate limit rule + created in the dashboard does not reach other replicas until they restart**, + so with three replicas a new budget initially governs a third of your traffic. + + If you run several replicas, declare budgets and rate limits as code in + `config.yaml` or environment variables so they are loaded identically at boot, + and restart after dashboard changes. + + +### Health probes and shutdown + +GoModel exposes liveness and readiness separately, and the binary can probe +itself, which works in a distroless image with no shell or `curl`. + +| Purpose | HTTP | CLI | Checks | +| --- | --- | --- | --- | +| Liveness | `GET /health` | `gomodel --health` | Nothing. Confirms the listener answers. | +| Readiness | `GET /health/ready` | `gomodel --ready` | Storage (503 if down), Redis (degraded, still 200). | + +Point Kubernetes readiness at `/health/ready`, not `/health`. A Helm chart is +included in the repository under `helm/`; check its probe paths and its +`replicaCount` against the storage backend you chose before using it as-is. + + + Readiness does not wait for the model catalog, which loads asynchronously. A + fresh pod can report ready while `GET /v1/models` is still empty and the first + requests fail. Allow for that in rollout settings, or warm pods before + shifting traffic. + + +On `SIGTERM` the gateway drains in-flight HTTP work for 10 seconds, then +finishes teardown within 30 seconds, flushing buffered usage and audit entries +on the way out. Neither timeout is configurable. In-flight streamed responses +are cut at the 10 second mark, so a long completion in progress during a rolling +deploy will be truncated. Set `terminationGracePeriodSeconds` above 30 (45 is a +reasonable choice) so the teardown is not racing SIGKILL. + +## Data retention and disk growth + +Audit logging and usage tracking write a row per request, and both sweep hourly. + +| Setting | Default | Notes | +| --- | --- | --- | +| `LOGGING_RETENTION_DAYS` | `30` | Audit entries older than this are removed. | +| `USAGE_RETENTION_DAYS` | `90` | Usage records older than this are removed. | +| `LOGGING_LOG_BODIES` | `true` | Captures full request and response bodies, up to 1 MB each. | + + + `LOGGING_LOG_BODIES` is on by default and stores complete prompt and response + bodies with no content redaction. It is excellent for debugging and it is by + far the largest contributor to database growth: up to about 2 MB per request, + retained for 30 days. It also means anything sensitive a user types into a + prompt is persisted for the full retention window. + + In regulated environments, or anywhere prompts carry personal data, set + `LOGGING_LOG_BODIES=false` and keep the metadata-only audit trail. + + +Two further points at volume: + +- **Usage and audit writes are buffered and dropped, not blocked, when the + buffer fills.** A burst or a slow database can silently lose usage entries, + which means lost cost data and under-charged budgets. The only signal is a + `usage log buffer full` warning in the logs, so alert on it. +- **Budget checks query the usage table on every request.** Keep + `USAGE_RETENTION_DAYS` tight when budgets are enabled, and prefer Postgres + over SQLite, whose single connection makes this the dominant cost. + +Retention deletes rows but does not shrink a SQLite file. Vacuum it separately +if the file size matters. + +## Observability + +- **Metrics are off by default.** Set `METRICS_ENABLED=true` to expose + Prometheus metrics at `METRICS_ENDPOINT` (`/metrics`). The endpoint is + unauthenticated, so keep it inside your perimeter. See the + [Prometheus guide](/guides/prometheus-metrics). +- **Logs are JSON automatically when stdout is not a TTY**, so containers get + structured logs with no configuration. Set `LOG_FORMAT` explicitly to override. + `LOG_LEVEL` defaults to `info`; an invalid value fails startup. +- **`gomodel_circuit_breaker_state`** is the gauge to alert on for provider + health. It updates per request, so an idle provider keeps its last observed + value. +- **Request duration for streaming responses measures time to stream + establishment**, not total stream duration. Read stream latency panels with + that in mind. +- **There are no token or cost metrics in Prometheus.** Spend and token + accounting live in the usage database, the dashboard, and + [`GET /v1/usage`](/advanced/usage-api). Alert on spend from budgets, not from + Prometheus. + +## Hardening notes + +- **Put the admin surface behind your perimeter.** The dashboard and `/admin/*` + are served on the same port as the model API and cannot be moved to a separate + listener. Restrict them at the proxy or network level, or disable them with + `ADMIN_ENDPOINTS_ENABLED=false`. The dashboard shell and its static assets skip + auth by design; only the data they load is gated. +- **Restrict the database file.** The SQLite data directory is created `0755` + and the database file with default permissions, so on a shared host it can be + world-readable. Run GoModel as a dedicated user and tighten permissions, + especially if any credentials are stored through the dashboard. +- **Keep `BODY_SIZE_LIMIT` sane.** It defaults to `10M` and is what stops an + oversized body becoming a memory-exhaustion vector. An unparseable value falls + back to the default with only a warning, so check the spelling. +- **Leave `pprof` disabled.** It is off by default and unauthenticated when on. +- **Scope managed API keys.** Give each consumer its own key with its own + [user path](/features/user-path), which is also what makes per-consumer rate + limits and budgets possible. Grant `dashboard_access` only where needed. + +## Production checklist + +- Set `GOMODEL_MASTER_KEY` to a strong value. +- Terminate TLS in a proxy in front of the gateway. +- Restrict `/admin/*`, the dashboard, and `/metrics` at the network perimeter. +- Use Postgres or MongoDB for more than one replica or any ephemeral filesystem; + with SQLite, mount a volume and set `SQLITE_PATH`. +- Declare providers in environment variables or `config.yaml`, with values from + a secret manager. +- Declare budgets and rate limits as code when running several replicas, and + size rate limit rules per replica. +- Decide on `LOGGING_LOG_BODIES` and set retention windows deliberately. +- Point readiness at `/health/ready` and set + `terminationGracePeriodSeconds` above 30. +- Enable metrics and alert on `gomodel_circuit_breaker_state` and on + `usage log buffer full`. +- For air-gapped installs, mirror `MODEL_LIST_URL` or declare model pricing in + config so cost tracking and budgets keep working. From 12104b74467e45752fb7932cf72c1c2900bdb455 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Tue, 4 Aug 2026 09:24:19 +0200 Subject: [PATCH 3/4] docs: move production guide to Guides, fix model list and sqlite path docs - Move the Production Deployment page from Getting Started to Guides, and link it from the Quick Start next steps - .env.template: an empty MODEL_LIST_URL does not disable the model list fetch, since empty env values are skipped; document the config.yaml form - FAQ: the SQLite path override is SQLITE_PATH, not GOMODEL_SQLITE_PATH Co-Authored-By: Claude Opus 5 (1M context) --- .env.template | 5 ++++- docs/about/faq.mdx | 2 +- docs/docs.json | 4 ++-- docs/getting-started/quickstart.mdx | 1 + docs/{getting-started => guides}/production.mdx | 0 5 files changed, 8 insertions(+), 4 deletions(-) rename docs/{getting-started => guides}/production.mdx (100%) diff --git a/.env.template b/.env.template index 1605c1fc..cce42543 100644 --- a/.env.template +++ b/.env.template @@ -166,7 +166,10 @@ # GOMODEL_CACHE_DIR=.cache # External model metadata registry (provides pricing, capabilities, context window, etc.) -# Set to empty string to disable (default: ENTERPILOT/ai-model-list on GitHub) +# Default: ENTERPILOT/ai-model-list on GitHub. Point this at an internal mirror +# for air-gapped installs. Setting it to an empty string here does NOT disable +# the fetch (empty env values are skipped, so the default survives) -- to +# disable it, set cache.model.model_list.url: "" in config.yaml. # MODEL_LIST_URL=https://raw.githubusercontent.com/ENTERPILOT/ai-model-list/refs/heads/main/models.min.json # Model Access Configuration diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index 09934607..badc0988 100644 --- a/docs/about/faq.mdx +++ b/docs/about/faq.mdx @@ -75,7 +75,7 @@ Otherwise the binary uses your OS's conventional per-user directories: | Windows | `%LocalAppData%\gomodel\` | `%LocalAppData%\gomodel\cache\` | The resolved database path is printed at startup (`storage configured`), and -`GOMODEL_SQLITE_PATH` / `GOMODEL_CACHE_DIR` override it. Available from +`SQLITE_PATH` / `GOMODEL_CACHE_DIR` override it. Available from v0.1.54; older binaries always use `./data` relative to the working directory. diff --git a/docs/docs.json b/docs/docs.json index faf0463d..9237e6b2 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -79,8 +79,7 @@ "group": "Getting Started", "icon": "rocket", "pages": [ - "getting-started/quickstart", - "getting-started/production" + "getting-started/quickstart" ] }, { @@ -146,6 +145,7 @@ "tab": "Guides", "icon": "compass", "pages": [ + "guides/production", "guides/openai-agents-sdk", "guides/openclaw", "guides/claude-code", diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index abf1420e..7375f4e6 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -154,6 +154,7 @@ Open this URL in your browser to see the management dashboard and real-time audi ## Next Steps +- Take it to production: [Production Deployment](/guides/production) - Update, pin a version, or uninstall: [FAQ](/about/faq) - Understand response caching: [Cache](/features/cache) - Add spend limits: [Budgets](/features/budgets) diff --git a/docs/getting-started/production.mdx b/docs/guides/production.mdx similarity index 100% rename from docs/getting-started/production.mdx rename to docs/guides/production.mdx From f29fe807d88353931a087f9b7b2824313b1e1d82 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Tue, 4 Aug 2026 09:31:59 +0200 Subject: [PATCH 4/4] docs: address review feedback on production guide and FAQ - FAQ: SQLITE_PATH overrides the database path, GOMODEL_CACHE_DIR the model cache directory; the previous wording grouped both as path overrides - Grammar fixes in the production guide Co-Authored-By: Claude Opus 5 (1M context) --- docs/about/faq.mdx | 5 +++-- docs/guides/production.mdx | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index badc0988..a557a961 100644 --- a/docs/about/faq.mdx +++ b/docs/about/faq.mdx @@ -74,8 +74,9 @@ Otherwise the binary uses your OS's conventional per-user directories: | macOS | `~/Library/Application Support/gomodel/` | `~/Library/Caches/gomodel/` | | Windows | `%LocalAppData%\gomodel\` | `%LocalAppData%\gomodel\cache\` | -The resolved database path is printed at startup (`storage configured`), and -`SQLITE_PATH` / `GOMODEL_CACHE_DIR` override it. Available from +The resolved database path is printed at startup (`storage configured`). +`SQLITE_PATH` overrides the database path, and `GOMODEL_CACHE_DIR` overrides the +model cache directory. Available from v0.1.54; older binaries always use `./data` relative to the working directory. diff --git a/docs/guides/production.mdx b/docs/guides/production.mdx index cd5ca20a..b63133d4 100644 --- a/docs/guides/production.mdx +++ b/docs/guides/production.mdx @@ -15,7 +15,7 @@ change it. A condensed [checklist](#production-checklist) is at the end. ## Small enough to run anywhere GoModel is a single static Go binary with no runtime dependencies. It is built -`CGO_ENABLED=0` and ships on `distroless/static`, so the container has no shell, +with `CGO_ENABLED=0` and ships on `distroless/static`, so the container has no shell, no package manager, and no libc to patch. | | GoModel | @@ -283,7 +283,7 @@ included in the repository under `helm/`; check its probe paths and its On `SIGTERM` the gateway drains in-flight HTTP work for 10 seconds, then finishes teardown within 30 seconds, flushing buffered usage and audit entries on the way out. Neither timeout is configurable. In-flight streamed responses -are cut at the 10 second mark, so a long completion in progress during a rolling +are cut at the 10-second mark, so a long completion in progress during a rolling deploy will be truncated. Set `terminationGracePeriodSeconds` above 30 (45 is a reasonable choice) so the teardown is not racing SIGKILL.