diff --git a/docs/advanced/guardrails.mdx b/docs/advanced/guardrails.mdx index 53ff41e05..d1f10e376 100644 --- a/docs/advanced/guardrails.mdx +++ b/docs/advanced/guardrails.mdx @@ -37,6 +37,32 @@ guardrails: That's it. Every request now gets the safety prompt prepended to its system instructions. +## Manage from the Dashboard + +Guardrail definitions can also be created and edited from the admin +dashboard instead of `config.yaml` — useful for iterating on rules without a +redeploy, or for operators who don't manage this repo's config directly. + +GoModel dashboard Guardrails page with a Guardrail Library summary card and an empty Instances list with a Create Guardrail button + +Open **Guardrails** in the sidebar and click **Create Guardrail** to add an +instance: give it a name, pick a type (`system_prompt` or +`llm_based_altering`), optionally scope it to a `user_path`, and fill in the +type-specific settings described below. `config.yaml` entries are seeded into +the same store at startup and stay in sync with it, so dashboard-created and +config-declared guardrails appear side by side. + + + Runtime guardrail execution still depends on `GUARDRAILS_ENABLED`. With it + off, the page still lets you manage definitions — they just don't run on + live traffic yet. + + ## How It Works {/* Client Request → Extract messages → Guardrails Pipeline (order 0 → order 1 → ...) → Apply back → LLM Provider */} diff --git a/docs/advanced/guardrails.png b/docs/advanced/guardrails.png new file mode 100644 index 000000000..c9a5e95a9 Binary files /dev/null and b/docs/advanced/guardrails.png differ diff --git a/docs/features/auth-keys-labels.png b/docs/features/auth-keys-labels.png new file mode 100644 index 000000000..054c4318a Binary files /dev/null and b/docs/features/auth-keys-labels.png differ diff --git a/docs/features/budgets.mdx b/docs/features/budgets.mdx index 192ef67f9..6e036dd53 100644 --- a/docs/features/budgets.mdx +++ b/docs/features/budgets.mdx @@ -49,6 +49,16 @@ You can create budgets in the dashboard: Budgets -> Create Budget ``` +GoModel dashboard Budgets page listing per-user-path monthly, weekly, and daily budgets with spend bars and remaining amounts + +Set the **user path**, **period**, and **amount** in the form. Each row on the +Budgets page then shows spend as a percentage of the limit, the amount spent +versus the cap, and the remaining balance for the current period. Dashboard-created budgets are marked as `manual`. Budgets loaded from YAML or environment variables are marked as `config`. diff --git a/docs/features/budgets.png b/docs/features/budgets.png new file mode 100644 index 000000000..521fb379b Binary files /dev/null and b/docs/features/budgets.png differ diff --git a/docs/features/failover-generate.png b/docs/features/failover-generate.png new file mode 100644 index 000000000..81b19224d Binary files /dev/null and b/docs/features/failover-generate.png differ diff --git a/docs/features/failover.mdx b/docs/features/failover.mdx index 3d8ab97fe..f2241dcf1 100644 --- a/docs/features/failover.mdx +++ b/docs/features/failover.mdx @@ -7,7 +7,7 @@ keywords: ["failover", "fallback"] GoModel dashboard virtual model editor with weighted targets and the load-balancing strategy dropdown open @@ -58,6 +58,21 @@ compatibility inputs. They are accepted but ignored by runtime failover. The Dashboard can generate suggested mappings from model metadata, but suggestions must be saved as manual mappings before they affect traffic. +Two ways to reach the generator in the dashboard: + +- Per model: open a model's row on the **Models** page and click the + shuffle icon to edit its failover mapping, then **Generate automatically** + to populate suggested fallback models before **Save**. +- For everything at once: **Settings -> Failover -> Generate failover models + automatically** proposes mappings for every eligible model in one pass. + +GoModel dashboard Settings page Failover section with Generate failover models automatically and Remove all the failover models buttons + ## When It Runs Failover is attempted only after the primary request returns: diff --git a/docs/features/labelling.mdx b/docs/features/labelling.mdx index c63e5cab4..d3ec40e8a 100644 --- a/docs/features/labelling.mdx +++ b/docs/features/labelling.mdx @@ -23,6 +23,17 @@ Assign labels when creating a key in the admin dashboard: `API Keys -> Create API Key -> Labels` +GoModel dashboard API Keys page with a Labels column showing chips like env:demo, team:engineering, and priority:high for each key + +The **API Keys** page lists every managed key with its labels as chips next +to its user path, so you can see attribution at a glance without opening +each key. Click **Edit Labels** on a row to change them later. + Or via the admin API: ```bash @@ -57,6 +68,18 @@ Tagging rules name headers whose values carry labels. Manage them in the dashboard (`Settings -> Tagging based on headers`) or declare them as infrastructure-as-code: +GoModel dashboard Settings page Tagging based on headers form with two header rows (X-Team, X-Environment) and prefix, delimiter, and do-not-pass-upstream fields + +Click **Add Header**, name the header your clients will send (for example +`X-Team`), optionally set a prefix to trim and a delimiter, then **Save +Tagging Settings**. Check **Do not pass upstream** for headers that should be +stripped before the request reaches the provider. + ```yaml config.yaml tagging: headers: diff --git a/docs/features/mcp-gateway.mdx b/docs/features/mcp-gateway.mdx index 8506e5926..fb9f21aea 100644 --- a/docs/features/mcp-gateway.mdx +++ b/docs/features/mcp-gateway.mdx @@ -65,6 +65,30 @@ Servers can be managed in the dashboard (**MCP Servers** page) or declared as infrastructure-as-code — declarative entries override same-slug dashboard rows and are read-only there: +GoModel dashboard MCP Servers page listing two servers with their transport, endpoint, status, tool count, and enabled toggle + +### Add a server from the dashboard + +Open **MCP Servers** and click **Add MCP Server**. Fill in: + +- **Name** — human-facing; you can rename it later. +- **Transport** — `http` (streamable HTTP, default) or `sse` (legacy). +- **URL** — the upstream MCP endpoint. +- **Headers** — upstream credentials (for example `Authorization: Bearer …`); + saved values are shown redacted afterward. +- Optional **allowed/disallowed tools** and **user paths** to scope + visibility, the same fields available in `config.yaml`. + +Save to connect immediately. Use the row's refresh icon to force a +**Reconnect**, the list icon to open the catalog inspector, and the pencil +icon to edit. Rows added this way accept edits and deletes; rows sourced from +`config.yaml` or `MCP_SERVERS` show as read-only here. + Dashboard-managed servers have two identifiers: - **Name** is human-facing, accepts Unicode, and can be edited later. diff --git a/docs/features/mcp-servers.png b/docs/features/mcp-servers.png new file mode 100644 index 000000000..db8eabb3f Binary files /dev/null and b/docs/features/mcp-servers.png differ diff --git a/docs/features/rate-limits.mdx b/docs/features/rate-limits.mdx index 121825e39..e7eefd1a4 100644 --- a/docs/features/rate-limits.mdx +++ b/docs/features/rate-limits.mdx @@ -61,9 +61,18 @@ In the dashboard: Rate Limits -> Create Rate Limit ``` +GoModel dashboard Rate Limits page listing user-path, provider, and model rules with live usage bars for requests, tokens, and concurrency + Pick the scope (user path, provider, or model), the subject, a period, and the caps. Dashboard-created rules are marked `manual`. Rules loaded from YAML or environment variables are marked `config` and are read-only in the dashboard. +Each row shows live usage against its limit; the reset icon clears just that +rule's counters, and the trash icon deletes the rule (which also resets it). The Models page has a gauge button on every model row and provider header that opens the same limits for that subject in context: the model's own rules, the diff --git a/docs/features/rate-limits.png b/docs/features/rate-limits.png new file mode 100644 index 000000000..824ffc178 Binary files /dev/null and b/docs/features/rate-limits.png differ diff --git a/docs/features/tagging-headers.png b/docs/features/tagging-headers.png new file mode 100644 index 000000000..e2cc8b64d Binary files /dev/null and b/docs/features/tagging-headers.png differ diff --git a/docs/features/user-path.mdx b/docs/features/user-path.mdx index d0a5d2b82..1d00c15a4 100644 --- a/docs/features/user-path.mdx +++ b/docs/features/user-path.mdx @@ -18,6 +18,16 @@ You can bind a user path to a managed API key in the admin dashboard: `API Keys -> Create API Key -> User Path` +GoModel dashboard API Keys page with a User Path column showing values like /agents/team1, /engineering/ai, and /sales/john + +The **API Keys** page lists each key's bound `user_path` alongside its +labels, so you can confirm which subtree a key resolves to at a glance. + When a request uses that key, GoModel treats the key's `user_path` as the effective user path for the request. diff --git a/docs/getting-started/images/audit-logs.png b/docs/getting-started/images/audit-logs.png index e0b158012..f78dcac2b 100644 Binary files a/docs/getting-started/images/audit-logs.png and b/docs/getting-started/images/audit-logs.png differ diff --git a/docs/getting-started/images/usage-analytics.png b/docs/getting-started/images/usage-analytics.png index c46582763..dad474934 100644 Binary files a/docs/getting-started/images/usage-analytics.png and b/docs/getting-started/images/usage-analytics.png differ