From 837767eaf62c241ab612d0e51aef089afe89ea43 Mon Sep 17 00:00:00 2001 From: Rachael Graham Date: Fri, 9 Oct 2026 09:08:49 -0500 Subject: [PATCH 1/4] Docs for alpha9 Add documentation for UI file attachments, including which runtimes support them, enforced limits, supported file types, and required reverse-proxy body-size settings. Also document the new runtime revision GC metrics and how discovery and cleanup are reported. Signed-off-by: Rachael Graham --- .../kagent/1.x/agents/agent-harness.md | 2 ++ .../kagent/1.x/observability/launch-ui.md | 26 +++++++++++++++++++ .../kagent/1.x/observability/metrics.md | 2 ++ .../content/kagent/1.x/setup/reverse-proxy.md | 4 +++ 4 files changed, 34 insertions(+) diff --git a/docs-site/content/kagent/1.x/agents/agent-harness.md b/docs-site/content/kagent/1.x/agents/agent-harness.md index d86a5ccf..88bb4776 100644 --- a/docs-site/content/kagent/1.x/agents/agent-harness.md +++ b/docs-site/content/kagent/1.x/agents/agent-harness.md @@ -63,6 +63,8 @@ A Harness names exactly one of the following four runtimes, and that choice deci The `kagent` and `byo` runtimes compile through the same path, so they accept the same model providers and the same AgentTemplate features, except [structured output]({{< link path="agents/structured-output" >}}), which only the `kagent` runtime supports. The `codex` and `claude` runtimes are purpose-built adapters, and each accepts a narrower slice. +File attachments are limited to the `kagent` runtime in the same way. The `codex` and `claude` runtimes take one text part per message, so the UI hides the attachment controls on an agent that runs on either of them. For the file types and size limits that the UI enforces, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). + ### Runtime-specific settings `spec.kagent` is the only runtime block that takes settings of its own. The rest are empty. diff --git a/docs-site/content/kagent/1.x/observability/launch-ui.md b/docs-site/content/kagent/1.x/observability/launch-ui.md index 9d2cf2f3..46775eba 100644 --- a/docs-site/content/kagent/1.x/observability/launch-ui.md +++ b/docs-site/content/kagent/1.x/observability/launch-ui.md @@ -110,6 +110,32 @@ A checkpoint appears in the transcript as a mark carrying the snapshot name and > [!NOTE] > A checkpoint is always taken at the latest turn boundary, so the UI offers **Fork** on your own most recent message and not on earlier ones. +## Attach files to a message + +An agent reads the files that you send with a message, so you can ask about a log, a manifest, or a screenshot without pasting the contents into the message box. The attachment controls appear only on an agent whose {{< gloss "Harness" >}}Harness{{< /gloss >}} names the `kagent` runtime, because the `codex` and `claude` runtimes take one text part per message and nothing else. + +Stage files in any of the following ways. + +- Select the paperclip beside the message box, then choose the files. +- Drop files anywhere on the chat page. +- Paste a file or an image from your clipboard. A clipboard that also holds plain text pastes the text instead, so that a copy from a word processor keeps its text rather than its image rendering. + +Each staged file becomes a chip above the message box, and selecting the chip's remove control drops that file before you send. Sent files stay in the transcript as download chips, and reloading the page redraws them. + +The UI accepts plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images. The UI rejects any other type as you stage it, and reports the rejection with the file name. Because browsers report no media type for some extensions, and the wrong one for others, the UI falls back to the file extension before it decides. + +Three limits apply to an attachment, and each one is enforced somewhere different. + +| Limit | Value | Enforced by | +| ----- | ----- | ----------- | +| Total size of the files in one message | 10 MB | The UI, as you stage each file. | +| Text read from one file | 200,000 characters | The runtime, which appends `[truncated]` to a longer file. | +| Request body that the UI's nginx accepts | `ui.nginx.clientMaxBodySize`, default `20m` | The UI pod's nginx. The default sits just above the gateway's 16 MiB gRPC cap. | + +A reverse proxy in front of the UI applies its own body-size limit, which is smaller than 10 MB on a default nginx. For the directive to set, see [Serve the UI under a sub-path]({{< link path="setup/reverse-proxy#proxy-shapes" >}}). + +Every non-image file reaches the model as text, whatever provider the agent uses. A file that the runtime cannot read as text becomes a short note naming the file, so the agent reports the problem rather than failing the turn. Images reach the providers that accept them. Amazon Bedrock, Ollama, and SAP AI Core receive a note in place of the image. + ## Check Agent Substrate capacity The **Substrate** page shows whether there is capacity for an agent to run. It reads WorkerPools and ActorTemplates from Kubernetes, and live Actors and Worker assignments from the Agent Substrate API. diff --git a/docs-site/content/kagent/1.x/observability/metrics.md b/docs-site/content/kagent/1.x/observability/metrics.md index 7f8733ee..876dfb82 100644 --- a/docs-site/content/kagent/1.x/observability/metrics.md +++ b/docs-site/content/kagent/1.x/observability/metrics.md @@ -40,6 +40,8 @@ Besides the standard Go runtime and process metrics, the controller reports the | `workqueue_depth`, `workqueue_queue_duration_seconds`, `workqueue_retries_total` | Gauge, histogram, counter | Work waiting for a reconciler, how long it waits, and how often it is retried. | | `leader_election_master_status` | Gauge | `1` on the controller replica that holds the leader lease. With several replicas, exactly one reports `1`. | | `rest_client_requests_total` | Counter | Requests from the controller to the Kubernetes API server, by status code. | +| `kagent_runtime_revision_gc_pending` | Gauge | Compiled agent revisions that the last successful discovery found eligible for cleanup. The controller reports a cached count, so a scrape costs no database or network call. The metric is absent until a discovery succeeds, and `0` reports a discovery that matched nothing. A failed discovery holds the previous value rather than clearing it. | +| `kagent_runtime_revision_gc_duration_seconds` | Histogram | Time that one revision cleanup attempt takes, by the `kagent_gc_stage` label: `discovery` or `collection`. A `collection` attempt covers the database claim, the Agent Substrate read and deletion, and the database finalization. A failed attempt carries an `error_type` label holding a gRPC status code name, or `_OTHER` for every other failure, so the series that carry the label give both the failure rate and the reason. | The Agent Substrate `atecontroller` component reports the same `controller_runtime_*` and `workqueue_*` metrics for its own reconcilers. To keep the two apart in a query, filter by the scrape job, such as `job="kagent-controller-metrics"` in the OTel stack. diff --git a/docs-site/content/kagent/1.x/setup/reverse-proxy.md b/docs-site/content/kagent/1.x/setup/reverse-proxy.md index fed3756f..4d3d7110 100644 --- a/docs-site/content/kagent/1.x/setup/reverse-proxy.md +++ b/docs-site/content/kagent/1.x/setup/reverse-proxy.md @@ -34,6 +34,8 @@ helm upgrade --install kagent \ Both of the following proxy configurations work. Choose the one that matches your infrastructure. If you enable oauth2-proxy for SSO, the proxy must strip the prefix: with the prefix forwarded, oauth2-proxy cannot match its own sign-in and skip-authentication paths, and sign-in fails. +Both examples set `client_max_body_size`. A chat message that carries file attachments reaches 10 MB, and nginx defaults the directive to `1m`, so a proxy that leaves it unset rejects the upload with a `413` before the request reaches the UI pod. For the attachment limits themselves, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). + ### Proxy strips the prefix The proxy removes the `/ui` prefix before forwarding to the UI service on port `8080`. The UI then sees requests at `/` and serves them normally. @@ -44,6 +46,7 @@ Example nginx configuration: location /ui/ { proxy_pass http://{{< reuse "kagent-docs/snippets/name-ui.md" >}}.kagent:8080/; proxy_http_version 1.1; + client_max_body_size 20m; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -62,6 +65,7 @@ Example nginx configuration: location /ui/ { proxy_pass http://{{< reuse "kagent-docs/snippets/name-ui.md" >}}.kagent:8080; proxy_http_version 1.1; + client_max_body_size 20m; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; From 1ee8475eb8a45891bb7472864b4481c0009944cf Mon Sep 17 00:00:00 2001 From: Rachael Graham Date: Fri, 9 Oct 2026 12:07:20 -0500 Subject: [PATCH 2/4] reword Signed-off-by: Rachael Graham --- .../content/kagent/1.x/agents/agent-harness.md | 2 +- .../content/kagent/1.x/observability/launch-ui.md | 15 +++++---------- .../content/kagent/1.x/setup/reverse-proxy.md | 2 +- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/docs-site/content/kagent/1.x/agents/agent-harness.md b/docs-site/content/kagent/1.x/agents/agent-harness.md index 88bb4776..af580271 100644 --- a/docs-site/content/kagent/1.x/agents/agent-harness.md +++ b/docs-site/content/kagent/1.x/agents/agent-harness.md @@ -63,7 +63,7 @@ A Harness names exactly one of the following four runtimes, and that choice deci The `kagent` and `byo` runtimes compile through the same path, so they accept the same model providers and the same AgentTemplate features, except [structured output]({{< link path="agents/structured-output" >}}), which only the `kagent` runtime supports. The `codex` and `claude` runtimes are purpose-built adapters, and each accepts a narrower slice. -File attachments are limited to the `kagent` runtime in the same way. The `codex` and `claude` runtimes take one text part per message, so the UI hides the attachment controls on an agent that runs on either of them. For the file types and size limits that the UI enforces, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). +Note that the agent chat in the kagent UI allows file attachments only on the `kagent` runtime, so an agent on a `byo`, `codex`, or `claude` Harness has no attachment option in the chat. For the file types and size limits that the UI enforces, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). ### Runtime-specific settings diff --git a/docs-site/content/kagent/1.x/observability/launch-ui.md b/docs-site/content/kagent/1.x/observability/launch-ui.md index 46775eba..d6f9ca8d 100644 --- a/docs-site/content/kagent/1.x/observability/launch-ui.md +++ b/docs-site/content/kagent/1.x/observability/launch-ui.md @@ -112,7 +112,7 @@ A checkpoint appears in the transcript as a mark carrying the snapshot name and ## Attach files to a message -An agent reads the files that you send with a message, so you can ask about a log, a manifest, or a screenshot without pasting the contents into the message box. The attachment controls appear only on an agent whose {{< gloss "Harness" >}}Harness{{< /gloss >}} names the `kagent` runtime, because the `codex` and `claude` runtimes take one text part per message and nothing else. +In the chat interface for agents on the `kagent` runtime, you can attach files to send with a message. An agent reads any files that you attach, so you can ask the agent about a log, a manifest, or a screenshot without pasting the contents into the message box. Note file attachments are supported only on the `kagent` runtime, so an agent on a `byo`, `codex`, or `claude` Harness has no attachment option in the chat. Stage files in any of the following ways. @@ -120,22 +120,17 @@ Stage files in any of the following ways. - Drop files anywhere on the chat page. - Paste a file or an image from your clipboard. A clipboard that also holds plain text pastes the text instead, so that a copy from a word processor keeps its text rather than its image rendering. -Each staged file becomes a chip above the message box, and selecting the chip's remove control drops that file before you send. Sent files stay in the transcript as download chips, and reloading the page redraws them. +Sent files stay in the transcript as download chips, and reloading the page redraws them. Every non-image file reaches the model as text, regardless of the provider that the agent uses. An empty file, or one that holds only whitespace, reaches the model as the note `[Uploaded file "notes.txt" (text/plain) contained no extractable text.]` instead of contents, so the agent reports the gap rather than answering from nothing. Images reach the providers that accept them. Amazon Bedrock, Ollama, and SAP AI Core receive a note in place of the image. -The UI accepts plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images. The UI rejects any other type as you stage it, and reports the rejection with the file name. Because browsers report no media type for some extensions, and the wrong one for others, the UI falls back to the file extension before it decides. - -Three limits apply to an attachment, and each one is enforced somewhere different. +The following limits apply to attachments: | Limit | Value | Enforced by | | ----- | ----- | ----------- | -| Total size of the files in one message | 10 MB | The UI, as you stage each file. | +| Accepted file types | Plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images | The UI, as you stage each file. A rejected file is reported by name. Browsers report no media type for some extensions, and the wrong one for others, so the UI falls back to the file extension before it decides whether a file qualifies. | +| Total size of the files in one message | 10 MB | The UI, as you stage each file. Note that when you host a reverse proxy in front of the UI, it applies its own body-size limit. A default nginx allows `1m`, so a larger attachment is rejected with a `413` before it reaches the UI pod. Raise the limit with `client_max_body_size`, as shown in [Serve the UI under a sub-path]({{< link path="setup/reverse-proxy#proxy-shapes" >}}). | | Text read from one file | 200,000 characters | The runtime, which appends `[truncated]` to a longer file. | | Request body that the UI's nginx accepts | `ui.nginx.clientMaxBodySize`, default `20m` | The UI pod's nginx. The default sits just above the gateway's 16 MiB gRPC cap. | -A reverse proxy in front of the UI applies its own body-size limit, which is smaller than 10 MB on a default nginx. For the directive to set, see [Serve the UI under a sub-path]({{< link path="setup/reverse-proxy#proxy-shapes" >}}). - -Every non-image file reaches the model as text, whatever provider the agent uses. A file that the runtime cannot read as text becomes a short note naming the file, so the agent reports the problem rather than failing the turn. Images reach the providers that accept them. Amazon Bedrock, Ollama, and SAP AI Core receive a note in place of the image. - ## Check Agent Substrate capacity The **Substrate** page shows whether there is capacity for an agent to run. It reads WorkerPools and ActorTemplates from Kubernetes, and live Actors and Worker assignments from the Agent Substrate API. diff --git a/docs-site/content/kagent/1.x/setup/reverse-proxy.md b/docs-site/content/kagent/1.x/setup/reverse-proxy.md index 4d3d7110..48ac9b2c 100644 --- a/docs-site/content/kagent/1.x/setup/reverse-proxy.md +++ b/docs-site/content/kagent/1.x/setup/reverse-proxy.md @@ -34,7 +34,7 @@ helm upgrade --install kagent \ Both of the following proxy configurations work. Choose the one that matches your infrastructure. If you enable oauth2-proxy for SSO, the proxy must strip the prefix: with the prefix forwarded, oauth2-proxy cannot match its own sign-in and skip-authentication paths, and sign-in fails. -Both examples set `client_max_body_size`. A chat message that carries file attachments reaches 10 MB, and nginx defaults the directive to `1m`, so a proxy that leaves it unset rejects the upload with a `413` before the request reaches the UI pod. For the attachment limits themselves, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). +Both examples set `client_max_body_size`. A default nginx allows `1m`, so a larger attachment is rejected with a `413` before it reaches the UI pod. Keep the limit above the 10 MB that one chat message can carry. To see the attachment limits, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). ### Proxy strips the prefix From 734c5a0301479c8914624f215882d2bcec7947fa Mon Sep 17 00:00:00 2001 From: Rachael Graham Date: Fri, 9 Oct 2026 12:56:36 -0500 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: Kristin Brown Signed-off-by: Rachael Graham --- docs-site/content/kagent/1.x/agents/agent-harness.md | 2 +- .../content/kagent/1.x/observability/launch-ui.md | 10 +++++++--- docs-site/content/kagent/1.x/observability/metrics.md | 2 +- docs-site/content/kagent/1.x/setup/reverse-proxy.md | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs-site/content/kagent/1.x/agents/agent-harness.md b/docs-site/content/kagent/1.x/agents/agent-harness.md index af580271..7a52fff1 100644 --- a/docs-site/content/kagent/1.x/agents/agent-harness.md +++ b/docs-site/content/kagent/1.x/agents/agent-harness.md @@ -63,7 +63,7 @@ A Harness names exactly one of the following four runtimes, and that choice deci The `kagent` and `byo` runtimes compile through the same path, so they accept the same model providers and the same AgentTemplate features, except [structured output]({{< link path="agents/structured-output" >}}), which only the `kagent` runtime supports. The `codex` and `claude` runtimes are purpose-built adapters, and each accepts a narrower slice. -Note that the agent chat in the kagent UI allows file attachments only on the `kagent` runtime, so an agent on a `byo`, `codex`, or `claude` Harness has no attachment option in the chat. For the file types and size limits that the UI enforces, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). +The agent chat in the kagent UI allows file attachments only on the `kagent` runtime, so an agent on a `byo`, `codex`, or `claude` Harness has no attachment option in the chat. For the file types and size limits that the UI enforces, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). ### Runtime-specific settings diff --git a/docs-site/content/kagent/1.x/observability/launch-ui.md b/docs-site/content/kagent/1.x/observability/launch-ui.md index d6f9ca8d..0685aeed 100644 --- a/docs-site/content/kagent/1.x/observability/launch-ui.md +++ b/docs-site/content/kagent/1.x/observability/launch-ui.md @@ -112,7 +112,7 @@ A checkpoint appears in the transcript as a mark carrying the snapshot name and ## Attach files to a message -In the chat interface for agents on the `kagent` runtime, you can attach files to send with a message. An agent reads any files that you attach, so you can ask the agent about a log, a manifest, or a screenshot without pasting the contents into the message box. Note file attachments are supported only on the `kagent` runtime, so an agent on a `byo`, `codex`, or `claude` Harness has no attachment option in the chat. +In the chat interface for agents on the `kagent` runtime, you can attach files to send with a message. An agent reads any files that you attach, so you can ask the agent about a log, a manifest, or a screenshot without pasting the contents into the message box. Stage files in any of the following ways. @@ -126,11 +126,15 @@ The following limits apply to attachments: | Limit | Value | Enforced by | | ----- | ----- | ----------- | -| Accepted file types | Plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images | The UI, as you stage each file. A rejected file is reported by name. Browsers report no media type for some extensions, and the wrong one for others, so the UI falls back to the file extension before it decides whether a file qualifies. | -| Total size of the files in one message | 10 MB | The UI, as you stage each file. Note that when you host a reverse proxy in front of the UI, it applies its own body-size limit. A default nginx allows `1m`, so a larger attachment is rejected with a `413` before it reaches the UI pod. Raise the limit with `client_max_body_size`, as shown in [Serve the UI under a sub-path]({{< link path="setup/reverse-proxy#proxy-shapes" >}}). | +| Accepted file types | Plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images | The UI, as you stage each file. A rejected file is reported by name. | +| Total size of the files in one message | 10 MB | The UI, as you stage each file. | | Text read from one file | 200,000 characters | The runtime, which appends `[truncated]` to a longer file. | | Request body that the UI's nginx accepts | `ui.nginx.clientMaxBodySize`, default `20m` | The UI pod's nginx. The default sits just above the gateway's 16 MiB gRPC cap. | +The UI falls back to the file extension when the browser reports no media type, or the wrong one, for a file. For example, browsers report no media type for `.md` files. + +If you host a reverse proxy in front of the UI, the proxy applies its own body-size limit, and a default nginx allows only `1m`. Raise the limit as shown in [Serve the UI under a sub-path]({{< link path="setup/reverse-proxy#proxy-shapes" >}}). + ## Check Agent Substrate capacity The **Substrate** page shows whether there is capacity for an agent to run. It reads WorkerPools and ActorTemplates from Kubernetes, and live Actors and Worker assignments from the Agent Substrate API. diff --git a/docs-site/content/kagent/1.x/observability/metrics.md b/docs-site/content/kagent/1.x/observability/metrics.md index 876dfb82..083cd61b 100644 --- a/docs-site/content/kagent/1.x/observability/metrics.md +++ b/docs-site/content/kagent/1.x/observability/metrics.md @@ -40,7 +40,7 @@ Besides the standard Go runtime and process metrics, the controller reports the | `workqueue_depth`, `workqueue_queue_duration_seconds`, `workqueue_retries_total` | Gauge, histogram, counter | Work waiting for a reconciler, how long it waits, and how often it is retried. | | `leader_election_master_status` | Gauge | `1` on the controller replica that holds the leader lease. With several replicas, exactly one reports `1`. | | `rest_client_requests_total` | Counter | Requests from the controller to the Kubernetes API server, by status code. | -| `kagent_runtime_revision_gc_pending` | Gauge | Compiled agent revisions that the last successful discovery found eligible for cleanup. The controller reports a cached count, so a scrape costs no database or network call. The metric is absent until a discovery succeeds, and `0` reports a discovery that matched nothing. A failed discovery holds the previous value rather than clearing it. | +| `kagent_runtime_revision_gc_pending` | Gauge | Runtime revisions that the last successful discovery found eligible for cleanup. The controller reports a cached count, so a scrape costs no database or network call. The metric is absent until a discovery succeeds, and `0` reports a discovery that matched nothing. A failed discovery holds the previous value rather than clearing it. | | `kagent_runtime_revision_gc_duration_seconds` | Histogram | Time that one revision cleanup attempt takes, by the `kagent_gc_stage` label: `discovery` or `collection`. A `collection` attempt covers the database claim, the Agent Substrate read and deletion, and the database finalization. A failed attempt carries an `error_type` label holding a gRPC status code name, or `_OTHER` for every other failure, so the series that carry the label give both the failure rate and the reason. | The Agent Substrate `atecontroller` component reports the same `controller_runtime_*` and `workqueue_*` metrics for its own reconcilers. To keep the two apart in a query, filter by the scrape job, such as `job="kagent-controller-metrics"` in the OTel stack. diff --git a/docs-site/content/kagent/1.x/setup/reverse-proxy.md b/docs-site/content/kagent/1.x/setup/reverse-proxy.md index 48ac9b2c..31118677 100644 --- a/docs-site/content/kagent/1.x/setup/reverse-proxy.md +++ b/docs-site/content/kagent/1.x/setup/reverse-proxy.md @@ -34,7 +34,7 @@ helm upgrade --install kagent \ Both of the following proxy configurations work. Choose the one that matches your infrastructure. If you enable oauth2-proxy for SSO, the proxy must strip the prefix: with the prefix forwarded, oauth2-proxy cannot match its own sign-in and skip-authentication paths, and sign-in fails. -Both examples set `client_max_body_size`. A default nginx allows `1m`, so a larger attachment is rejected with a `413` before it reaches the UI pod. Keep the limit above the 10 MB that one chat message can carry. To see the attachment limits, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). +Both examples set `client_max_body_size`. A default nginx allows `1m`, so a larger attachment is rejected with a `413` before it reaches the UI pod. Keep the limit above the 10 MB that one chat message can carry. For the attachment limits, see [Attach files to a message]({{< link path="observability/launch-ui#attach-files-to-a-message" >}}). ### Proxy strips the prefix From fedff299b4dedaee8d06ba11cbaa34a3eb5bee01 Mon Sep 17 00:00:00 2001 From: Rachael Graham Date: Fri, 9 Oct 2026 12:58:35 -0500 Subject: [PATCH 4/4] Update launch-ui.md Signed-off-by: Rachael Graham --- docs-site/content/kagent/1.x/observability/launch-ui.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs-site/content/kagent/1.x/observability/launch-ui.md b/docs-site/content/kagent/1.x/observability/launch-ui.md index 0685aeed..412b3b7c 100644 --- a/docs-site/content/kagent/1.x/observability/launch-ui.md +++ b/docs-site/content/kagent/1.x/observability/launch-ui.md @@ -129,7 +129,8 @@ The following limits apply to attachments: | Accepted file types | Plain text, Markdown, CSV, JSON, XML, YAML, and HTML files, and PNG, JPEG, GIF, and WebP images | The UI, as you stage each file. A rejected file is reported by name. | | Total size of the files in one message | 10 MB | The UI, as you stage each file. | | Text read from one file | 200,000 characters | The runtime, which appends `[truncated]` to a longer file. | -| Request body that the UI's nginx accepts | `ui.nginx.clientMaxBodySize`, default `20m` | The UI pod's nginx. The default sits just above the gateway's 16 MiB gRPC cap. | +| gRPC message that the kagent API accepts | 16 MiB | The controller's gRPC server, and every kagent gRPC client. The limit is a compiled-in constant that no Helm value changes. | +| Request body that the UI's nginx accepts | `ui.nginx.clientMaxBodySize`, default `20m` | The UI pod's nginx. The default sits just above the 16 MiB gRPC message limit. | The UI falls back to the file extension when the browser reports no media type, or the wrong one, for a file. For example, browsers report no media type for `.md` files.