From 5c19d972d2b360a23ff65a3784014e6dafab7e89 Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 26 Jun 2026 11:56:20 +0400 Subject: [PATCH] Docs revamp --- docs/components/ToolCards.jsx | 20 +- docs/content/Agents/_meta.js | 4 + docs/content/Agents/api.mdx | 48 +++++ docs/content/Agents/notifications.mdx | 91 +++++++++ docs/content/Agents/openai-compatible.mdx | 162 +++++++++++++++- docs/content/Agents/webhooks.mdx | 22 +++ docs/content/Deploying/Access-Control.mdx | 149 +++++++++++++++ docs/content/Deploying/DocsGPT-Settings.mdx | 48 +++++ docs/content/Deploying/OIDC-SSO.mdx | 17 ++ docs/content/Deploying/_meta.js | 4 + docs/content/Guides/Architecture.mdx | 17 +- docs/content/Models/cloud-providers.mdx | 21 ++- docs/content/Models/embeddings.md | 38 +++- docs/content/Sources/GraphRAG.mdx | 114 +++++++++++ .../Sources/Per-source-configuration.mdx | 177 ++++++++++++++++++ docs/content/Sources/Wiki-sources.mdx | 96 ++++++++++ docs/content/Sources/_meta.js | 14 ++ docs/content/Tools/basics.mdx | 80 ++++++-- docs/content/_meta.js | 1 + .../graph-rag-settings-before-upload.png | Bin 0 -> 104854 bytes docs/public/sources-settings-screen.png | Bin 0 -> 96099 bytes docs/public/toolIcons/tool_duckduckgo.svg | 1 + docs/public/toolIcons/tool_mcp_tool.svg | 4 + docs/public/toolIcons/tool_memory.svg | 3 + docs/public/toolIcons/tool_notes.svg | 1 + docs/public/toolIcons/tool_remote_device.svg | 7 + docs/public/toolIcons/tool_todo_list.svg | 1 + 27 files changed, 1101 insertions(+), 39 deletions(-) create mode 100644 docs/content/Agents/notifications.mdx create mode 100644 docs/content/Deploying/Access-Control.mdx create mode 100644 docs/content/Sources/GraphRAG.mdx create mode 100644 docs/content/Sources/Per-source-configuration.mdx create mode 100644 docs/content/Sources/Wiki-sources.mdx create mode 100644 docs/content/Sources/_meta.js create mode 100644 docs/public/graph-rag-settings-before-upload.png create mode 100644 docs/public/sources-settings-screen.png create mode 100644 docs/public/toolIcons/tool_duckduckgo.svg create mode 100644 docs/public/toolIcons/tool_mcp_tool.svg create mode 100644 docs/public/toolIcons/tool_memory.svg create mode 100644 docs/public/toolIcons/tool_notes.svg create mode 100644 docs/public/toolIcons/tool_remote_device.svg create mode 100644 docs/public/toolIcons/tool_todo_list.svg diff --git a/docs/components/ToolCards.jsx b/docs/components/ToolCards.jsx index edf73ae6..be5c9e89 100644 --- a/docs/components/ToolCards.jsx +++ b/docs/components/ToolCards.jsx @@ -4,12 +4,18 @@ import Image from 'next/image'; const iconMap = { 'API Tool': '/toolIcons/tool_api_tool.svg', - 'Brave Search Tool': '/toolIcons/tool_brave.svg', - 'Cryptoprice Tool': '/toolIcons/tool_cryptoprice.svg', - 'Ntfy Tool': '/toolIcons/tool_ntfy.svg', - 'PostgreSQL Tool': '/toolIcons/tool_postgres.svg', - 'Read Webpage Tool': '/toolIcons/tool_read_webpage.svg', - 'Telegram Tool': '/toolIcons/tool_telegram.svg' + 'Brave Search': '/toolIcons/tool_brave.svg', + 'DuckDuckGo Search': '/toolIcons/tool_duckduckgo.svg', + 'CryptoPrice': '/toolIcons/tool_cryptoprice.svg', + 'Ntfy': '/toolIcons/tool_ntfy.svg', + 'Telegram Bot': '/toolIcons/tool_telegram.svg', + 'PostgreSQL Database': '/toolIcons/tool_postgres.svg', + 'Read Webpage (browser)': '/toolIcons/tool_read_webpage.svg', + 'Remote Device': '/toolIcons/tool_remote_device.svg', + 'MCP Tool': '/toolIcons/tool_mcp_tool.svg', + 'Memory': '/toolIcons/tool_memory.svg', + 'Notepad': '/toolIcons/tool_notes.svg', + 'Todo List': '/toolIcons/tool_todo_list.svg' }; @@ -19,7 +25,7 @@ export function ToolCards({ items }) {
{items.map(({ title, link, description }) => { const isExternal = link.startsWith('https://'); - const iconSrc = iconMap[title] || '/default-icon.png'; // Default icon if not found + const iconSrc = iconMap[title]; // No icon rendered when the tool has none return (
` | Download the agent as a `*.agent.yaml` file. | +| `POST` | `/api/import_agent/plan` | Dry-run an import: parse a YAML file and return a resolution plan without creating anything. | +| `POST` | `/api/import_agent` | Import a YAML file, creating the agent as a **draft**. | + +```bash +# Export +curl -L "https://your-docsgpt/api/export_agent?id=" \ + -H "Authorization: Bearer " -o my-agent.agent.yaml + +# Preview what an import would do +curl -X POST https://your-docsgpt/api/import_agent/plan \ + -H "Authorization: Bearer " \ + --data-binary @my-agent.agent.yaml + +# Import (creates a draft agent) +curl -X POST https://your-docsgpt/api/import_agent \ + -H "Authorization: Bearer " \ + --data-binary @my-agent.agent.yaml +``` + +Notes: + +- **Secrets are stripped on export** — API keys and tool credentials are never written into the YAML, so you re-enter them after import. +- The **plan** endpoint resolves references (sources, tools, prompts) and reports what will be created or matched, so you can review before committing. +- Imported tool URLs are validated against SSRF protections, the same as when creating tools normally. +- **Workflow agents cannot be exported yet** — exporting one returns `400`. + +## Searching Conversations + +Search across your conversations by name and message content: + +```text +GET /api/search_conversations?q=&limit=30 +``` + +| Parameter | Default | Description | +| --- | --- | --- | +| `q` | — (required) | Case-insensitive substring to search for. | +| `limit` | `30` | Max results (max `100`). | + +Each result includes a `match_field` (`name`, `prompt`, or `response`) and a `match_snippet` showing the matched text in context, in addition to the fields returned by `/api/get_conversations`. diff --git a/docs/content/Agents/notifications.mdx b/docs/content/Agents/notifications.mdx new file mode 100644 index 00000000..fd70cfc5 --- /dev/null +++ b/docs/content/Agents/notifications.mdx @@ -0,0 +1,91 @@ +--- +title: Realtime Events & Notifications (SSE) +description: Subscribe to DocsGPT's server-sent events channel for live notifications — ingestion progress, tool approvals, MCP OAuth completion — and reconnect to an in-flight chat answer. +--- + +import { Callout } from 'nextra/components' + +# Realtime Events & Notifications + +DocsGPT pushes realtime updates to the browser over **Server-Sent Events (SSE)**. This is what powers the upload toasts, tool-approval prompts, and other live notifications in the UI. There are two channels: + +- **User events** — `GET /api/events`: a per-user notification stream (ingestion progress, tool approvals, MCP OAuth completion, â€Ļ). +- **Chat reconnect** — `GET /api/messages//events`: resume an answer stream that was interrupted mid-generation. + + +Both channels require Redis (already a DocsGPT dependency). The publisher can be turned off instance-wide with `ENABLE_SSE_PUSH=false`. + + +## User events channel + +Open an SSE connection to receive notifications for the authenticated user: + +```text +GET /api/events +Accept: text/event-stream +Authorization: Bearer +``` + +Each event is a JSON object with a `type` field, for example: + +```text +id: 1718900000000-0 +data: {"type":"source.ingest.queued","scope":{"id":""}, ...} +``` + +Common event types: + +| Type | Meaning | +| --- | --- | +| `source.ingest.queued` | A source ingestion task was enqueued (drives the upload toast). | +| `mcp.oauth.completed` | An MCP server's OAuth handshake finished. | +| tool-approval events | An agent is requesting approval to run a tool. | +| `backlog.truncated` | The client's cursor slid off the retained backlog window — clear your cursor and refetch state. | + +### Reconnecting and backlog replay + +Events are journaled per user in a Redis Stream so a client that reconnects can catch up on what it missed. Send the last id you processed and DocsGPT replays everything after it: + +```text +GET /api/events +Last-Event-ID: 1718900000000-0 +``` + +(You may also pass it as a `last_event_id` query parameter.) Each delivered event carries its own `id:`, so your cursor advances as you read. If you fall a long way behind, the snapshot is delivered across several reconnects rather than all at once. + +A few bounded behaviors to be aware of: + +- The backlog is capped at `EVENTS_STREAM_MAXLEN` entries (default 1000). If your `Last-Event-ID` is older than the oldest retained entry, you receive a `backlog.truncated` event — reset your cursor and refetch current state. +- Each snapshot is capped at `EVENTS_REPLAY_MAX_PER_REQUEST` entries per request (default 200); reconnect to continue. +- There is a per-user cap on simultaneous connections (`SSE_MAX_CONCURRENT_PER_USER`, default 8) and a windowed replay budget. Exceeding either returns **HTTP 429** — back off and retry. + +## Chat answer reconnect + +When an answer is streaming and the connection drops, resume it without losing the in-progress generation: + +```text +GET /api/messages//events +``` + +This replays the message's events past your last-seen sequence number and tails the rest live. It is backed by the Postgres `message_events` journal (retained for `MESSAGE_EVENTS_RETENTION_DAYS`, default 14). + + +The chat reconnect endpoint is a native-async route served by the ASGI entrypoint. Under a plain `flask run` dev server it returns `404`; run the backend via the ASGI app (`uvicorn application.asgi:asgi_app`) or the production gunicorn uvicorn worker to use it. See the [Development Environment](/Deploying/Development-Environment) guide. + + +## Settings + +| Setting | Default | Purpose | +| --- | --- | --- | +| `ENABLE_SSE_PUSH` | `true` | Master switch for the publisher and channel. | +| `EVENTS_STREAM_MAXLEN` | `1000` | Per-user backlog cap (approximate). | +| `SSE_KEEPALIVE_SECONDS` | `15` | Keepalive comment-frame cadence (keep below your proxy's idle timeout). | +| `SSE_MAX_CONCURRENT_PER_USER` | `8` | Max simultaneous SSE connections per user (`0` disables the cap). | +| `EVENTS_REPLAY_MAX_PER_REQUEST` | `200` | Max backlog entries per replay request. | +| `EVENTS_REPLAY_BUDGET_REQUESTS_PER_WINDOW` | `30` | Per-user replay requests per window (`0` disables). | +| `EVENTS_REPLAY_BUDGET_WINDOW_SECONDS` | `60` | Replay budget window length. | +| `MESSAGE_EVENTS_RETENTION_DAYS` | `14` | Retention for the chat-stream `message_events` journal. | + + +Operators debugging delivery issues ("the toast never appeared", "the answer didn't reconnect") can follow the SSE notifications runbook in the repository at `docs/runbooks/sse-notifications.md`. + diff --git a/docs/content/Agents/openai-compatible.mdx b/docs/content/Agents/openai-compatible.mdx index 8cfb18b4..f2bc171e 100644 --- a/docs/content/Agents/openai-compatible.mdx +++ b/docs/content/Agents/openai-compatible.mdx @@ -1,6 +1,6 @@ --- title: OpenAI-Compatible API -description: Connect any OpenAI-compatible client to DocsGPT Agents via /v1/chat/completions. +description: Connect any OpenAI-compatible client to DocsGPT Agents via /v1/chat/completions — streaming, structured output, multimodal, tool calling, reasoning, and idempotent retries. --- import { Callout, Tabs } from 'nextra/components'; @@ -58,7 +58,7 @@ Authenticate with `Authorization: Bearer `. ## Streaming -Set `"stream": true`. You'll receive SSE chunks with `choices[0].delta.content`. DocsGPT-specific events (sources, tool calls) arrive as extra frames with a `docsgpt` key — standard clients ignore them. +Set `"stream": true`. You'll receive SSE chunks with `choices[0].delta.content`. DocsGPT-specific events (sources, tool calls) arrive as extra frames that carry a top-level `docsgpt` key on an otherwise-empty chunk — standard clients ignore them. ```python stream = client.chat.completions.create( @@ -70,6 +70,135 @@ for chunk in stream: print(chunk.choices[0].delta.content or "", end="", flush=True) ``` +## Sampling Parameters + +Standard OpenAI sampling parameters are forwarded to the model. When omitted, the agent's configured defaults apply. Supported: `temperature`, `max_tokens` (or `max_completion_tokens`), `top_p`, `frequency_penalty`, `presence_penalty`, `stop`, `seed`. + +```json +{ + "model": "docsgpt-agent", + "messages": [{"role": "user", "content": "Write a haiku about search"}], + "temperature": 0.2, + "max_tokens": 256, + "seed": 42 +} +``` + +## Structured Output + +You can force the model to return JSON matching a schema, using either the OpenAI `response_format` field or the `response_schema` convenience field. + + + + ```json + { + "model": "docsgpt-agent", + "messages": [{"role": "user", "content": "Extract the order id and total"}], + "response_format": { + "type": "json_schema", + "json_schema": { + "name": "order", + "strict": true, + "schema": { + "type": "object", + "properties": { + "order_id": {"type": "string"}, + "total": {"type": "number"} + }, + "required": ["order_id", "total"] + } + } + } + } + ``` + + + ```json + { + "model": "docsgpt-agent", + "messages": [{"role": "user", "content": "Extract the order id and total"}], + "response_schema": { + "type": "object", + "properties": { + "order_id": {"type": "string"}, + "total": {"type": "number"} + }, + "required": ["order_id", "total"] + } + } + ``` + + + +- `response_format` follows OpenAI Structured Outputs. `strict` defaults to `true`; set `strict: false` to relax enforcement. +- `response_format: {"type": "json_object"}` requests JSON without a fixed schema (the model is steered by the prompt). +- `response_schema` is a DocsGPT convenience: pass a raw JSON Schema object (or a `{"schema": {...}}` wrapper) directly. + +## Multimodal Input (text + images) + +User messages may use OpenAI typed-content arrays with `image_url` parts. Images are forwarded to vision-capable models. + +```json +{ + "model": "docsgpt-agent", + "messages": [ + { + "role": "user", + "content": [ + {"type": "text", "text": "What's in this screenshot?"}, + {"type": "image_url", "image_url": {"url": "https://example.com/shot.png"}} + ] + } + ] +} +``` + +## Tool Calling (client-side, stateless) + +You can register your own tools and execute them on the client. The flow is stateless — OpenAI clients that don't carry a `conversation_id` re-send the full message history each turn, and DocsGPT rebuilds the agent from it. + +1. Send a request with a `tools` array. +2. If the agent decides to call a tool, the response comes back with `finish_reason: "tool_calls"` and a `tool_calls` array (and `content: null`). +3. Execute the tool(s) on your side, then **re-POST the full message history** with the assistant's `tool_calls` message followed by `role: "tool"` result messages. +4. DocsGPT continues the run and returns the final answer. + +```json +{ + "model": "docsgpt-agent", + "messages": [ + {"role": "user", "content": "What's the weather in Paris?"}, + {"role": "assistant", "tool_calls": [ + {"id": "call_1", "type": "function", + "function": {"name": "get_weather", "arguments": "{\"city\":\"Paris\"}"}} + ]}, + {"role": "tool", "tool_call_id": "call_1", "content": "18°C, clear"} + ], + "tools": [ { "type": "function", "function": { "name": "get_weather", "...": "..." } } ] +} +``` + +## Reasoning + +For models that emit reasoning ("thinking") tokens, the response surfaces them in a non-standard `reasoning_content` field (a `reasoning_content` delta when streaming). Standard clients ignore it; clients that understand it can display the model's thinking separately from the answer. + +## Idempotent Retries + +Add an `Idempotency-Key` header so a retried request returns the *stored first response* instead of re-running the agent (which would duplicate the answer and double-bill tokens). + +```bash +curl -X POST http://localhost:7091/v1/chat/completions \ + -H "Authorization: Bearer your_agent_api_key" \ + -H "Idempotency-Key: 8f1c...unique-per-request" \ + -H "Content-Type: application/json" \ + -d '{"model":"docsgpt-agent","messages":[{"role":"user","content":"hi"}]}' +``` + +- **Opt-in** — no header means today's behavior (every request runs). +- **Non-streaming only** — streaming replay is not supported. +- A completed key **replays the cached body** (and status) for **24 hours**. +- A request with a key whose first attempt is **still in flight** returns **HTTP 409**. +- Keys are scoped per agent and capped at **256 characters** (oversized keys are rejected). + ## System Prompt Override System messages are **dropped by default** — the agent's configured prompt is used. To allow callers to override it, enable **Allow prompt override** in the agent's Advanced settings. @@ -80,13 +209,30 @@ When an override is active, the agent's prompt template is replaced wholesale ## Conversation Persistence -Conversations are **always persisted** server-side, and the response includes -`docsgpt.conversation_id`. They never appear in the agent owner's sidebar — -`/v1` traffic is stored hidden, so external clients can't clutter the owner's -conversation list. +Conversations are **always persisted** server-side, and the response includes `docsgpt.conversation_id`. They never appear in the agent owner's sidebar — `/v1` traffic is stored hidden, so external clients can't clutter the owner's conversation list. -The legacy `{ "docsgpt": { "save_conversation": true } }` opt-in from older -releases (when `/v1` was stateless by default) is deprecated and ignored. +Stateless tool continuations (no `conversation_id`, e.g. opencode) skip persistence by default to avoid writing orphan rows; set `docsgpt.persist` to override. The legacy `docsgpt.save_conversation` flag from older releases is deprecated and ignored. + +## DocsGPT Extension Fields + +DocsGPT adds an optional `docsgpt` object to both requests and responses for features outside the OpenAI schema. + +**Request** (`docsgpt.*`): + +| Field | Description | +| --- | --- | +| `attachments` | List of attachment IDs to include as context for this turn. | +| `persist` | Force-enable/disable conversation persistence (mainly for stateless tool continuations). | + +**Response** (`docsgpt.*`): + +| Field | Description | +| --- | --- | +| `conversation_id` | Server-side conversation ID for this exchange. | +| `sources` | RAG sources used to answer. | +| `tool_calls` | Completed tool-call results from the run. | + +When streaming, these arrive on otherwise-empty chunks that carry a top-level `docsgpt` key, so strict OpenAI clients still validate each frame. ## When to Use Native Endpoints Instead diff --git a/docs/content/Agents/webhooks.mdx b/docs/content/Agents/webhooks.mdx index 814690b5..3ba61382 100644 --- a/docs/content/Agents/webhooks.mdx +++ b/docs/content/Agents/webhooks.mdx @@ -88,6 +88,28 @@ Send an HTTP `POST` request to the agent's unique webhook URL with the required +### Triggering with GET (query parameters) + +The webhook listener also accepts `GET` requests, mapping the query string to the payload. This is handy for systems that can only issue a simple `GET` (for example a "ping this URL" integration): + +```bash +curl "http://localhost:7091/api/webhooks/agents/your_webhook_token?question=Your+message+to+agent" +``` + +As with `POST`, the response is a JSON object containing the `task_id`. + +### Preventing duplicate triggers (Idempotency-Key) + +To make a trigger safe to retry, send an optional `Idempotency-Key` header. If the same key is seen again within 24 hours, DocsGPT does not enqueue a second task — it returns the **original** `task_id` instead. This prevents a retried or double-fired webhook from running the agent twice. + +```bash +curl -X POST \ + http://localhost:7091/api/webhooks/agents/your_webhook_token \ + -H "Content-Type: application/json" \ + -H "Idempotency-Key: order-4567-created" \ + -d '{"question": "Your message to agent"}' +``` + ### Step 2: Poll for the Result Once you have the `task_id`, periodically send a `GET` request to the `/api/task_status` endpoint until the task `status` is `SUCCESS` or `FAILURE`. diff --git a/docs/content/Deploying/Access-Control.mdx b/docs/content/Deploying/Access-Control.mdx new file mode 100644 index 00000000..1c452004 --- /dev/null +++ b/docs/content/Deploying/Access-Control.mdx @@ -0,0 +1,149 @@ +--- +title: Access Control, Roles & Teams +description: How DocsGPT models permissions — global admin/user roles (RBAC), the admin dashboard, teams with per-team roles, and sharing agents, sources, prompts, and tools. +--- + +import { Callout } from 'nextra/components' + +# Access Control, Roles & Teams + +DocsGPT has two independent permission planes: + +- **Global RBAC** — every user holds the `admin` or `user` role for the whole instance. Admins can manage other users and see instance-wide usage and audit data. +- **Team roles** — within a team a user is a `team_admin` or `team_member`, and resources can be shared to teams or individual members. + +The two planes never mix: a global `admin` is a superuser over *all* teams, but a `team_admin` is **not** a global admin. + + +Roles are resolved **server-side on every request** and are never trusted from the JWT. The frontend route guards are cosmetic — the server-side decorators are the real boundary. Persisted roles apply under `AUTH_TYPE=oidc`; token-only modes (`simple_jwt`, `session_jwt`) can never hold the admin role. + + +## Global roles (RBAC) + +| Role | Capabilities | +| --- | --- | +| `user` | The default. Owns their own conversations, sources, agents, prompts, and tools. | +| `admin` | Everything a user can do, plus the [admin dashboard](#admin-dashboard): user management, force-logout, role management, and instance-wide usage/audit. | + +To see the roles the current request resolves to, call: + +```text +GET /api/user/me → { "user_id": "...", "roles": ["user"], "email": "...", "name": "...", "picture": "..." } +``` + +This is the canonical way to check a caller's effective roles (distinct from `/api/config`, which only reports the instance `auth_type`). + +## Granting admin + +There are four ways an account becomes an admin: + +1. **The `grant_admin` script** — run `python scripts/grant_admin.py ` on the server to grant (or `--revoke` / `--list`) the admin role directly. This is the canonical bootstrap for the first admin. +2. **OIDC group mapping** — `OIDC_ADMIN_GROUPS` auto-grants admin to members of the listed IdP groups. See [below](#admin-via-oidc-groups). +3. **Local no-auth mode** — `LOCAL_MODE_ADMIN=true` grants admin when `AUTH_TYPE=None` (self-host, no authentication). +4. **Grant by an existing admin** — through the admin API/dashboard. + +| Setting | Default | Description | +| --- | --- | --- | +| `OIDC_ADMIN_GROUPS` | — | Comma-separated IdP groups whose members are granted the global `admin` role. Re-checked at every login and silent renewal. Unset = no OIDC admin mapping. | +| `LOCAL_MODE_ADMIN` | `false` | Grants admin in no-auth mode only (`AUTH_TYPE=None`). | + + +**Never set `LOCAL_MODE_ADMIN=true` on a networked deployment.** It only makes sense for a single-user local install with `AUTH_TYPE=None`, where there is no identity to check. + + +### Bootstrapping the first admin + +Granting admin through the dashboard itself requires *already being* an admin, which creates a chicken-and-egg problem on a fresh deployment. Break it one of these ways: + +- **Run the script** on the server: `python scripts/grant_admin.py ` (the `user_id` is the OIDC `sub`). The grant is written to `user_roles` with `source='manual'` and takes effect on the user's next request. Use `--list` to see current admins and `--revoke` to remove a manual grant. +- Set `OIDC_ADMIN_GROUPS` to a group you belong to, and sign in — you become an admin automatically. +- For a no-auth local install, use `LOCAL_MODE_ADMIN=true`. + +### Admin via OIDC groups + +When `OIDC_ADMIN_GROUPS` is set, group membership is mapped to the admin role at every sign-in *and* every [silent renewal](/Deploying/OIDC-SSO#silent-session-renewal) — so removing a user from the admin group revokes their admin at the next renewal, just like the [sign-in allowlist](/Deploying/OIDC-SSO#restricting-sign-in-by-group). It is independent of `OIDC_ALLOWED_GROUPS` (which controls *whether* a user may sign in at all). Leaving `OIDC_ADMIN_GROUPS` unset never mass-revokes admin. + +```env +OIDC_ADMIN_GROUPS=platform-admins +# OIDC_GROUPS_CLAIM=groups # only if your IdP uses a different claim name +``` + +If your IdP only exposes groups via the userinfo endpoint, DocsGPT backfills them from there during reconciliation, the same as the allowlist. + +## Admin dashboard + +Admins get a dashboard backed by a REST surface under `/api/admin` (every endpoint requires the admin role). All mutating actions are written to the `auth_events` audit log with the acting admin recorded in the metadata. + +| Method | Path | Description | +| --- | --- | --- | +| `GET` | `/api/admin/overview` | Instance overview counts. | +| `GET` | `/api/admin/users` | List users (paginated; supports a `user_id` filter). | +| `GET` | `/api/admin/users/` | Drill into a single user. | +| `PATCH` | `/api/admin/users/` | Activate / deactivate a user (deactivation revokes their sessions). | +| `POST` | `/api/admin/users//role` | Grant the admin role (guards against removing the last admin). | +| `DELETE` | `/api/admin/users//role` | Revoke the admin role. | +| `POST` | `/api/admin/users//revoke-sessions` | Force-logout a user. | +| `GET` | `/api/admin/admins` | List current admins. | +| `GET` | `/api/admin/usage` | Token-usage series and top users. | +| `GET` | `/api/admin/audit` | Authentication/admin audit feed. | +| `GET` | `/api/admin/devices/audit` | Remote-device audit feed. | +| `GET` | `/api/admin/teams` | Instance-wide oversight of all teams. | + + +Deactivating a user via the dashboard works for any auth type, while OIDC deployments can also offboard through [SCIM](/Deploying/OIDC-SSO#scim-user-provisioning). Both revoke live sessions immediately. + + +## Teams + +Teams let a group of users collaborate and share resources. Teams are self-serve — any user can create one and manage its membership. + +### Team roles + +| Role | Capabilities | +| --- | --- | +| `team_member` | Belongs to the team; can use resources shared with the team. | +| `team_admin` | Manages membership and team settings. Implies `team_member`. | + +The team **owner** is a distinct concept from `team_admin`: ownership can be transferred, and a global `admin` is treated as a superuser over every team. + +### Managing a team + +| Method | Path | Description | +| --- | --- | --- | +| `GET` / `POST` | `/api/teams` | List your teams / create a team. | +| `GET` / `PATCH` / `DELETE` | `/api/teams/` | Read, update, or delete a team. | +| `GET` / `POST` | `/api/teams//members` | List members / add a member. | +| `PATCH` / `DELETE` | `/api/teams//members/` | Change a member's role / remove (or leave). | +| `POST` | `/api/teams//transfer_owner` | Transfer ownership. | + +Membership and removal are guarded so a team can never be left without an admin (the last-admin guard). + + +Members are added by email (or subject id). The invitee **must have signed in at least once** so DocsGPT can resolve them to a user account. + + +## Sharing resources with a team + +Four resource types can be shared: **agents**, **sources**, **prompts**, and **tools**. Sharing is **additive** — it grants access to others without changing ownership. + +| Method | Path | Description | +| --- | --- | --- | +| `GET` / `POST` / `DELETE` | `/api/teams//grants` | List, create, or revoke a share within a team. | +| `GET` | `/api/resource_shares` | List shares visible to the caller. | + +Sharing rules: + +- Only the **owner** of a resource can share it. +- A share targets either the **whole team** or a **single member**. +- Each share carries an access level: **`viewer`** (read-only) or **`editor`** (read and modify). +- `editor` is not the same as owner — an editor can change a resource but cannot delete it or re-share it. +- Shared tools run server-side with the **owner's** credentials; a grantee never sees the owner's secrets. + +## Audit log + +Access-control actions are appended to the `auth_events` table alongside the [authentication events](/Deploying/OIDC-SSO#login-auditing). This includes admin actions — `admin_user_activated` / `admin_user_deactivated`, `admin_sessions_revoked`, `role_granted` / `role_revoked` (with `metadata.source` = `manual` or `oidc_group`) — and team events (`team.create`, `team.member_add`, `team.member_role`, `team.member_remove`, `team.share`, `team.unshare`, `team.transfer_owner`, `team.delete`). The acting admin is recorded in the event metadata. + +## Related + +- [SSO with OIDC](/Deploying/OIDC-SSO) — sign-in, group allowlists, and the `auth_events` table. +- [App Configuration](/Deploying/DocsGPT-Settings) — the full settings reference. diff --git a/docs/content/Deploying/DocsGPT-Settings.mdx b/docs/content/Deploying/DocsGPT-Settings.mdx index c7e3595a..452ea6ed 100644 --- a/docs/content/Deploying/DocsGPT-Settings.mdx +++ b/docs/content/Deploying/DocsGPT-Settings.mdx @@ -388,6 +388,54 @@ gated by CI/CD). migration path. +## Retrieval & RAG Settings + +These control how sources are retrieved and whether the advanced RAG features are available. See [Per-Source Configuration](/Sources/Per-source-configuration) and [GraphRAG](/Sources/GraphRAG) for details. + +| Setting | Default | Description | +| --- | --- | --- | +| `RETRIEVERS_ENABLED` | `["classic", "default"]` | Allow-list of retrievers usable instance-wide. Valid keys: `classic`, `default`, `hybrid`, `graphrag`. A per-source `retriever` must be within this list. | +| `PER_SOURCE_RETRIEVAL_ENABLED` | `true` | Master switch for per-source retrieval config. When `false`, all sources fall back to the classic retriever regardless of their stored config. | +| `GRAPHRAG_ENABLED` | `false` | Enable [GraphRAG](/Sources/GraphRAG). Requires `VECTOR_STORE=pgvector`. | +| `GRAPHRAG_EXTRACTION_MODEL` | unset | Model used for ingest-time graph extraction. Unset reuses the instance default model. | +| `GRAPHRAG_MAX_CHUNKS_FOR_EXTRACTION` | `2000` | Hard cap on chunks extracted per source (cost control). | + +## Embeddings Settings + +See [Embeddings](/Models/embeddings) for full guidance. + +| Setting | Default | Description | +| --- | --- | --- | +| `EMBEDDINGS_NAME` | `huggingface_sentence-transformers/all-mpnet-base-v2` | The embedding model. | +| `EMBEDDINGS_BASE_URL` | unset | Base URL of a remote OpenAI-compatible embeddings server. Setting it routes all embedding calls there. | +| `EMBEDDINGS_KEY` | unset | Optional bearer token for the remote embeddings server. | +| `EMBEDDINGS_MAX_INPUT_TOKENS` | unset | Truncate each remote embedding input to N tokens (guards servers that reject oversized inputs). | + +## Tools Settings + +| Setting | Default | Description | +| --- | --- | --- | +| `DEFAULT_CHAT_TOOLS` | `["memory", "read_webpage", "scheduler"]` | Tools enabled automatically in regular (agentless) chats. See [Tools Basics](/Tools/basics#default-chat-tools). | + +## Admin & Access Settings + +See [Access Control, Roles & Teams](/Deploying/Access-Control) for the full model. + +| Setting | Default | Description | +| --- | --- | --- | +| `OIDC_ADMIN_GROUPS` | unset | Comma-separated IdP groups granted the global `admin` role (OIDC only). | +| `LOCAL_MODE_ADMIN` | `false` | Grants admin in no-auth mode (`AUTH_TYPE=None`) only. **Never enable on a networked deployment.** | + +## LLM Provider Settings + +| Setting | Default | Description | +| --- | --- | --- | +| `OPENAI_RESPONSES_STORE` | `false` | When `true`, allows OpenAI to persist [Responses API](/Models/cloud-providers#openai-responses-api-and-reasoning) state server-side. | + +## Realtime Events Settings + +The realtime notifications channel has its own settings — see [Realtime Events & Notifications](/Agents/notifications) (`ENABLE_SSE_PUSH`, `EVENTS_STREAM_MAXLEN`, `SSE_MAX_CONCURRENT_PER_USER`, and related). + ## Exploring More Settings These are just the basic settings to get you started. The `settings.py` file contains many more advanced options that you can explore to further customize DocsGPT, such as: diff --git a/docs/content/Deploying/OIDC-SSO.mdx b/docs/content/Deploying/OIDC-SSO.mdx index 04c44d1b..377ea929 100644 --- a/docs/content/Deploying/OIDC-SSO.mdx +++ b/docs/content/Deploying/OIDC-SSO.mdx @@ -43,6 +43,7 @@ Sessions last `OIDC_SESSION_LIFETIME_SECONDS` (8 hours by default) and renew wit | `OIDC_SESSION_LIFETIME_SECONDS` | no | `28800` (8h) | Lifetime of the DocsGPT session JWT. Sessions renew before expiry — see [Silent session renewal](#silent-session-renewal). | | `OIDC_PROVIDER_NAME` | no | — | Display name on the sign-in button: `Acme SSO` renders "Sign in with Acme SSO". Unset, the button shows a generic "SSO". | | `OIDC_ALLOWED_GROUPS` | no | — | Comma-separated group allowlist. Unset, any authenticated IdP user may sign in — see [Restricting sign-in by group](#restricting-sign-in-by-group). | +| `OIDC_ADMIN_GROUPS` | no | — | Comma-separated groups whose members are granted the global `admin` role. Re-checked at every login and renewal — see [Granting admin via groups](#granting-admin-via-groups). | | `OIDC_GROUPS_CLAIM` | no | `groups` | ID-token/userinfo claim carrying the user's group membership. | | `JWT_SECRET_KEY` | recommended | auto-generated | Signs DocsGPT session tokens. Set it explicitly in production — required when running multiple API replicas. | @@ -108,6 +109,16 @@ Getting groups into the token: - **Authentik** includes group names in the `groups` claim through its default `profile` scope — no extra configuration needed. - **Keycloak** does not emit groups by default. On the client, open **Client scopes → the client's dedicated scope → Add mapper → By configuration → Group Membership**, set the claim name to `groups`, and turn **Full group path** off so the claim carries plain names (`devs`) rather than paths (`/devs`). +## Granting admin via groups + +Separately from *who may sign in*, you can map an IdP group to the global **admin** role with `OIDC_ADMIN_GROUPS`: + +```env +OIDC_ADMIN_GROUPS=platform-admins +``` + +Members of the listed groups are granted admin; the mapping is re-evaluated at every login **and** every [silent renewal](#silent-session-renewal), so removing a user from the admin group revokes their admin at the next renewal (exactly like the sign-in allowlist). It is independent of `OIDC_ALLOWED_GROUPS`, and leaving it unset never mass-revokes admin. On a fresh deployment this is the only way to create the first admin. For the full roles, teams, and admin-dashboard model see [Access Control, Roles & Teams](/Deploying/Access-Control). + ## Silent session renewal The DocsGPT session JWT lives for `OIDC_SESSION_LIFETIME_SECONDS` (default 8 hours). Sessions renew without user-visible interruptions, in one of two ways: @@ -183,6 +194,12 @@ Authentication activity is recorded in `auth_events`, an append-only Postgres ta | `oidc_refresh` | A session is silently renewed. | | `backchannel_logout` | The IdP revokes sessions via back-channel logout. | | `scim_created` / `scim_deactivated` / `scim_reactivated` | SCIM lifecycle changes. | +| `role_granted` / `role_revoked` | The admin role is granted/revoked (`metadata.source` is `manual` or `oidc_group`). | +| `admin_user_activated` / `admin_user_deactivated` | An admin activates/deactivates a user. | +| `admin_sessions_revoked` | An admin force-logs-out a user. | +| `team.*` | Team management — `team.create`, `team.member_add`, `team.member_role`, `team.member_remove`, `team.share`, `team.unshare`, `team.transfer_owner`, `team.delete`. | + +The acting admin is recorded in the event metadata. See [Access Control, Roles & Teams](/Deploying/Access-Control) for the admin and team features that emit these events. There is no UI for these events yet — query the table directly: diff --git a/docs/content/Deploying/_meta.js b/docs/content/Deploying/_meta.js index 40d55a36..5f414192 100644 --- a/docs/content/Deploying/_meta.js +++ b/docs/content/Deploying/_meta.js @@ -7,6 +7,10 @@ export default { "title": "🔐 SSO with OIDC", "href": "/Deploying/OIDC-SSO" }, + "Access-Control": { + "title": "đŸ‘Ĩ Access Control & Teams", + "href": "/Deploying/Access-Control" + }, "Docker-Deploying": { "title": "đŸ›ŗī¸ Docker Setup", "href": "/Deploying/Docker-Deploying" diff --git a/docs/content/Guides/Architecture.mdx b/docs/content/Guides/Architecture.mdx index c858812c..3eb53678 100644 --- a/docs/content/Guides/Architecture.mdx +++ b/docs/content/Guides/Architecture.mdx @@ -68,6 +68,16 @@ flowchart LR * Provides storage and indexing of high-dimensional vector embeddings. * Enables editing and updating of vector indexes including specific chunks. +### 4a. Retrieval Layer (Part of backend) + +* **Responsibility:** Sits between the API and the vector stores and decides *how* context is fetched for each question. Rather than a single similarity search, a **retriever dispatcher** groups the question's sources by their configured retriever and runs each under a shared token budget, then applies post-retrieval stages before answering. +* **Key Features:** + * Multiple retrievers: `classic` (vector similarity), `hybrid` (vector + full-text keyword fusion), and `graphrag` (knowledge-graph / Personalized PageRank). + * Optional query rephrasing before retrieval. + * Optional post-retrieval stages such as LLM pre-screening (map-reduce relevance filtering). + * Per-source behavior via the [per-source configuration](/Sources/Per-source-configuration) contract, so different sources can be chunked and retrieved differently. + * See [GraphRAG](/Sources/GraphRAG) for the knowledge-graph retrieval path. + ### 5. Parser Integration Layer (Part of backend) * **Technology:** Supports multiple formats for file processing and remote source uploading. @@ -101,14 +111,17 @@ sequenceDiagram participant User participant Frontend participant BackendAPI + participant RetrievalLayer participant LLMIntegrationLayer participant VectorStores participant InferenceEngine User->>Frontend: User asks a question Frontend->>BackendAPI: API Request (Question) - BackendAPI->>VectorStores: Fetch relevant document chunks (Similarity Search) - VectorStores-->>BackendAPI: Return document chunks + BackendAPI->>RetrievalLayer: Dispatch retrieval (per-source: classic / hybrid / graphrag) + RetrievalLayer->>VectorStores: Fetch candidates (vector / keyword / graph) + VectorStores-->>RetrievalLayer: Return candidates + RetrievalLayer-->>BackendAPI: Ranked, optionally pre-screened chunks BackendAPI->>LLMIntegrationLayer: Send question and document chunks LLMIntegrationLayer->>InferenceEngine: LLM API Request (Prompt + Context) InferenceEngine-->>LLMIntegrationLayer: LLM API Response (Answer) diff --git a/docs/content/Models/cloud-providers.mdx b/docs/content/Models/cloud-providers.mdx index 23d0fd44..1ab730e1 100644 --- a/docs/content/Models/cloud-providers.mdx +++ b/docs/content/Models/cloud-providers.mdx @@ -25,13 +25,17 @@ DocsGPT offers direct, streamlined support for the following cloud LLM providers | :--------------------------- | :------------- | :-------------------------- | | DocsGPT Public API | `docsgpt` | `None` | | OpenAI | `openai` | `gpt-5.1` | +| OpenAI-compatible (BYOM) | `openai_compatible` | (any; with per-model `base_url`/`api_key`) | | Google (Vertex AI, Gemini) | `google` | `gemini-3.5-flash` | | Anthropic (Claude) | `anthropic` | `claude-3-5-sonnet-20241022`| | Groq | `groq` | `llama-3.3-70b-versatile` | +| OpenRouter | `openrouter` | (See OpenRouter docs) | +| Novita AI | `novita` | (See Novita docs) | | HuggingFace Inference API | `huggingface` | `meta-llama/Llama-3.1-8B-Instruct` | | Prem AI | `premai` | (See Prem AI docs) | | AWS SageMaker | `sagemaker` | (See SageMaker docs) | -| Novita AI | `novita` | (See Novita docs) | + +DocsGPT also ships a **model catalog** (`application/core/models/*.yaml`) that the in-app model picker reads, so common models from these providers — including DeepSeek — appear ready to select once the matching API key is set. ## Connecting to OpenAI-Compatible Cloud APIs @@ -52,6 +56,21 @@ OPENAI_BASE_URL=https://api.deepseek.com/v1 # DeepSeek's OpenAI API URL Remember to consult the documentation of your chosen OpenAI-compatible cloud provider for their specific API endpoint, required model names, and authentication methods. +### Dedicated `openai_compatible` provider (bring-your-own-model) + +Beyond the global `OPENAI_BASE_URL`, DocsGPT has a first-class `openai_compatible` provider. It lets a model carry its **own** `base_url` and `api_key`, which is how per-user "bring your own model" (BYOM) endpoints work — each model can point at a different OpenAI-compatible server without changing instance-wide settings. Outbound requests use an SSRF-pinned HTTP client for safety. + +This is the mechanism behind catalog entries like DeepSeek, which declare their own `base_url` and API key environment variable rather than relying on `OPENAI_BASE_URL`. + +## OpenAI Responses API and reasoning + +For OpenAI models that support it, DocsGPT can call the newer **Responses API** (`/v1/responses`) instead of Chat Completions. This is selected per model in the catalog via an `api_flavor: responses` capability and enables features like server-side reasoning. Related settings: + +- `reasoning_effort` — per-model reasoning effort hint (for example `medium`) declared in the model catalog. +- `OPENAI_RESPONSES_STORE` (default `false`) — when `true`, lets OpenAI persist Responses API state server-side. + +See [App Configuration](/Deploying/DocsGPT-Settings) for the full settings reference. + ## Adding Support for Other Cloud Providers If you wish to connect to a cloud provider that is not explicitly listed above or doesn't offer OpenAI API compatibility, you can extend DocsGPT to support it. Within the DocsGPT repository, navigate to the `application/llm` directory. Here, you will find Python files defining the existing LLM integrations. You can use these files as examples to create a new module for your desired cloud provider. After creating your new LLM module, you will need to register it within the `llm_creator.py` file. This process involves some coding, but it allows for virtually unlimited extensibility to connect to any cloud-based LLM service with an accessible API. \ No newline at end of file diff --git a/docs/content/Models/embeddings.md b/docs/content/Models/embeddings.md index 68015db7..54ef2e2b 100644 --- a/docs/content/Models/embeddings.md +++ b/docs/content/Models/embeddings.md @@ -22,10 +22,12 @@ In essence, embedding models are the bridge that allows DocsGPT to understand th ## Out-of-the-Box Embedding Model Support in DocsGPT -DocsGPT is designed to be flexible and supports a wide range of embedding models right out of the box. Currently, DocsGPT provides native support for models from two major sources: +DocsGPT is designed to be flexible and supports a wide range of embedding models right out of the box: -* **Sentence Transformers:** DocsGPT supports all models available through the [Sentence Transformers library](https://www.sbert.net/). This library offers a vast selection of pre-trained embedding models, known for their quality and efficiency in various semantic tasks. -* **OpenAI Embeddings:** DocsGPT also supports using embedding models from OpenAI, specifically the `text-embedding-ada-002` model, which is a powerful and widely used embedding model from OpenAI's API. +* **Sentence Transformers:** DocsGPT supports all models available through the [Sentence Transformers library](https://www.sbert.net/). This library offers a vast selection of pre-trained embedding models, known for their quality and efficiency in various semantic tasks. This is the default (`EMBEDDINGS_NAME=huggingface_sentence-transformers/all-mpnet-base-v2`). +* **OpenAI Embeddings:** DocsGPT supports OpenAI embedding models (for example `text-embedding-ada-002`, `text-embedding-3-small`, `text-embedding-3-large`) via the OpenAI API. +* **Azure OpenAI Embeddings:** Set `AZURE_EMBEDDINGS_DEPLOYMENT_NAME` alongside your Azure OpenAI configuration. +* **Remote OpenAI-compatible Embeddings:** Any server that exposes an OpenAI-compatible `/v1/embeddings` endpoint (for example llama.cpp, vLLM, TEI, or a hosted provider) by setting `EMBEDDINGS_BASE_URL`. See [Remote Embeddings](#remote-openai-compatible-embeddings) below. ## Configuring Sentence Transformer Models @@ -65,6 +67,36 @@ API_KEY=YOUR_OPENAI_API_KEY # Your OpenAI API Key EMBEDDINGS_NAME=openai_text-embedding-ada-002 ``` +## Remote (OpenAI-compatible) Embeddings + +If you run your own embedding server, or use a provider that exposes an OpenAI-style embeddings API, point DocsGPT at it with `EMBEDDINGS_BASE_URL`. When this is set, all embedding calls (ingestion and querying) are sent to `{EMBEDDINGS_BASE_URL}/v1/embeddings` in OpenAI format instead of running a local model. + +```env +EMBEDDINGS_BASE_URL=http://localhost:8080 # your OpenAI-compatible embeddings server +EMBEDDINGS_NAME=your-model-name # sent as the "model" field in the request +EMBEDDINGS_KEY=YOUR_API_KEY # optional; sent as a Bearer token +``` + +- `EMBEDDINGS_BASE_URL` — base URL of the remote server. Setting it switches DocsGPT into remote-embeddings mode. +- `EMBEDDINGS_NAME` — forwarded as the `model` field in each request. +- `EMBEDDINGS_KEY` — optional bearer token. If you are using OpenAI directly you can copy `API_KEY` here. + +### Guarding against oversized inputs + +Some remote servers (notably llama.cpp) reject any single input larger than their physical batch size with a `500` error. Set `EMBEDDINGS_MAX_INPUT_TOKENS` to clip each input to a fixed number of tokens before it is sent: + +```env +EMBEDDINGS_MAX_INPUT_TOKENS=512 +``` + +When set, each input string is truncated to that many tokens and the overflow is dropped (lossy by design). Token counts use DocsGPT's shared tiktoken encoding, which differs from your server's tokenizer, so choose a limit with some headroom below the server's true limit to absorb tokenizer skew. Leave the setting unset (or `0`) to disable truncation. + +## Important: Embedding Dimensions Must Stay Consistent + +Each embedding model produces vectors of a fixed dimension, and your vector store is created with that dimension. **Changing `EMBEDDINGS_NAME` to a model with a different dimension is not compatible with an existing index** — FAISS and LanceDB will raise a dimension-mismatch error, and pgvector/Qdrant tables are sized to the original dimension. + +If you need to switch embedding models, you must re-ingest your sources so the index is rebuilt with the new dimension. This also applies to the [GraphRAG](/Sources/GraphRAG) graph tables, which are sized to the embedding dimension at creation time. + ## Adding Support for Other Embedding Models If you wish to use an embedding model that is not supported out-of-the-box, a good starting point for adding custom embedding model support is to examine the `base.py` file located in the `application/vectorstore` directory. diff --git a/docs/content/Sources/GraphRAG.mdx b/docs/content/Sources/GraphRAG.mdx new file mode 100644 index 00000000..a186e26f --- /dev/null +++ b/docs/content/Sources/GraphRAG.mdx @@ -0,0 +1,114 @@ +--- +title: GraphRAG — Knowledge-Graph Retrieval +description: Build a knowledge graph from a source at ingest time and retrieve over it with Personalized PageRank. Covers requirements, enabling, configuration, and the graph view. +--- + +import { Callout } from 'nextra/components' +import Image from 'next/image' + +# GraphRAG + +GraphRAG augments classic vector retrieval with a **knowledge graph**. During ingestion DocsGPT uses an LLM to extract entities and the relationships between them from a source's chunks, and stores them as a graph alongside the vectors. At query time, a graph retriever uses Personalized PageRank (PPR) to walk that graph from the entities mentioned in your question, surfacing connected context that pure similarity search can miss — useful for multi-hop questions and queries that span related concepts. + + +GraphRAG is **flag-gated** and currently **pgvector-only**. It is available only when both `GRAPHRAG_ENABLED=true` **and** `VECTOR_STORE=pgvector`. On any other vector store the enable action is rejected. + + +## Requirements + +- A PostgreSQL database with the `pgvector` extension (`VECTOR_STORE=pgvector`). See [PostgreSQL for User Data](/Deploying/Postgres-Migration). +- `GRAPHRAG_ENABLED=true` in your environment. +- An LLM configured for extraction (GraphRAG reuses your instance default model unless you override it). + +```env +GRAPHRAG_ENABLED=true +VECTOR_STORE=pgvector +``` + +The graph tables live in the same pgvector database as your embeddings and are sized to the embedding dimension. If you change embedding models you must re-ingest and re-extract (see [Embeddings](/Models/embeddings#important-embedding-dimensions-must-stay-consistent)). + +## How it works + +1. **Choose GraphRAG** for the source — either at upload time, or by enabling it on an existing source (see below). This sets the source's config to `graphrag` mode. +2. **Extraction** runs over the source's chunks. For each chunk, the LLM extracts entities and relations, which are written into per-source graph tables. Extraction is durable and resumable via a checkpoint, so it survives restarts and re-runs from scratch each time you re-enable it. +3. **Query.** Questions against the source are routed to the graph retriever, which runs Personalized PageRank from the query's entities to gather related context. + + +If a source has no graph yet (extraction still running or failed), the graph retriever **falls back to classic vector retrieval** for that source — answers keep working, they just don't use the graph until it is ready. + + +## Enabling GraphRAG + +### At upload time (recommended) + +When you upload a new document, open **Advanced settings** and set **Retriever** to **GraphRAG** (the same dropdown also offers **Hybrid**). The source is created in `graphrag` mode and extraction is enqueued as part of ingestion — no extra step. + +Upload dialog advanced settings showing the Retriever dropdown with Classic, Hybrid, and GraphRAG options + +These are the same [per-source retrieval settings](/Sources/Per-source-configuration) you can change later — choosing the retriever up front just avoids a re-ingest. + +### On an existing source + +To turn an already-ingested source into a GraphRAG source, use the **Enable GraphRAG** action on the source (it shows a status badge while extraction runs), or call the API: + +```bash +curl -X POST https://your-docsgpt/api/sources//graphrag/enable \ + -H "Authorization: Bearer " +``` + +The response returns a `task_id` for the extraction job: + +```json +{ "success": true, "task_id": "..." } +``` + +Notes: + +- Requires write access to the source (owner or team `editor`). +- Returns `400` if GraphRAG isn't available on the workspace (wrong vector store or flag off). +- Re-running the action rebuilds the graph from scratch rather than no-opping against an existing one. +- You cannot switch a source to `graphrag` through the [config PATCH endpoint](/Sources/Per-source-configuration#editing-the-config-via-api) — use the upload-time selector or this dedicated endpoint. + +## Configuration + +Instance-wide settings (see [App Configuration](/Deploying/DocsGPT-Settings)): + +| Setting | Default | Description | +| --- | --- | --- | +| `GRAPHRAG_ENABLED` | `false` | Master switch for the feature. | +| `GRAPHRAG_EXTRACTION_MODEL` | `null` | Model used for extraction. `null` reuses the instance default model. | +| `GRAPHRAG_MAX_CHUNKS_FOR_EXTRACTION` | `2000` | Hard cap on how many chunks are extracted per source (cost control). | + +Per-source extraction knobs live under the source config's `graph` object and override the instance defaults: + +| Field | Default | Description | +| --- | --- | --- | +| `extraction_model` | `null` | Override the extraction model for this source. | +| `max_chunks` | `null` | Override the chunk cap; `null` falls back to `GRAPHRAG_MAX_CHUNKS_FOR_EXTRACTION`. | +| `gleanings` | `0` | Extra extraction passes per chunk to catch entities missed on the first pass. Off by default (each pass costs additional LLM calls). | + + +Graph extraction makes an LLM call per chunk (more if `gleanings > 0`), so it has a real token cost. The cost is attributed to token usage under a `graph_extraction` tag, and the `max_chunks` cap bounds it. + + +## Visualizing the graph + +GraphRAG sources expose a **graph view** in the UI — an interactive network of the extracted entities and relationships. It is backed by two read endpoints: + +```text +GET /api/sources//graph # bounded {nodes, edges} overview +GET /api/sources//graph/node/ # one node and its neighbors +``` + +The overview is bounded to a default node limit to keep large graphs responsive. + +## Related + +- [Per-Source Configuration](/Sources/Per-source-configuration) — the config object GraphRAG plugs into. +- [PostgreSQL for User Data](/Deploying/Postgres-Migration) — required pgvector setup. +- [Embeddings](/Models/embeddings) — embedding-dimension constraints that also apply to the graph tables. diff --git a/docs/content/Sources/Per-source-configuration.mdx b/docs/content/Sources/Per-source-configuration.mdx new file mode 100644 index 00000000..c27ee96b --- /dev/null +++ b/docs/content/Sources/Per-source-configuration.mdx @@ -0,0 +1,177 @@ +--- +title: Per-Source Configuration (Chunking & Retrieval) +description: Tune how each knowledge source is chunked at ingest time and retrieved at query time — chunking strategy, retriever, exposure, top-k, pre-screening and more. +--- + +import { Callout } from 'nextra/components' +import Image from 'next/image' + +# Per-Source Configuration + +Every source in DocsGPT carries its own **behavior contract** — a small config object that controls how that source is *chunked* when it is ingested and how it is *retrieved* when you ask a question. This lets you tune each source independently: a large reference manual can use a different chunking strategy and retriever than a short FAQ. + +You edit this config from a source's settings in the UI (shown below), or through the API. The same options are also available in **Advanced settings** when you first upload a document. + +Source settings panel showing Retrieval options (retriever, top-k, score threshold, rephrase, exposure, prescreen) and Chunking options (strategy, max/min tokens, duplicate headers) + + +Per-source retrieval is enabled by default. Operators can turn it off instance-wide with `PER_SOURCE_RETRIEVAL_ENABLED=false`, in which case all sources fall back to the classic retriever regardless of their stored config. + + +## Two kinds of settings: live vs. bake-time + +The config has two groups of settings that differ in *when* they take effect: + +| Group | When it applies | Re-ingest needed? | +| --- | --- | --- | +| **Retrieval** (`retrieval.*`) | Query time — applied live on the next question | No | +| **Chunking** (`chunking.*`) | Ingest time — baked into the stored chunks | **Yes** | + +Changing a retrieval setting takes effect immediately. Changing a chunking setting only affects documents ingested *after* the change, so you must re-ingest the source to apply it to existing content. The API response includes a `requires_reingest` flag to make this explicit. + +## Chunking configuration + +Chunking decides how a document is split into the pieces that get embedded and stored. + +```json +{ + "chunking": { + "strategy": "classic_chunk", + "max_tokens": 1250, + "min_tokens": 150, + "duplicate_headers": false + } +} +``` + +| Field | Default | Description | +| --- | --- | --- | +| `strategy` | `classic_chunk` | Which chunking algorithm to use (see below). | +| `max_tokens` | `1250` | Upper bound on chunk size in tokens. | +| `min_tokens` | `150` | Lower bound; small fragments are merged up to this size. | +| `duplicate_headers` | `false` | Repeat section headers into each child chunk for context. | + +### Available chunking strategies + +| Strategy | Behavior | +| --- | --- | +| `classic_chunk` | The default token-window splitter. An empty config reproduces DocsGPT's historical chunking byte-for-byte. | +| `recursive` | Recursive character/token splitter that tries to break on natural boundaries (paragraphs, sentences). | +| `markdown` | Splits along Markdown structure (headings, sections) — good for docs and wikis. | +| `parent_child` | Embeds small **child** chunks for precise matching but carries a larger **parent** window in metadata, so the model still sees surrounding context. | +| `semantic` | Embeds sentences and splits where meaning shifts (at the 95th-percentile cosine-distance gap between adjacent sentences), falling back to `recursive` on failure. Produces topically coherent chunks at the cost of extra embedding calls during ingest. | + + +Chunking is bake-time. After changing `strategy`, `max_tokens`, `min_tokens`, or `duplicate_headers`, re-ingest the source so existing chunks are rebuilt. + + +## Retrieval configuration + +Retrieval decides which chunks are pulled in to answer a question. These settings apply live. + +```json +{ + "retrieval": { + "retriever": "classic", + "exposure": "prefetch", + "chunks": 2, + "score_threshold": null, + "rephrase_query": true, + "prescreen": null + } +} +``` + +| Field | Default | Description | +| --- | --- | --- | +| `retriever` | `classic` | Retrieval strategy: `classic`, `hybrid`, or `graphrag`. | +| `exposure` | `prefetch` | How retrieved context reaches the model: `prefetch` or `agentic_tool` (see below). | +| `chunks` | `2` | Final number of chunks (top-k) returned to the answer. Range 1–500. | +| `score_threshold` | `null` | Minimum similarity score. Honored by pgvector and MongoDB Atlas; other stores ignore it. | +| `rephrase_query` | `true` | Whether to run a query-rephrasing side-call before retrieval. | +| `prescreen` | `null` | Optional LLM relevance filter (see below). `null` = off. | + +### Retrievers + +- **`classic`** — Vector similarity search. The default and a safe choice for any vector store. +- **`hybrid`** — Fuses vector search with full-text keyword search using Reciprocal Rank Fusion, which improves recall for exact terms, codes, and names that pure vector search can miss. +- **`graphrag`** — Knowledge-graph retrieval. Set indirectly when you enable GraphRAG on a source. See [GraphRAG](/Sources/GraphRAG). + + +Keyword search for the **hybrid** retriever is currently implemented only for the **pgvector** vector store. On other stores (FAISS, Qdrant, Milvus, etc.) the keyword half returns nothing, so `hybrid` quietly behaves like `classic` (vector-only). + + +Operators can restrict which retrievers are usable instance-wide with the `RETRIEVERS_ENABLED` setting; a per-source `retriever` value must be within that allow-list. + +### Exposure: prefetch vs. agentic tool + +`exposure` controls *how* a source's content is delivered to the model: + +- **`prefetch`** (default) — DocsGPT retrieves the top chunks up front and injects them into the prompt before the model answers. Best for focused Q&A over a source. +- **`agentic_tool`** — The source is exposed to the model as a search tool it can call on demand, deciding when and what to look up (browse-as-you-go) rather than receiving a bulk prefetch. This is the default exposure for [Wiki sources](/Sources/Wiki-sources). + +### Pre-screening (LLM relevance filter) + +Pre-screening adds an optional map-reduce step between retrieval and answering: a base retriever fetches a wider set of candidates, an LLM screens them in batches, and only the most relevant survivors are passed to the answer. It improves precision on noisy sources at the cost of extra query-time LLM calls, so it is **off by default**. + +```json +{ + "retrieval": { + "chunks": 8, + "prescreen": { + "candidate_k": 40, + "batch_size": 10, + "max_keep": 8, + "model": null + } + } +} +``` + +| Field | Default | Description | +| --- | --- | --- | +| `candidate_k` | `40` | Candidates fetched before screening. Must be `>= chunks`. | +| `batch_size` | `10` | Candidates screened per LLM call. | +| `max_keep` | `8` | Survivors kept after screening. Must be `<= candidate_k`. | +| `model` | `null` | Model used for screening. `null` reuses the request's resolved model. | + +## Editing the config via API + +The config is edited with a `PATCH` to the source's config endpoint: + +```bash +curl -X PATCH https://your-docsgpt/api/sources//config \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "retrieval": { "retriever": "hybrid", "chunks": 4 }, + "chunking": { "strategy": "semantic" } + }' +``` + +The response echoes the stored config and a `requires_reingest` flag: + +```json +{ + "success": true, + "config": { "...": "..." }, + "requires_reingest": true +} +``` + +Notes: + +- Invalid values are rejected with `400` (strict validation on write). +- The `kind` field (classic / wiki / graphrag) cannot be changed through this endpoint — converting a source to a [Wiki](/Sources/Wiki-sources) or enabling [GraphRAG](/Sources/GraphRAG) uses dedicated endpoints. +- Editing requires ownership of the source or a team `editor` grant; viewers receive `403`. + +## Related + +- [GraphRAG](/Sources/GraphRAG) — knowledge-graph retrieval for a source. +- [Wiki Sources](/Sources/Wiki-sources) — LLM-editable living documentation. +- [Embeddings](/Models/embeddings) — the embedding model used during ingest and retrieval. diff --git a/docs/content/Sources/Wiki-sources.mdx b/docs/content/Sources/Wiki-sources.mdx new file mode 100644 index 00000000..04c8b568 --- /dev/null +++ b/docs/content/Sources/Wiki-sources.mdx @@ -0,0 +1,96 @@ +--- +title: Wiki Sources — Living, LLM-Editable Documentation +description: Create a knowledge source that the agent can read and write — a living wiki it keeps up to date, with human edits, provenance stamps, and version safety. +--- + +import { Callout } from 'nextra/components' + +# Wiki Sources + +A **wiki source** is a knowledge source that the agent can both read *and* write. Instead of being a fixed set of ingested files, a wiki is a small set of Markdown pages that the LLM edits over time — recording what it learns, correcting stale information, and building living documentation. Humans can edit the same pages directly, and every change is stamped with who made it. + +Unlike a classic source, a wiki is **team-scoped, not per-user**: it is shared and edited at the source level, so a whole team works against the same living document. + +## How a wiki differs from a classic source + +| | Classic source | Wiki source | +| --- | --- | --- | +| Content | Ingested files, read-only | Markdown pages, read **and** write | +| Who edits | You (re-upload to change) | The agent and humans | +| Default exposure | `prefetch` (chunks injected up front) | `agentic_tool` (the agent browses pages on demand) | +| Searchability | Embedded at ingest | Re-embedded automatically on every edit | +| Scope | Per owner | Team-shareable, edited at source scope | + +Because a wiki defaults to the `agentic_tool` [exposure](/Sources/Per-source-configuration#exposure-prefetch-vs-agentic-tool), the agent navigates it as a tool — opening, searching, and editing pages as needed — rather than receiving a bulk prefetch. + +## How the agent edits a wiki + +The agent edits a wiki through an internal **Wiki tool** that is automatically scoped to one wiki source. It supports a small, edit-safe action surface: + +- **view** a page, +- **create** or overwrite a page, +- **str_replace** an exact, unique string, +- **insert** at a line, +- **delete** a page, +- **rename** a page. + +Two safety properties matter: + +- **Provenance stamps.** Every page records whether its last change came from a human or the agent, so edits are traceable. +- **Optimistic versioning.** Edits carry an expected version; if a page changed underneath, the edit is rejected rather than silently clobbering a concurrent change. String replacements must match exactly and uniquely. + +After any edit, the affected page is **re-embedded asynchronously** so the wiki stays searchable and the new content is immediately retrievable. + + +Each wiki page is capped at 1 MB (1,000,000 bytes). Pages are addressed by path (the home page is `/index.md`). + + +## Creating a wiki + +In the UI, choose **New wiki source** when adding a source. From the API: + +```bash +curl -X POST https://your-docsgpt/api/sources/wiki \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ "name": "Team Handbook", "initial_content": "# Team Handbook\n\nWelcome." }' +``` + +- `name` (required) — the wiki source name. +- `initial_content` (optional) — Markdown that seeds the home page `/index.md` and triggers its first re-embed. + +No ingestion task runs for a wiki; pages are authored directly. The response returns the new `source_id`. + +## Converting an existing source into a wiki + +You can turn an already-ingested source into a wiki so the agent can start maintaining it: + +```bash +curl -X POST https://your-docsgpt/api/sources//wiki/convert \ + -H "Authorization: Bearer " +``` + +- A **blank** source is enabled inline (no task) and immediately becomes a wiki. +- A source **with files** runs a conversion task that reassembles its existing chunks into wiki pages; poll the returned task for a per-file summary. +- Conversion is rejected with `409` if the source is still ingesting — wait for it to finish first. + + +Switching a source to (or from) wiki mode goes only through `POST /api/sources//wiki/convert`. It cannot be done through the [config PATCH endpoint](/Sources/Per-source-configuration#editing-the-config-via-api). + + +## Reading and editing pages directly + +Humans can read and edit wiki pages through the API (and the wiki viewer in the UI): + +```text +GET /api/sources//wiki/pages # list pages +GET /api/sources//wiki/page?path=... # fetch one page fresh +PUT /api/sources//wiki/page # create or overwrite a page (human edit) +``` + +Human edits are stamped with `human` provenance and trigger the same re-embed as agent edits. Read access follows source sharing (owner or anyone the source is shared with); writing requires owner or team `editor` access. + +## Related + +- [Per-Source Configuration](/Sources/Per-source-configuration) — exposure and retrieval settings a wiki uses. +- [Access Control & Teams](/Deploying/Access-Control) — sharing a wiki with a team. diff --git a/docs/content/Sources/_meta.js b/docs/content/Sources/_meta.js new file mode 100644 index 00000000..06a1d99a --- /dev/null +++ b/docs/content/Sources/_meta.js @@ -0,0 +1,14 @@ +export default { + "Per-source-configuration": { + "title": "đŸŽ›ī¸ Per-Source Configuration", + "href": "/Sources/Per-source-configuration" + }, + "GraphRAG": { + "title": "đŸ•¸ī¸ GraphRAG", + "href": "/Sources/GraphRAG" + }, + "Wiki-sources": { + "title": "📖 Wiki Sources", + "href": "/Sources/Wiki-sources" + } +} diff --git a/docs/content/Tools/basics.mdx b/docs/content/Tools/basics.mdx index 66ef2e71..133e5d3d 100644 --- a/docs/content/Tools/basics.mdx +++ b/docs/content/Tools/basics.mdx @@ -37,38 +37,82 @@ DocsGPT includes a suite of pre-built tools designed to expand its capabilities description: 'A highly flexible tool that allows DocsGPT to interact with virtually any API without needing to write custom Python code.' }, { - title: 'Brave Search Tool', + title: 'Brave Search', link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/brave.py', - description: 'Enables DocsGPT to perform real-time web and image searches using the Brave Search API for up-to-date information.' + description: 'Enables DocsGPT to perform real-time web and image searches using the Brave Search API. Requires an API key.' }, { - title: 'Cryptoprice Tool', + title: 'DuckDuckGo Search', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/duckduckgo.py', + description: 'Performs web and image searches using DuckDuckGo. No API key required.' + }, + { + title: 'CryptoPrice', link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/cryptoprice.py', - description: 'Fetches the current price of specified cryptocurrencies.' + description: 'Fetches the current price of specified cryptocurrencies using the CryptoCompare public API.' }, { - title: 'Ntfy Tool', + title: 'Ntfy', link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/ntfy.py', - description: 'Allows DocsGPT to send push notifications to Ntfy.sh channels, ideal for alerts and updates.' + description: 'Allows DocsGPT to send push notifications to ntfy topics on a specified server, ideal for alerts and updates.' }, { - title: 'PostgreSQL Tool', - link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/postgres.py', - description: 'Provides capabilities to connect to a PostgreSQL database, execute SQL queries, and retrieve schema information.' - }, - { - title: 'Read Webpage Tool', // Renamed from Scraper Tool - link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/read_webpage.py', - description: 'Enables DocsGPT to fetch and extract (scrape) textual content from specified web page URLs.' - }, - { - title: 'Telegram Tool', + title: 'Telegram Bot', link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/telegram.py', - description: 'Allows DocsGPT to send messages or images to Telegram chats via a Telegram Bot.' + description: 'Allows DocsGPT to send messages or images to Telegram chats via a Telegram Bot. Requires a bot token and chat ID.' + }, + { + title: 'PostgreSQL Database', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/postgres.py', + description: 'Connects to a PostgreSQL database to execute SQL queries and retrieve schema information.' + }, + { + title: 'Read Webpage (browser)', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/read_webpage.py', + description: 'Fetches the HTML content of a URL and converts it to Markdown for the agent to read.' + }, + { + title: 'Remote Device', + link: '/Tools/remote-device', + description: 'Runs shell commands on a paired remote machine through the docsgpt-cli host. See the Remote Device guide.' + }, + { + title: 'MCP Tool', + link: '/Guides/Integrations/mcp-tool-integration', + description: 'Connects to remote Model Context Protocol (MCP) servers to access their dynamic tools and resources.' + }, + { + title: 'Memory', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/memory.py', + description: 'Stores and retrieves information across conversations through a per-user memory file directory.' + }, + { + title: 'Notepad', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/notes.py', + description: 'A single editable note. Supports viewing, overwriting, and string replacement.' + }, + { + title: 'Todo List', + link: 'https://github.com/arc53/DocsGPT/blob/main/application/agents/tools/todo_list.py', + description: 'Manages todo items — creating, viewing, updating, and deleting todos.' } ]} /> +## Default Chat Tools + +In a regular chat (no custom agent), DocsGPT can enable a small set of tools automatically so the assistant is useful out of the box. These are the **default chat tools**, controlled by the `DEFAULT_CHAT_TOOLS` setting: + +```env +DEFAULT_CHAT_TOOLS=memory,read_webpage,scheduler +``` + +- Default tools are config-free and run with synthetic, deterministic tool IDs (no manual setup needed). +- Each user can opt out of individual default tools from their settings; the disabled list is stored per user. +- Some default tools are excluded from **headless runs** (scheduled tasks and webhook triggers). For example, `scheduler` is skipped in those runs to prevent a scheduled task from chaining new schedules on every fire. + +To change the defaults for the whole instance, set `DEFAULT_CHAT_TOOLS` to a comma-separated list of tool names. See [App Configuration](/Deploying/DocsGPT-Settings) for the full settings reference. + ## Using Tools in DocsGPT (User Perspective) Interacting with tools in DocsGPT is designed to be intuitive: diff --git a/docs/content/_meta.js b/docs/content/_meta.js index bbe5d9f9..c5e71a9f 100644 --- a/docs/content/_meta.js +++ b/docs/content/_meta.js @@ -4,6 +4,7 @@ export default { "upgrading": "Upgrading", "Deploying": "Deploying", "Models": "Models", + "Sources": "Sources", "Tools": "Tools", "Agents": "Agents", "Extensions": "Extensions", diff --git a/docs/public/graph-rag-settings-before-upload.png b/docs/public/graph-rag-settings-before-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..c68edea89fdaecf2840cc742005a3bd5ea6db082 GIT binary patch literal 104854 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 literal 0 HcmV?d00001 diff --git a/docs/public/sources-settings-screen.png b/docs/public/sources-settings-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c1faf154b80601fcdb46b269ea0d1fba8daa2f GIT binary patch literal 96099 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 \ No newline at end of file diff --git a/docs/public/toolIcons/tool_mcp_tool.svg b/docs/public/toolIcons/tool_mcp_tool.svg new file mode 100644 index 00000000..88f760b8 --- /dev/null +++ b/docs/public/toolIcons/tool_mcp_tool.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docs/public/toolIcons/tool_memory.svg b/docs/public/toolIcons/tool_memory.svg new file mode 100644 index 00000000..cd526397 --- /dev/null +++ b/docs/public/toolIcons/tool_memory.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/public/toolIcons/tool_notes.svg b/docs/public/toolIcons/tool_notes.svg new file mode 100644 index 00000000..7a8d0bba --- /dev/null +++ b/docs/public/toolIcons/tool_notes.svg @@ -0,0 +1 @@ + diff --git a/docs/public/toolIcons/tool_remote_device.svg b/docs/public/toolIcons/tool_remote_device.svg new file mode 100644 index 00000000..b9b06ce4 --- /dev/null +++ b/docs/public/toolIcons/tool_remote_device.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/toolIcons/tool_todo_list.svg b/docs/public/toolIcons/tool_todo_list.svg new file mode 100644 index 00000000..3eb8ef24 --- /dev/null +++ b/docs/public/toolIcons/tool_todo_list.svg @@ -0,0 +1 @@ +