Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions docs/about/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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
`GOMODEL_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.

Expand Down
1 change: 1 addition & 0 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@
"tab": "Guides",
"icon": "compass",
"pages": [
"guides/production",
"guides/openai-agents-sdk",
"guides/openclaw",
"guides/claude-code",
Expand Down
1 change: 1 addition & 0 deletions docs/features/session-keeping.mdx
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Binary file added docs/getting-started/images/add-provider.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
100 changes: 60 additions & 40 deletions docs/getting-started/quickstart.mdx
Original file line number Diff line number Diff line change
@@ -1,58 +1,50 @@
---
title: "Quick Start"
description: "GoModel AI gateway quick start: run an OpenAI-compatible LLM gateway in 30 seconds, send your first request, and open the admin panel."
description: "GoModel AI gateway: run an OpenAI-compatible LLM gateway in 20 seconds, send your first request and see the real-time logs."
icon: "rocket"
keywords: ["quick start", "install", "getting started", "AI gateway setup", "Docker"]
---

import ProviderCredentialsNote from "/snippets/provider-credentials-note.mdx";

## Run GoModel in 30 Seconds

GoModel is an OpenAI-compatible AI gateway. You can connect one endpoint and
route traffic across OpenAI, Anthropic, Gemini, DeepSeek, xAI, Groq, OpenRouter, Kilo AI,
Z.ai, Azure OpenAI, Oracle GenAI, Ollama, and more while keeping auth, audit logs, and
admin visibility in one place.
## Run GoModel in 20 Seconds

### 1. Install and start GoModel

<Tabs>
<Tab title="macOS / Linux">
```bash
curl -fsSL https://gomodel.enterpilot.io/install.sh | sh
GOMODEL_MASTER_KEY="change-me" OPENAI_API_KEY="sk-..." gomodel
gomodel
Comment on lines 15 to +16

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Pin and verify the startup artifacts.

Lines 15 and 21 download mutable remote scripts and execute them immediately. Line 27 pulls an untagged mutable image. A compromised artifact hosting or publishing path can execute code on the user's machine.

Publish versioned artifacts with a signed checksum or platform signature. Document verification before script execution. Pin the Docker image by digest.

Also applies to: 21-22, 27-27

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/getting-started/quickstart.mdx` around lines 15 - 16, Update the
quickstart installation commands to use versioned, immutable startup scripts
instead of mutable remote URLs, and document verifying their signed checksum or
platform signature before execution. Replace the untagged Docker image reference
with a pinned digest, preserving the existing installation and startup flow.

```

<ProviderCredentialsNote />
</Tab>
<Tab title="Windows">
```powershell
irm https://gomodel.enterpilot.io/install.ps1 | iex
$env:GOMODEL_MASTER_KEY = "change-me"; $env:OPENAI_API_KEY = "sk-..."; gomodel
gomodel
```

<ProviderCredentialsNote />
</Tab>
<Tab title="Docker">
```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
```

<ProviderCredentialsNote />
</Tab>
Comment on lines 12 to 29

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security Unauthenticated quick-start gateway

The startup commands omit GOMODEL_MASTER_KEY. In a fresh installation with no managed keys, this makes /admin/* unauthenticated: an external client can read and modify provider configuration without credentials. The production guide warns about this state, but the primary Quick Start still directs users into it and later incorrectly states that admin endpoints use bearer authentication. Require a master key in the Quick Start, or prevent admin routes from being exposed when no key is configured.

Artifacts

Validation script for protected and no-master-key gateway states

  • This executable source starts clean isolated gateway instances and issues the unauthenticated admin requests, ending with the reproducible validation procedure.

Admin endpoint response with a master key configured

  • The executed baseline capture shows an unauthenticated provider-credentials request returning HTTP 401 and the missing-credentials message, ending with authentication enforced.

Admin endpoint responses without a master key or managed keys

  • The executed clean-state capture shows unauthenticated provider listing and a safe disabled-provider mutation both returning HTTP 200, ending with confirmed unauthenticated configuration access.

View artifacts

T-Rex Ran code and verified through T-Rex

<Tab title="Live Demo" icon="monitor-play">
[https://demo.enterpilot.io/admin/dashboard](https://demo.enterpilot.io/admin/dashboard?utm_source=gomodel_docs)
</Tab>
</Tabs>

### 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).
Comment on lines +35 to +40

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Add one self-contained provider configuration example.

These lines only link to other configuration pages. A new user cannot configure a provider from this Quick Start page.

Show one supported provider environment-variable example. State the required credential variable and the matching model value. Keep the YAML and Dashboard links as alternatives.

As per coding guidelines, **/*.{md,mdx} must “Write concise, practical, user-focused documentation showing defaults, override conditions, and minimal useful examples.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/getting-started/quickstart.mdx` around lines 35 - 40, Update the “Set up
a provider” section to include one self-contained supported provider
environment-variable example, explicitly showing the required credential
variable and matching model value. Keep the existing config.yaml and Dashboard
links as alternative configuration methods, and present the example concisely
for new users.

Source: Coding guidelines


![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:

<CodeGroup>

Expand Down Expand Up @@ -98,33 +90,60 @@ const completion = await client.chat.completions.create({
console.log(completion.choices[0].message.content);
```

</CodeGroup>
```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)
```

<Tip>
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.
</Tip>
```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.
</CodeGroup>

<Tip>
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.
</Tip>

## 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`

<Tip>
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.
</Tip>

### Usage Analytics

![GoModel AI gateway usage analytics dashboard](./images/usage-analytics.png)
Expand All @@ -135,6 +154,7 @@ Use one of those model IDs in your requests.

## 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)
Expand Down
Loading