From 8bbd0aa556e2a5b483c50df6a81eea68c6a1c055 Mon Sep 17 00:00:00 2001 From: siddharthmenon-7 Date: Thu, 22 Oct 2026 12:29:37 +0530 Subject: [PATCH 01/20] 1.8.1 updates --- .../administration/integrations-settings.mdx | 26 ++++++++++++++----- agent-platform/projects.mdx | 14 +++++++++- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/agent-platform/administration/integrations-settings.mdx b/agent-platform/administration/integrations-settings.mdx index aa827de85..e3f692d00 100644 --- a/agent-platform/administration/integrations-settings.mdx +++ b/agent-platform/administration/integrations-settings.mdx @@ -17,13 +17,14 @@ Select **Connect Repository**, complete the fields, then select **Test connectio | Field | Description | |---|---| -| **Provider** | Selects the Git hosting service. It determines which credential types the **Auth Profile** picker accepts, so set it before you prepare a credential. | -| **Repository URL** | Points at the repository over HTTPS or SSH. It addresses the repository only. The folder this project occupies inside it comes from **Sync Path** further down. | -| **Repository Layout** | Decides whether this project shares a repository with others or takes one of its own. Choose a shared folder when you want every project's history in one place and one set of repository permissions. Choose a dedicated repository when a project needs its own access control or its own release cadence. | +| **Provider** | Selects the Git hosting service: **GitHub**, **GitLab**, **Bitbucket**, **Bitbucket Data Center**, or **Azure DevOps**. It determines which credential types the **Auth Profile** picker accepts and which repository URL forms the dialog takes, so set it before you prepare a credential. | +| **Repository URL** | Points at the repository over HTTPS or SSH. It addresses the repository only. The folder this project occupies inside it comes from **Sync Path** further down. Bitbucket Data Center accepts HTTPS only, in the `.../scm//.git` form. | +| **Repository Layout** | Decides whether this project shares a repository with others or takes one of its own. Choose a shared folder when you want every project's history in one place and one set of repository permissions. Choose a dedicated repository when a project needs its own access control or its own release cadence. A dedicated repository sets **Sync Path** to the repository root. | | **Branch** | Sets the branch the project reads and writes. Point non-production projects at a branch other than the one your builds run from, so an experiment in Studio doesn't reach it. | -| **Sync Path** | Sets the folder inside the repository that this project owns. Use the repository root when the project has the repository to itself, and a named folder when several projects share one. | +| **Sync Path** | Sets the folder inside the repository that this project owns. Use `/` for the repository root when the project has the repository to itself, and a named folder when several projects share one. With a shared folder, it defaults to `projects/`. | | **Path Preview** | Shows the location the platform resolved from your layout, path, and branch. Read it before you connect. It's the one place the three fields appear as the single destination they combine into. | -| **Auth Profile** | Selects the stored credential the sync uses. Select **Create Git token profile** to build one without leaving the dialog. | +| **Auth Profile** | Selects the stored credential the sync uses. The help text below the picker changes with the provider and names the profile types it accepts. Select **Create Git token profile** to build one without leaving the dialog. | +| **Require a project-owned auth profile** | Limits the integration to auth profiles this project owns, so workspace profiles can't serve it. Turn it on for production branches, so a change to a shared workspace profile can't affect this project's sync. | | **Conflict Strategy** | Decides what happens when Studio and the repository both change the same thing. Settle this before your first push rather than during your first conflict, since the strategy determines which side loses work. | ### Credentials by provider @@ -34,10 +35,21 @@ The picker lists only profile types that carry a token or key the sync can prese |---|---| | **GitHub** | A Bearer Token profile holding a personal access token, or an SSH Key profile. | | **GitLab** | A Bearer Token or API Key profile holding a project access token, or an SSH Key profile. OAuth Token grants don't appear here either. | -| **Bitbucket** | A raw repository or workspace access token, or an SSH Key profile. Atlassian API tokens need storing in the combined email and token form rather than as the token alone, which is the most common reason a valid Bitbucket credential fails. OAuth Token grants don't appear here either. | +| **Bitbucket** | A Basic profile with your Atlassian account email as the username and a Bitbucket API token as the password. Grant the token read and write access to repositories and pull requests, and read, write, and delete access to webhooks. Enter the email and token in their own fields rather than combining them into one value. A repository or workspace access token, or an SSH Key profile, also works. OAuth Token grants don't appear here either. | +| **Bitbucket Data Center** | A Basic profile with your Bitbucket Data Center username as the username and a personal HTTP access token as the password. The token needs repository write permission, plus admin permission if you want Studio to register the webhook for you. SSH isn't supported for this provider. See [Connect Bitbucket Data Center](#connect-bitbucket-data-center). | | **Azure DevOps** | A Bearer Token or API Key profile holding an Azure DevOps personal access token. Grant it Code read and write, add Code manage if you want branch and pull request operations, and add a webhook subscription scope if you want automatic sync. SSH Key and OAuth profiles aren't supported for this provider at all, so plan on a token. | -Once the integration is live, you can push agent definitions, pull repository changes into Studio, and resolve conflicts when edits collide. +### Connect Bitbucket Data Center + +Bitbucket Data Center is the self-managed edition of Bitbucket. Studio syncs with it over HTTPS using native Git, and a few requirements differ from the cloud providers. + +| Requirement | Description | +|---|---| +| Repository URL | Use the HTTPS clone URL, which ends in `/scm//.git`. SSH URLs aren't accepted. | +| Auth profile | Use a Basic profile that holds your Data Center username and a personal HTTP access token with repository write permission. | +| Host consent | Studio asks you to allow the Data Center host to receive the profile's credentials before it connects. Consent applies to that host only, so a profile you allow for one server doesn't reach another. | +| Webhook | When the token carries admin permission, Studio registers the webhook for you. When it doesn't, Studio shows the webhook URL and a one-time secret instead, and a repository admin adds them in Bitbucket. Until someone adds the webhook, repository changes don't reach Studio automatically. | + --- ## Auth profiles diff --git a/agent-platform/projects.mdx b/agent-platform/projects.mdx index d73874922..6eea21a0b 100644 --- a/agent-platform/projects.mdx +++ b/agent-platform/projects.mdx @@ -359,8 +359,20 @@ When several workspace models share the same provider and model ID as an archive 6. In the import preview, review the [model mapping](#review-model-mapping). Where the preview asks you to choose between models, select the one to link. 7. Select **Import** to start the import. 8. Review any validation errors or conflict reports surfaced by the platform after import completes. +9. If the **Import** dialog lists unresolved workflow tool bindings, open each workflow it names and rebind the tool before you run the workflow. See [Resolve workflow tool bindings](#resolve-workflow-tool-bindings). -Imported workflows include the complete workflow definition, including nodes, edges, versions, triggers, and tool bindings. As a result, workflows are functional immediately after import and do not require manual reconfiguration. +Imported workflows include the complete workflow definition, including nodes, edges, versions, triggers, and tool bindings. Re-importing a project keeps the workflow tool bindings already in place. + +#### Resolve workflow tool bindings + +A workflow binds each of its tool steps to a tool in the project. When the import can't resolve a binding, for example because the archive doesn't carry the tool the workflow expects, the **Import** dialog lists the affected bindings instead of reporting success. + +Treat the list as work still to do. A workflow with an unresolved binding fails at the step that calls the missing tool, so fix every listed binding before you deploy or run the workflow. + +| What to do | When | +| ---------- | ---- | +| Import or create the missing tool, then rebind the workflow step to it | The tool belongs in the project and the archive didn't include it. | +| Rebind the workflow step to an existing tool | The project already holds an equivalent tool under another name. | ## Delete a project From 87a4c7eadce7de9e98fab4e9a48e4cab1387cfd2 Mon Sep 17 00:00:00 2001 From: Prabhat Singh <109069787+prabhat-singh-kore@users.noreply.github.com> Date: Thu, 22 Oct 2026 14:10:26 +0530 Subject: [PATCH 02/20] Artemis Context Guide - Phase 1 implementation Artemis Context Guide - Phase 1 implementation --- .../reference/multi-agent-and-supervisor.mdx | 2 + agent-platform/abl/reference/tools.mdx | 6 ++ .../agent-behavior-settings.mdx | 2 + .../administration/general-settings.mdx | 2 + agent-platform/knowledge.mdx | 59 ++++++++++++++++++- agent-platform/memory-and-state.mdx | 2 + agent-platform/safety-and-guardrails.mdx | 56 ++++++++++++++++++ agent-platform/sessions.mdx | 23 ++++++++ 8 files changed, 151 insertions(+), 1 deletion(-) diff --git a/agent-platform/abl/reference/multi-agent-and-supervisor.mdx b/agent-platform/abl/reference/multi-agent-and-supervisor.mdx index 5e326f38d..bf65ee388 100644 --- a/agent-platform/abl/reference/multi-agent-and-supervisor.mdx +++ b/agent-platform/abl/reference/multi-agent-and-supervisor.mdx @@ -481,6 +481,8 @@ CONTEXT: The legacy shorthand `history: last_10` is still accepted during the compatibility window, but new agents should use the typed `mode` + `count` block. +Three forms parse without error and are silently ignored, each falling back to `full`: a single-line flow-mapping value such as `history: { mode: last_n, count: 3 }` (use the indented block shown above instead); an uppercase key inside `CONTEXT:`, such as `HISTORY:` or `PASS:` (keys inside `CONTEXT:` must be lowercase, unlike the handoff entry's own `TO:` / `WHEN:` keys); and a misspelled value, such as `history: recent`. Check the Request view of the target agent's first LLM step (see [LLM step request and response](/agent-platform/sessions#llm-step-request-and-response)) if the history you expect isn't showing up. + ### Return expectations When `EXPECT_RETURN: true`, the calling agent pauses and waits for the target agent to complete. diff --git a/agent-platform/abl/reference/tools.mdx b/agent-platform/abl/reference/tools.mdx index 93d8acc30..2307247d5 100644 --- a/agent-platform/abl/reference/tools.mdx +++ b/agent-platform/abl/reference/tools.mdx @@ -1313,6 +1313,12 @@ TOOLS: store_result: false ``` +When `store_result` is `true` (the default), the raw result is kept as a session value named `last__result`. It surfaces in `## Current Context` on later turns, but only for the agent that called the tool, and cut to 4,000 characters. This is separate from the within-turn shaping in [Result compaction](#result-compaction) and [MODEL_CONTEXT on a tool result](#model_context-on-a-tool-result) above, which apply only while the call is in progress -- `last__result` is what carries the result forward once the turn ends. + +Declaring an `on_result: SET:` block on the tool changes the default: `store_result` becomes `false` and `last__result` is no longer written, unless `store_result: true` is set explicitly alongside it. If a later turn needs a field from the result, either keep `store_result: true` or capture that field into a session value with `on_result: SET:`. + +For the agent-wide limits on how many compacted tool rounds survive in history, and how tool results are compacted across turns, see [Compaction policy overrides](/agent-platform/abl-reference/agent-declaration#compaction-policy-overrides). + ### Reuse secrets across tools (SecretRef) Some flows need a credential produced by one tool (a one-time token, session key, or OTP) to be sent to a later tool — without ever exposing the raw value to the LLM. SecretRef captures such values into an encrypted, session-scoped **secret vault** and restores them into downstream tool calls. diff --git a/agent-platform/administration/agent-behavior-settings.mdx b/agent-platform/administration/agent-behavior-settings.mdx index 7fd4a6977..fce829f92 100644 --- a/agent-platform/administration/agent-behavior-settings.mdx +++ b/agent-platform/administration/agent-behavior-settings.mdx @@ -251,6 +251,8 @@ The **Agent Transfer Settings** page configures defaults for agent transfer sess **Navigation**: **Project** → **Settings** → **Agent Transfer** +These are project-wide defaults for a human-agent transfer. An agent overrides them at runtime with an `ESCALATE` block's `routing` and `routing.voice` -- see [Routing configuration](/agent-platform/abl-reference/multi-agent-and-supervisor#routing-configuration) and [Voice transfer settings](/agent-platform/abl-reference/multi-agent-and-supervisor#voice-transfer-settings) in the ABL reference. + The page organizes content into three collapsible sections. Select a section header to expand or collapse it. Select **Save** to apply changes or **Reset** to restore all values to defaults. | Section | Description | diff --git a/agent-platform/administration/general-settings.mdx b/agent-platform/administration/general-settings.mdx index 283325b84..959842c56 100644 --- a/agent-platform/administration/general-settings.mdx +++ b/agent-platform/administration/general-settings.mdx @@ -675,6 +675,8 @@ This section controls how the runtime handles personally identifiable informatio | **Classify explicit DTMF using project PII patterns** | Matches a completed keypad entry to the project's enabled PII patterns, so a recognized value carries a type and a validation status while anything else stays a generic token. Raw digits never reach the model either way, so this setting changes how an entry is labelled rather than whether it's protected. | | **Detection methods allowed** | Sets the ceiling on which detection engines the project's patterns may use. Each pattern still selects its own method on the PII Protection page, so this field decides what's available to them rather than what they do. | +This redaction policy is project-wide. For a specific tool that needs to see the original, unredacted values despite it, see [PII access](/agent-platform/abl-reference/tools#pii-access) (`pii_access`) in the ABL tools reference. + ### Lookup tables Lookup tables are the reference data the runtime uses to validate field values and perform fuzzy matching during extraction. diff --git a/agent-platform/knowledge.mdx b/agent-platform/knowledge.mdx index 4d5e065dc..d68607aec 100644 --- a/agent-platform/knowledge.mdx +++ b/agent-platform/knowledge.mdx @@ -616,7 +616,7 @@ Enter a query in the Query field and configure the following settings before run - Semantic - finds conceptually relevant content based on meaning, even when the exact words don't appear in the source. - Keyword - finds exact or near-exact matches. Best for structured content where precise term matching is important. -**Top K** defines the maximum number of chunks returned per query. Set this based on how much context the agent needs to compose an accurate response. A higher value returns more context but increases token consumption when the agent processes the results. +**Top K** defines the maximum number of chunks returned per query. Set this based on how much context the agent needs to compose an accurate response. A higher value returns more context but increases token consumption when the agent processes the results. Defaults to 10, and can be set from 1 to 100 in the index's Top K setting (see [Additional settings](#additional-settings)); an explicit request from a tool call is capped at 100 regardless. {/* Removed in 1.5.0 **Resolve Mode** controls how results are resolved and ranked when multiple chunks from the same or different sources are returned. Three modes are available: @@ -654,6 +654,14 @@ Manage knowledge base configuration, view indexing details, configure citation b - General - Basic information about the knowledge base. - Index Configuration - Displays the retrieval and indexing settings used by the knowledge base. + + | Setting | Range | Default | What it does | + |---------|-------|---------|--------------| + | Top K | 1 to 100 | 10 | Chunks returned when a search call doesn't specify a count. | + | Similarity threshold | 0 to 1 | 0.2 | Minimum match score; 0 means no threshold. Raise it if weak matches are causing off-topic answers. | + | Keyword Weight (Hybrid) | 0 to 1 | 0.5 | The balance between exact-term and semantic matching for a Hybrid query. Raise it toward 0.7 for FAQ or product-code content. | + | Chunk Size / Overlap | 100 to 5,000 tokens | 1,000 / 200 | Size of indexed passages, set in the content processing pipeline's chunking stage. Larger chunks carry more context per hit but fit fewer hits in the token budget. Re-ingest after changing. | + - Citations - Controls how source references appear in search results and AI-generated responses. When enabled, response includes references to the content used to generate the answer. | Option | Description | @@ -690,3 +698,52 @@ To attach a knowledge tool using the DSL editor, follow these steps: 4. Open the agent's DSL editor by clicking **DSL** at the top of the agent page. 5. Paste the copied DSL into the **Tools** section of the agent definition. 6. Compile and save the changes. + +### How the platform searches + +Knowledge base results reach the model as the output of a tool call. They are never added directly to the model's current-turn context; the model, or the platform on the model's behalf, has to call the knowledge tool to see them. + +There are two paths into a turn: + +| Path | When it applies | What happens | +|------|------------------|--------------| +| **Automatic first search** | The agent's only business tool is a single knowledge base, the agent is not a coordinator (router or orchestrator), it does not collect `GATHER` fields with inline gather, it has no handoff or delegation tools, and the turn was not forwarded by a handoff or delegation. On by default; there is nothing to switch on. | The platform searches the customer's message before the model runs, adds the results to the conversation, and tells the model to answer only from those results. If nothing is found, the model gets a normal turn and is told to search again with a more specific query. | +| **Model-driven search** | Every other agent, and any follow-up search after an automatic first search. | The model calls `search_kb_(query)` with its own query, and the results come back as that tool's result like any other tool call. | + +The automatic first search runs outside the normal tool-call path, so a knowledge tool's `on_result` / `on_error` hooks and `MODEL_CONTEXT` only apply to searches the model makes itself. To shape what the model reads on every path, including the automatic one, use `search_instructions` and `compaction.max_search_tokens` -- see [Tool-level search settings](#tool-level-search-settings) below. + +On later turns, the history keeps a placeholder for the search call, the same as for any tool result. Search results are never kept for display beyond the turn that returned them; if the conversation needs a fact again, the model searches again. + +### Tool-level search settings + +Beyond the Studio configuration in [Configure AI](#configure-ai) and [Search and test](#search-and-test), the generated `search_kb_` tool itself takes a few settings. Set them on the project tool definition -- a tool library file, or the Studio tool editor. An agent's own `TOOLS:` entry for the same tool can add only `search_instructions` and a `compaction:` block. + +```yaml +TOOLS: + search_kb_hr_policies(query: string) -> object + description: "Search the HR policy handbook. Use for leave, benefits and conduct questions." + type: searchai + kb_name: "HR Policies" + retrieval_profile: object-aware + compaction: + max_search_tokens: 6000 + search_instructions: | + Prefer the current policy year. + Always filter by the employee's country when it is known. +``` + +| Setting | Values | Default | What it does | +|---------|--------|---------|---------------| +| `search_instructions` | free text | none | Added to the tool description, and turns on query planning for the automatic first search. An agent-file value is used only when the project tool has none of its own. | +| `retrieval_profile` | `object-aware` | standard retrieval | Splits a question into up to 10 document categories, searches each in parallel with reranking, and merges the results. Useful for a knowledge base that mixes document types where one question needs several of them. | +| `compaction.max_search_tokens` | 1 to 40,000 | none when 10 or fewer chunks return; 40,000 above that | Token budget for the results the model reads. Whole chunks are dropped from the end, never cut mid-text. Lower it for voice agents and short answers -- a large budget slows the reply and dilutes grounding. | +| `queryType`, `topK`, `filters`, `similarityThreshold` (optional parameters) | `queryType`: `vector`, `hybrid`, `structured`, `semantic`, `aggregation`; `topK` up to 100 | not exposed; the tool takes only `query` | Declare these as optional parameters to let the model choose the search mode, result count, or filters on each call. Use only when the model must steer the search itself -- otherwise leave it to the planner. | + +Other tool-result [compaction](/agent-platform/abl-reference/tools#result-compaction) settings don't apply to knowledge base results -- `max_search_tokens` is the lever to use. The only other limit is the shared budget when several tools run in parallel in the same turn (100,000 characters divided across them). + +Silent traps: + +- `retrieval_profile` accepts only the exact value `object-aware`. Any other value, including different casing, is ignored. +- An agent-file `search_instructions` is ignored once the project tool already has instructions of its own. +- If citations are turned off on any one knowledge base attached to an agent, they are turned off for all of that agent's knowledge bases. +- Test retrieval with a real customer identity where possible. Studio test chats search with public permissions, so permission-restricted content may not show up there. diff --git a/agent-platform/memory-and-state.mdx b/agent-platform/memory-and-state.mdx index 63c9a0620..723b5bb52 100644 --- a/agent-platform/memory-and-state.mdx +++ b/agent-platform/memory-and-state.mdx @@ -7,6 +7,8 @@ Agents on the platform use two kinds of memory: session memory and persistent me Learn how to declare, access, and manage session variables, persistent memory, and set up auto-recall using the ABL Editor. +Memory is distinct from **conversation history**, the turn-by-turn record of customer messages, agent replies and tool calls that an agent accumulates automatically within a session and that reaches the model on every turn without being declared. Memory, covered on this page, is the explicit state you put in `MEMORY:` -- a `SESSION:` variable, or a value made to persist with `remember:` and loaded back with `recall:`. To see what conversation history actually looked like in a given model call, open that call's Request view -- see [LLM step request and response](/agent-platform/sessions#llm-step-request-and-response). How much history a handoff or delegation carries over to the next agent is controlled separately, by `history:` on the `HANDOFF` -- see [History strategies](/agent-platform/abl-reference/multi-agent-and-supervisor#history-strategies). + ## Key concepts | Concept | Description | diff --git a/agent-platform/safety-and-guardrails.mdx b/agent-platform/safety-and-guardrails.mdx index d12e262c0..fb43f2d8d 100644 --- a/agent-platform/safety-and-guardrails.mdx +++ b/agent-platform/safety-and-guardrails.mdx @@ -42,6 +42,22 @@ flowchart TD D --> |Toxicity checks\nPII redaction\nContent filtering| E[Final Response Returned to User] ``` +### Guardrail checkpoints + +A guardrail rule's `kind` sets which single item it checks. A check sees only that one item -- never the conversation history or the system prompt -- so write each rule to judge one message on its own. + +| Checkpoint | `kind` | What the check sees | When it runs | +|---|---|---|---| +| Input | `input` | The customer's message. Model-based tiers see it with PII already tokenized. | Before the model is called. | +| Output | `output` | The final reply, plus up to 20 of this turn's tool results (4,096 characters each) when built-ins are enabled. | Before the reply is delivered. | +| Tool call | `tool_input` | The tool's arguments, as JSON. | Before the tool runs. | +| Tool result | `tool_output` | The result as the model would see it. | After the tool runs, before the model reads it. | +| Handoff | `handoff` | The context being passed, and the source and target agents. | Before the context is transferred, using the source agent's rules. | + +`kind: both` is shorthand for `input` plus `output`. See [Tool and handoff guardrails](#tool-and-handoff-guardrails) below for `tool_input`, `tool_output`, and `handoff`. + +A check that reads `content`, `session_state`, or `tool_results` needs `EXECUTION: guardrail_builtins: true`. Without it, the check errors and -- under the default Open fail mode -- the message it would have checked is let through. + --- ### Guardrail configuration levels @@ -208,6 +224,46 @@ Output guardrails support: --- +## Tool and handoff guardrails + +Beyond `input`, `output`, and `both`, a rule's `kind` can target a tool call, a tool's result, or a handoff to another agent. + +Use `kind: tool_input` to check a tool's arguments before the call runs: + +```yaml +GUARDRAILS: + block_large_transfers: + kind: tool_input + check: abl.matches_pattern(tool_input.amount, "^[0-9]{6,}$") + action: block + message: "That transfer amount needs manual review." +``` + +Use `kind: tool_output` to check a tool's result before the model reads it: + +```yaml +GUARDRAILS: + scrub_tool_pii: + kind: tool_output + check: abl.contains_pii(tool_output) + action: redact +``` + +Use `kind: handoff` to check the context passed to another agent. It is evaluated with the source agent's rules before the transfer happens: + +```yaml +GUARDRAILS: + handoff_review: + kind: handoff + llm_check: "Does this handoff include unredacted financial account numbers?" + action: block + message: "This conversation needs a different routing path." +``` + +A `block` at any of these checkpoints withholds the call, result, or handoff and returns an error to the model instead of ending the conversation. Pair `escalate` with your own routing setup -- see [Agent transfer](/agent-platform/administration/agent-behavior-settings#agent-transfer) -- since a guardrail `escalate` action only sends the escalation message and doesn't transfer the conversation by itself. + +--- + ## DSL and UI mapping The platform maintains a one-to-one mapping between the UI configuration and the DSL/ABL definition. This lets you: diff --git a/agent-platform/sessions.mdx b/agent-platform/sessions.mdx index 772900875..e68ae88b1 100644 --- a/agent-platform/sessions.mdx +++ b/agent-platform/sessions.mdx @@ -126,6 +126,29 @@ Each turn reports where its time went, so you can find the step that slowed a re When a lifecycle hook invokes a tool through a `CALL` action, the call appears in the trace as its own tool call, tagged with the hook type. Each one shows the URL, request, response, duration, and whether the call succeeded or failed. Use these entries to confirm that a hook ran and to see what it sent and received. +#### LLM step request and response + +Each LLM step in the timeline expands to show the exact call made to the model for that step. + +| Sub-tab | What you get | +|---------|----------------| +| Request | The full request sent to the model: `systemPrompt` (the complete system prompt text), the `messages` array (conversation history, with tool calls and results exactly as the model saw them), and `tools` (the tool list with schemas). This is the source of truth for what the model actually received -- when a reply is surprising, read this before changing the agent's ABL. | +| Response | The model's raw reply. | +| Summary | Tokens in and out, cost, and provider options for the call. | + +What to check in the Request view: + +- `systemPrompt` -- look for unfilled `{{placeholders}}`, missing memory values, and `_contextLimited` markers. +- `messages` -- check how earlier turns were compacted, whether tool results show as `**COMPACTED FOR CHAT HISTORY**`, and what a handoff or delegation passed through. +- Tool results for the current turn -- check whether a `MODEL_CONTEXT` view or the compaction strategy's output appears, and look for truncation markers. +- `tools` -- confirm each tool's description and parameters read the way you intend the model to use them. + +Secret-looking values are always masked in stored traces, and personal data appears as redacted tokens when the project's PII policy scrubs traces. Stored request payloads are capped at 256 KiB and responses at 128 KiB; use **Export entire trace** on the session page to download every event for offline review. + +#### Execution tree view + +Selecting a node in the session page's left-hand execution tree shows the same payload scoped to that one node: **Request** / **Response** for an LLM step, or **Input** / **Output** for a tool step. Use it to jump straight to one agent's call or one tool's exact input and output inside a longer trace, instead of scrolling the full timeline. + ### Errors Lists errors or warnings recorded in the session. From f55c2fd78ef50942e7491f488f870d244d7729de Mon Sep 17 00:00:00 2001 From: melindaVi-Kore Date: Thu, 22 Oct 2026 16:03:05 +0530 Subject: [PATCH 03/20] Update workflows.mdx --- agent-platform/workflows.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/agent-platform/workflows.mdx b/agent-platform/workflows.mdx index 42ad93536..f90dca9f2 100644 --- a/agent-platform/workflows.mdx +++ b/agent-platform/workflows.mdx @@ -459,6 +459,7 @@ You can export an individual workflow and import it into another project as an e 3. The workflow is downloaded as a `.workflow.json` file. The workflow export includes the workflow definition and references to dependent components, such as agents, tools, and auth profiles. These dependent components are not exported with the workflow. +Configuration variable references, including references to secret variables, are included as dependencies in the exported workflow. Configuration variable values are not exported. Workflow trigger definitions are not included in workflow exports. You must configure triggers manually after importing the workflow. @@ -468,11 +469,13 @@ The workflow export includes the workflow definition and references to dependent 2. Click **Choose file** and select the workflow export file. 3. In the Import Workflow dialog, enter a name for the workflow, and click **Preview**. 4. Review the workflow details and dependencies. Missing dependencies are identified in the preview. -5. If dependencies are missing, resolve them or select **Import with unresolved dependencies unselected** to continue without them. +5. If dependencies are missing, resolve them or select **Import with unresolved dependencies unselected** to continue without resolving them. 6. Click **Import**. The imported workflow is created as an editable draft. Unresolved dependencies must be manually relinked before you run or publish the workflow. +If a referenced configuration variable is missing from the target project, configure the variable before running or publishing the workflow. + --- ## Execute and inspect workflows From a1858780bea04ac67b0917d67741f390ec436242 Mon Sep 17 00:00:00 2001 From: Prabhat Singh <109069787+prabhat-singh-kore@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:14:20 +0530 Subject: [PATCH 04/20] Artemis Context Guide - Phase 2, 4 new docs/pages added Artemis Context Guide - Phase 2, 4 new docs/pages added --- .../abl/reference/configuration-reference.mdx | 51 +++++ agent-platform/context-and-prompts.mdx | 68 ++++++ agent-platform/context-compaction.mdx | 148 +++++++++++++ agent-platform/latency-and-speed.mdx | 203 ++++++++++++++++++ agent-platform/testing.mdx | 12 ++ docs.json | 4 + 6 files changed, 486 insertions(+) create mode 100644 agent-platform/abl/reference/configuration-reference.mdx create mode 100644 agent-platform/context-and-prompts.mdx create mode 100644 agent-platform/context-compaction.mdx create mode 100644 agent-platform/latency-and-speed.mdx diff --git a/agent-platform/abl/reference/configuration-reference.mdx b/agent-platform/abl/reference/configuration-reference.mdx new file mode 100644 index 000000000..345b40e60 --- /dev/null +++ b/agent-platform/abl/reference/configuration-reference.mdx @@ -0,0 +1,51 @@ +--- +title: Configuration reference +sidebarTitle: Configuration reference +--- + +A one-page index of every setting that changes what the model reads on a turn -- where it's set, what it defaults to, and what it changes. Use this page to find the right lever quickly, then follow the link to the full reference for the syntax and examples. + +ABL settings take effect in new conversations once saved, or once published and deployed for production channels. Project settings take effect on the next turn unless noted otherwise. + +Knowledge-base and voice levers are covered in full on [Knowledge bases and knowledge tools](/agent-platform/knowledge) and [Voice agents](/agent-platform/channels/voice) -- this table includes only their headline entries. + +| Setting | Where | Default | Changes | +|---------|-------|---------|---------| +| [`BEHAVIOR: role:`](/agent-platform/abl-reference/multi-agent-and-supervisor#behavior-settings) | Agent ABL | Not set (allow-list mode) | Which values reach `## Current Context`, and which prompt template is used -- see [How a turn is built](/agent-platform/context-and-prompts#what-the-model-sees-each-turn) | +| `GOAL`, `PERSONA`, `LIMITATIONS`, `{{refs}}` | Agent ABL | -- | The identity section; references also make values visible in `## Current Context` | +| `SYSTEM_PROMPT:` | Agent ABL | Catalog template | Replaces the template; runtime sections are still appended | +| [`MEMORY: SESSION:`](/agent-platform/memory-and-state#session-memory) | Agent ABL | -- | `## Session Memory` content, and what the model may write | +| [`MEMORY: persistent:`, `remember:`, `recall:`](/agent-platform/memory-and-state#persistent-memory) | Agent ABL | -- | Values loaded into the session; `recall: INSTRUCTION` lines in the prompt | +| [`HANDOFF … CONTEXT:`](/agent-platform/abl-reference/multi-agent-and-supervisor#handoff-context) (`pass`, `summary`, `history`, `memory_grants`) | Agent ABL | `history: full` | The receiving agent's history, context, and granted memory | +| [`DELEGATE … INPUT` / `PURPOSE`](/agent-platform/abl-reference/multi-agent-and-supervisor#delegate) | Agent ABL | -- | The only context a delegate gets | +| `CONVERSATION:` | Agent ABL | -- | `## Conversation Behavior` lines; listening and barge-in behavior on voice | +| [`EXECUTION.inline_gather`](/agent-platform/abl-reference/agent-declaration#configuration-properties) | Agent ABL | `false` (on in the voice profile) | `## Information Collection` instead of the `GATHER` list | +| [`EXECUTION.compaction.*`](/agent-platform/context-compaction#size-limits-and-compaction) | Agent ABL | See [Context size, compaction, and budgets](/agent-platform/context-compaction) | Tool results, earlier turns, and `## Current Context` budgets | +| `EXECUTION.models.summarization` | Agent ABL | Project tier | The model used for tool-result summaries | +| `EXECUTION.voice.instructions` | Agent ABL | -- | `## Voice Delivery Instructions` and voice formatting rules | +| `EXECUTION.guardrail_builtins` | Agent ABL | `false` | Whether a guardrail check can read `content`, `session_state`, and `tool_results` | +| [Tool `MODEL_CONTEXT`](/agent-platform/abl-reference/tools#model_context-on-a-tool-result) (`FIELDS` / `TEMPLATE`) | Tool ABL | -- | What the model sees of a tool result, now and later | +| [Response `MODEL_CONTEXT`](/agent-platform/abl-reference/flow#model_context-on-a-response) | Hook `RESPOND`, `COMPLETE`, `FLOW` step | -- | What the history records for a rich response | +| [Tool `compaction:`](/agent-platform/abl-reference/tools#result-compaction) (`essential_fields`, `summary_timeout_ms`, `max_search_tokens`) | Tool ABL | -- | Per-tool compaction, and the knowledge-base token budget | +| [Tool `store_result`](/agent-platform/abl-reference/tools#store-result) | Tool ABL | `true`; `false` once the tool has `on_result: SET` | Whether `last__result` is kept | +| Tool param `default_source`, `visibility_model`, `visibility_trace` | Tool ABL | Visible | Hides a runtime-supplied value from the model and from traces | +| [KB `search_instructions`, `kb_name`, `description`](/agent-platform/knowledge#tool-level-search-settings) | Tool ABL / KB settings | -- | How and when the model searches | +| [Index Top K, similarity threshold, keyword weight](/agent-platform/knowledge#additional-settings) | Studio KB index settings | 10, 0.2, 0.5 | How many chunks come back | +| Citations | Studio KB citation settings | On by default, per index | Citation instructions added to the prompt | +| [`GUARDRAILS:`](/agent-platform/abl-reference/guardrails) | Agent ABL | -- | Per-agent checks -- see [Guardrail checkpoints](/agent-platform/safety-and-guardrails#guardrail-checkpoints) | +| Guardrail policies, providers, fail mode | Studio Govern → Guardrails | Fail open | Project and tenant checks; `## Current Policy` | +| [Project compaction](/agent-platform/context-compaction#where-to-set-compaction-policies) | Project runtime config (API or import) | Platform defaults | Project-wide budgets; resolved once per conversation | +| [Voice latency profile and overrides](/agent-platform/administration/general-settings#voice-low-latency-profile) | Studio Settings → Runtime Config | Auto-seeded for voice | Tighter budgets, fast model tier, reasoning off, inline gather on | +| Filler | Project runtime config | Profile defaults | Voice filler behavior and the status-update instruction | +| [PII redaction](/agent-platform/administration/general-settings#pii-redaction) (`pii_redaction`) | Project runtime config | On | Tokens in place of personal data in the prompt and in traces. Built-in detectors start off on new projects. | +| [Multi-intent](/agent-platform/administration/general-settings#multi-intent-recognition) | Project runtime config | -- | Multi-request routing and task sections | +| [Cross-channel recall](/agent-platform/administration/agent-behavior-settings#omnichannel) | Project omnichannel settings | Per project | `## Previous Conversations (Other Channels)`: up to 30 messages of 500 characters each | + +Fixed by the platform, not configurable: the order of prompt sections, the Customer Output Contract, the tool-history marker and its 6-round window, the realtime voice handoff history-replay limits, and the absolute limits on `## Current Context` (40,000 characters per value, 100,000 for the whole block). + +## See also + +- [How a turn is built](/agent-platform/context-and-prompts) -- what each of these settings ultimately controls. +- [Context size, compaction, and budgets](/agent-platform/context-compaction) -- the compaction defaults in full. +- [Agent declaration](/agent-platform/abl-reference/agent-declaration) -- `GOAL`/`PERSONA`/`SYSTEM_PROMPT` and the `EXECUTION:` block. +- [Multi-agent and supervisor](/agent-platform/abl-reference/multi-agent-and-supervisor) -- `HANDOFF`, `DELEGATE`, and `ESCALATE`. diff --git a/agent-platform/context-and-prompts.mdx b/agent-platform/context-and-prompts.mdx new file mode 100644 index 000000000..319020b06 --- /dev/null +++ b/agent-platform/context-and-prompts.mdx @@ -0,0 +1,68 @@ +--- +title: How a turn is built +sidebarTitle: Context and prompts +--- + +Every agent turn ends in a single model request: one system prompt, the conversation history, and the tool list. This page explains which values the model can see each turn, where they come from, and how to keep a value out of the prompt entirely. For how that request is kept small -- the size budgets and compaction policies -- see [Context size, compaction, and budgets](/agent-platform/context-compaction). + +## At a glance + +Before the model reads it, every source of context is shaped: memory and `## Current Context` by visibility rules and size limits, conversation history and tool results by compaction, and knowledge-base results by a token budget. Guardrails check what goes into and comes out of each call, but they never see the assembled prompt itself. + +## What the model sees each turn + +Session values reach the system prompt in two ways: through the memory sections an agent declares (`## Session Memory`, `## Granted Memory`, and similar), and through a `## Current Context` block. Which values land in `## Current Context` depends on the agent's visibility mode. + +| Mode | When it applies | What goes into `## Current Context` | +|------|------------------|---------------------------------------| +| Allow-list (default) | The agent does not declare `BEHAVIOR:` with `role:` | Values the agent's own `GOAL`, `PERSONA`, `LIMITATIONS`, or `SYSTEM_PROMPT` reference; values passed in on handoff; results of the agent's own tools; values granted by `FLOW` steps. If any of those texts uses `{{context}}`, every session value is admitted. | +| Explicit | The agent declares `BEHAVIOR:` with `role: router`, `orchestrator`, or `assistant` | Only declared session memory, execution-tree memory, memory granted on handoff, and interaction details such as language, locale, and timezone. Undeclared and persistent values never appear. | + +These values are never shown in `## Current Context`, in either mode: + +- Platform identifiers -- session, tenant, project, and user IDs -- plus raw input and message metadata. +- The `config` and `env` namespaces. +- Keys that start with an underscore, except the handoff summary. +- Knowledge-base search results. They reach the model through the search tool call instead -- see [Knowledge base retrieval](/agent-platform/knowledge#how-the-platform-searches). +- In allow-list mode, values already shown in a memory section. In explicit mode, a declared session value can appear in both a memory section and `## Current Context`, so budget for that when sizing prompts. + +Tool results are visible only to the agent that produced them. A `last__result` value appears in the prompt of the agent that called the tool -- see [Store result](/agent-platform/abl-reference/tools#store-result). After a handoff, the receiving agent does not see it unless it's listed in `pass` or referenced directly. + +### Size limits + +Each `## Current Context` value is limited to 8,000 characters by default, and the whole block to 24,000. Automatic tool-result values are limited to 4,000 characters. A value over its limit is replaced by a marker object holding a preview of its start. Declared memory sections (`## Session Memory` and similar) are not size-limited, so keep declared memory small. The full set of default budgets, the voice-profile overrides, and how to diagnose a bloated or truncated prompt in a trace live in [Context size, compaction, and budgets](/agent-platform/context-compaction). + +### Keeping a value out of the prompt + +To keep a value out of what the model reads: + +- Don't declare it in `MEMORY:` and don't reference it. An allow-list agent never sees an undeclared value it doesn't reference. +- If a tool needs the value, declare it as a runtime-supplied parameter the model can't see. +- For tool results, use the tool's `MODEL_CONTEXT` to pass the model only the fields it needs -- see [MODEL_CONTEXT on a tool result](/agent-platform/abl-reference/tools#model_context-on-a-tool-result). + +```yaml +TOOLS: + use_runtime_state(runtime_state: string, operation: string) -> object + params: + runtime_state: + default_source: runtime + visibility_model: false + visibility_trace: false + context_access: + read: [runtime_state] +``` + +### Referencing values in prompt text + +Use `{{customer_tier}}` in `GOAL`, not `{{context.customer_tier}}`. In `GOAL`, `PERSONA`, and `LIMITATIONS`, the `context.` form makes the value visible in `## Current Context`, but the placeholder itself is not filled in -- only the plain `{{var}}` form interpolates. + +If a referenced value is unset, the literal `{{customer_tier}}` text stays in the prompt. Word the sentence so an empty value still reads sensibly, or set a default with `INITIAL:`. + +There is no per-entry setting to hide one declared memory value from the model while leaving the rest of a `MEMORY: SESSION:` block visible. Use the options in [Keeping a value out of the prompt](#keeping-a-value-out-of-the-prompt) above instead. + +## See also + +- [Context size, compaction, and budgets](/agent-platform/context-compaction) -- default size budgets, where context grows, and how to debug a bloated prompt from a trace. +- [Agent declaration](/agent-platform/abl-reference/agent-declaration) -- `GOAL`, `PERSONA`, `LIMITATIONS`, and `SYSTEM_PROMPT:` syntax. +- [Memory and state](/agent-platform/memory-and-state) -- declaring session and persistent memory. +- [Tools](/agent-platform/abl-reference/tools) -- shaping and storing tool results. diff --git a/agent-platform/context-compaction.mdx b/agent-platform/context-compaction.mdx new file mode 100644 index 000000000..f599e3ec1 --- /dev/null +++ b/agent-platform/context-compaction.mdx @@ -0,0 +1,148 @@ +--- +title: Context size, compaction, and budgets +sidebarTitle: Compaction and budgets +--- + +As a conversation runs, the model's context keeps growing: more customer turns, more agent replies, more tool calls and results. The runtime automatically manages that context so it stays within model limits -- compressing large tool results, replacing older tool results with placeholders, and shortening earlier turns -- according to a set of compaction policies you can tune per agent, per project, or per tool. This page lists the default budgets, shows where to set them, and walks through diagnosing a prompt that's grown too large. + +For what actually determines *which* values reach the model in the first place -- visibility modes and `## Current Context` -- see [How a turn is built](/agent-platform/context-and-prompts). + +## Size limits and compaction + +Three policies set how much the model reads on a given turn: + +- `tool_results` -- how tool output is shaped, both this turn and on later turns. +- `prior_turns` -- how earlier turns in the conversation history are compacted. +- `prompt_context` -- how `## Current Context` values are sized and projected. + +They merge in this order: platform defaults, then the voice low-latency profile (voice channels only), then project settings, then the agent's `EXECUTION.compaction`, then per-tool hints. Nothing trims the conversation to a token budget automatically, so a long-running conversation keeps growing unless you set bounds. + +### Default values + +| Policy | Setting | Default | Voice latency profile | +|--------|---------|---------|------------------------| +| `tool_results` | `strategy` | `summarize` | `structured` | +| | `max_chars` | 102,400 | 16,000 | +| | `structured_threshold` | 10,000 | 4,000 | +| | `keep_recent` | 2 | 1 | +| | `max_description_length` | 200 | 80 | +| | `summary_timeout_ms` | 5,000 (1,000 to 30,000) | 1,500 | +| `prior_turns` | `strategy` | `compact` | `compact` | +| | `assistant_preview_chars` | 200 | 120 | +| `prompt_context` | `value_max_chars` | 8,000 (40,000 max) | 6,000 | +| | `total_max_chars` | 24,000 (100,000 max) | 16,000 | +| | `auto_tool_result_value_max_chars` | 4,000 | 2,000 | +| | `projection_strategy` | `preview` | `preview` | + +### Prior-turn strategies + +| Strategy | Effect on earlier turns | +|----------|---------------------------| +| `none` | Earlier replies are kept as written. Tool results in history are still placeholders. | +| `placeholder` | Each earlier tool result is replaced by `[Prior turn result — summarized]`. | +| `compact` (default) | As `placeholder`, and each reply that followed a tool result is shortened to `assistant_preview_chars`. The agent's latest reply is kept whole if it is 2,000 characters or less. | +| `summarize` | Behaves the same as `compact`. No model call is made for this strategy. | + +### Projection strategies for Current Context + +A `## Current Context` value over its limit is replaced by a marker object (`_contextLimited: true`) carrying its original type and size, plus one of three levels of detail: + +- `preview` (the default) -- the first part of the value, as text. +- `summary` -- the value's shape: types, lengths, key names, and up to three sample items. +- `metadata` -- type and size only. + +### Where to set compaction policies + +- **Per agent, in ABL** -- the `EXECUTION.compaction` block. See [Compaction policy overrides](/agent-platform/abl-reference/agent-declaration#compaction-policy-overrides) for the full property reference. +- **Per project** -- the project runtime configuration, set by API or project import. Studio's Runtime Config tab exposes these controls only for the voice latency profile overrides; the project-wide section is not editable from Studio. +- **Per tool** -- `compaction: essential_fields`, `summary_timeout_ms`, and, for knowledge bases, `max_search_tokens`. See [Result compaction](/agent-platform/abl-reference/tools#result-compaction). + +```yaml +EXECUTION: + models: + summarization: gpt-4.1-mini + compaction: + tool_results: + strategy: summarize + max_chars: 32000 + structured_threshold: 8000 + keep_recent: 2 + essential_fields: + search_orders: [id, status, total, createdAt] + summarize_prompt: "Keep order IDs, totals and statuses." + prior_turns: + strategy: compact + assistant_preview_chars: 300 + prompt_context: + value_max_chars: 8000 + total_max_chars: 24000 + auto_tool_result_value_max_chars: 4000 + projection_strategy: preview +``` + +The compaction policy is resolved once per conversation. In a multi-agent project, set compaction at the project level, or set it the same way on every agent in a handoff chain -- it is not re-resolved on handoff. + +Memory sections (`## Session Memory`, `## Granted Memory`, `## Gather Progress`) are not covered by these limits. Keep declared memory small -- see [Memory and state](/agent-platform/memory-and-state). For a single large tool result, a `MODEL_CONTEXT` view is a better tool than raising a size limit: it's exact, and it costs no extra model call. + +## Controlling context size + +You control three things: which values may enter the prompt, how large each piece may be, and how long tool output stays around. Most parts of the prompt have a default size limit you can change. Two parts have none -- the conversation history and declared session memory -- so uncontrolled growth usually starts there. Most cuts leave a marker you can find in a trace; knowledge-base chunk drops and the structural shortening of long lists before a summary do not. + +### Where context grows + +| Source | Grows with | Default limit | Your lever | +|--------|------------|----------------|-------------| +| Conversation history | Every turn | None: no token cap, and auto-summarization is off | `prior_turns` (previews of earlier replies), a response `MODEL_CONTEXT` on rich responses, `history: last_n` or `summary_only` on handoffs | +| Declared session memory (`## Session Memory`, `## Granted Memory`, `## Gather Progress`) | The size of the values you store | None | Declare only what the model needs. Keep large objects in tool results or persistent memory, and use `RESET: per_activation` for scratch values. | +| `## Current Context` | The number of values visible | 8,000 per value, 24,000 in total | Explicit visibility mode, named references instead of `{{context}}`, `prompt_context` budgets | +| Tool results, this turn | The size of the API payload | Summarized above 10,000 characters; 102,400 at most | `MODEL_CONTEXT` first, then the `tool_results` strategy and `essential_fields`. Avoid `strategy: none` on unbounded APIs. | +| Tool calls in history | Tool use per turn | Arguments kept for 6 rounds; results become a marker | Hide bulky arguments with `default_source: runtime` | +| Knowledge-base results | Chunk count and size | 40,000 tokens when more than 10 chunks come back | `max_search_tokens`, Top K, Similarity threshold -- see [Tool-level search settings](/agent-platform/knowledge#tool-level-search-settings) | +| Explicit mode | Each declared value | A value can appear in both `## Session Memory` and `## Current Context` | Keep declared memory small | +| Recall and notes | Cross-channel recall, resolved-intent ledgers, recall instructions | 30 messages of 500 characters each; 8 ledger entries | Recall settings; keep `INSTRUCTION` text short | + +### Where context gets cut + +| Cut point | Default | Marker in the trace | Lever | +|-----------|---------|----------------------|-------| +| One `## Current Context` value | 8,000 characters | `_contextLimited: true` with a preview, summary, or size | `value_max_chars` (up to 40,000), `projection_strategy` | +| The whole `## Current Context` block | 24,000 characters | Values left out are listed by name | `total_max_chars` (up to 100,000) | +| An earlier tool result in Current Context | 4,000 characters | `_contextLimited`, plus a `## Prior Tool Result Context` note | `auto_tool_result_value_max_chars` | +| A tool result this turn | Summarized above 10,000 characters; cut at 102,400 | `"_summarized": true` or `...[truncated: N chars, showing first M]` | `MODEL_CONTEXT`, `structured_threshold`, `max_chars`, `strategy` | +| An older result within a long turn | Only the last 2 rounds stay whole | `[Result available — see earlier in conversation]` | `keep_recent` | +| Tool results on later turns | Always replaced | `**COMPACTED FOR CHAT HISTORY**`, `[Prior turn result — summarized]` | Save what you need with `on_result: SET` | +| Earlier tool-backed replies | 200-character preview | `[Prior response: "…"]` | `assistant_preview_chars`, or `prior_turns: placeholder` | +| A `MODEL_CONTEXT` view | 16,000 characters or 1,000 items | An "unavailable" marker -- the view fails rather than being cut | Select fewer fields | +| Knowledge-base results | The token budget | Whole chunks dropped from the end | `max_search_tokens` | +| Handoff history | Full by default | The receiver's history starts later | `history:` -- see [History strategies](/agent-platform/abl-reference/multi-agent-and-supervisor#history-strategies) | + +### A budget recipe for a production agent + +1. Declare `BEHAVIOR: role:` so only declared and granted values reach `## Current Context`. +2. Give every tool with a large or nested result a `MODEL_CONTEXT`, and save the fields later turns need with `on_result: SET`. +3. Keep declared session memory to small scalars. Use `RESET:` for scratch values. +4. Use `history: last_n` or `summary_only` with a summary on handoffs in long conversations. Pass state with `pass`, not history. +5. Set `max_search_tokens` on every knowledge base, lower for voice. +6. Set compaction once at the project level so every agent in a handoff chain uses the same budgets, then tune each agent only where needed. +7. Run a 20-turn test conversation, then check the trace's Request view and the session Overview's Token Breakdown for growth from turn to turn. + +### Debugging a bloated or truncated prompt + +Open a session's Traces tab, pick an LLM step, and open its Request view (see [LLM step request and response](/agent-platform/sessions#llm-step-request-and-response)). Search `systemPrompt` and `messages` for `_contextLimited`, `truncated`, `_summarized`, `COMPACTED FOR CHAT HISTORY`, and `Prior response`. Also look for `Prior turn result`, `Result available`, and an "unavailable" marker. + +Knowledge-base results leave no marker in the trace, so compare their size against `max_search_tokens` directly. If the prompt is large and none of these markers explain it, the size is coming from conversation history or a memory section, and the levers in [Where context grows](#where-context-grows) apply. + +## Common mistakes + +- There is no per-entry switch to hide one declared memory value from the model. Either don't declare it, or supply it through a runtime-supplied tool parameter instead. +- There is no automatic token cap on conversation history. A long-running conversation needs `prior_turns`, `MODEL_CONTEXT`, and handoff history settings to stay bounded. +- Compaction settings are resolved once per conversation, the first time they're needed -- usually by the agent that starts it -- and are not refreshed on handoff. Set them consistently across a handoff chain instead of relying on the receiving agent's own settings. +- The automatic first knowledge-base search for a single-KB agent can't be turned off. Control its size with `max_search_tokens` instead. +- Studio's Runtime Config tab edits project compaction only inside the voice profile. Set the project-wide section by API or project import. + +## See also + +- [How a turn is built](/agent-platform/context-and-prompts) -- visibility modes and what reaches `## Current Context` in the first place. +- [Compaction policy overrides](/agent-platform/abl-reference/agent-declaration#compaction-policy-overrides) -- the full `EXECUTION.compaction` property reference. +- [Result compaction](/agent-platform/abl-reference/tools#result-compaction) and [Store result](/agent-platform/abl-reference/tools#store-result) -- per-tool compaction and `last__result`. +- [Tuning for latency](/agent-platform/latency-and-speed) -- smaller, stable prompts as a speed lever. diff --git a/agent-platform/latency-and-speed.mdx b/agent-platform/latency-and-speed.mdx new file mode 100644 index 000000000..019a03d5e --- /dev/null +++ b/agent-platform/latency-and-speed.mdx @@ -0,0 +1,203 @@ +--- +title: Tuning for latency +sidebarTitle: Latency and speed +--- + +A turn's time is roughly the number of sequential model calls multiplied by the time each one takes, plus tool time, plus whatever checks run before and after. The time for each call grows with prompt size and with the model tier it uses. The three biggest wins are fewer sequential model calls per turn, smaller and more stable prompts, and fast tools that return only what the model needs. This page works through all three, plus the checks and voice settings that add their own latency. + +This page is about response latency. For Arch AI's reinforcement-learning optimization loop, see [Optimize](/agent-platform/optimize) -- a different feature with a different goal. + +## Where a turn's time goes + +| Step | Runs when | Typical cost | Lever | +|------|-----------|---------------|-------| +| Input checks | Every turn with input guardrails, before the model | 100 ms per rule; up to 5 s for a provider, 15 s for a model judge | Prefer `check` rules, and use `llm_check` only where meaning matters | +| Routing call | Every turn that starts at a router or orchestrator | One full model call | Deterministic `WHEN` on handoffs; a faster tier for coordination | +| Main model calls | 1, plus 1 per tool round | Prompt size × model tier | Fewer tool rounds; smaller prompts; fast or balanced tiers | +| Tool calls | Each round | Your API's latency (30 s default timeout) | Fast APIs, parallel calls, `MODEL_CONTEXT` | +| Tool-result summaries | A result over 10,000 characters, under `summarize` | An extra call of up to 5 s on the balanced tier | `MODEL_CONTEXT` or `structured`; a fast summarization model | +| Knowledge-base planning | KBs with `search_instructions` or filters | An extra small call (up to 5 s) | Keep instructions only where needed | +| Extraction | `GATHER` fields outside inline gather | An extra small call per turn | `EXECUTION.inline_gather: true` | +| Output checks | Every reply with output guardrails | The reply is held until checks pass; a judge adds a call | Fewer output judges; a stream-safety mode that streams | +| Reask | An output rule with `reask` fires | A full extra model call | Use `block` with a good message on latency-critical agents | +| Handoff hops | Each handoff | The receiving agent's full turn | Flatter topologies; let orchestrators answer simple asks | + +## Fewer model calls per turn + +### Topology + +- **Keep routing shallow.** Each hop -- router to specialist to sub-specialist -- adds at least one full model call. Two levels is usually enough. +- **Route deterministically where you can.** A handoff `WHEN` the runtime can evaluate against stored state -- a flag your tools or flow have already set -- fires without asking the model. `ESCALATE` triggers written as expressions work the same way. +- **Let coordinators answer simple turns.** `role: orchestrator` can answer greetings and trivial questions directly; `role: router` always spends a call routing. +- **Delegate only for real sub-tasks.** A delegate runs its own full turn while the parent waits, up to 30 seconds by default. Use a tool instead when a single API call would do. +- **Hand back only when it pays off.** `ON_RETURN: action: resume_intent` makes the parent handle a message again straight away. Use it only where the customer would otherwise have to repeat themselves. +- **Send each receiver less.** A handoff with `history: summary_only` or `last_n`, and a short summary, gives the receiver a smaller first prompt. + +### Inside an agent + +- **Answer straight from a tool.** `on_result: do: - RESPOND: "…"` sends the reply and ends the tool loop, saving the model call that would otherwise phrase it. Add a response `MODEL_CONTEXT` so later turns know what was said. +- **Use `FLOW` steps with `REASONING: false`** for fixed steps such as collecting details, calling a tool, or confirming. They run without a model call. +- **Make one tool do one job end to end.** Three sequential lookups cost three model rounds; one tool that does all three costs one. The model can also call independent tools in parallel in a single round. +- **Turn on `EXECUTION.inline_gather: true`** so field extraction happens in the same call as the reply. On a single-KB agent with `GATHER` fields, this also turns off the automatic knowledge-base search -- measure both before committing. +- **Validate inputs before calling.** `process: before: require:` rejects bad inputs without a failing API call and a retry round. +- **Use `confirm` only on irreversible actions.** Each confirmation costs a full extra turn with the customer. +- **Multi-intent completion.** With the default `completion_signal: delivered_response`, a small check runs after each queued request's reply. `task_signal` lets the agent signal completion itself instead. + +```yaml +AGENT: Order_Status +GOAL: "Tell customers where their order is" +BEHAVIOR: + role: assistant +EXECUTION: + inline_gather: true +GATHER: + order_id: + prompt: "The order number, for example A-1031" + type: string + required: true +TOOLS: + get_order_status(order_id: string) -> {status: string, eta: string, carrier: string} + description: "Current status and delivery estimate for one order" + effect: read_only + MODEL_CONTEXT: + FIELDS: [status, eta, carrier] + on_result: + do: + - RESPOND: "Order {{order_id}} is {{result.status}} with {{result.carrier}}, arriving {{result.eta}}." + MODEL_CONTEXT: "Told the customer order {{order_id}} is {{result.status}}, ETA {{result.eta}}." +``` + +This agent answers a status question in one model call (extraction plus the tool call) and one API call -- no second call is needed to phrase the answer. + +## Smaller, stable prompts and payloads + +Prompt size drives time to first token on every call in the turn, and that cost is paid again on each tool round. A prompt that starts the same way every turn also lets providers that cache automatically reuse that start. + +### Prompt and context + +- **Explicit visibility.** Declare `BEHAVIOR: role:` so `## Current Context` holds only declared and granted values. Avoid `{{context}}` in production prompts. +- **Small memory.** Session memory is sent in full on every call. Store IDs and short strings, not objects or lists. +- **Tight context budgets.** On latency-sensitive agents, lower `prompt_context.total_max_chars` (16,000 is the voice default) and `auto_tool_result_value_max_chars` (2,000 on voice) -- see [Context size, compaction, and budgets](/agent-platform/context-compaction). +- **Short history.** Keep `prior_turns: compact`, put a response `MODEL_CONTEXT` on every rich reply, and use `history: last_n` on handoffs in long conversations. +- **Short instructions.** `GOAL`, `PERSONA`, `LIMITATIONS`, and `search_instructions` are sent on every call. Move rarely needed guidance into a tool description or a `RECALL INSTRUCTION` that loads only when relevant. +- **A stable start to the prompt.** Identity, rules, and the tool list come first; values that change each turn come later, in memory and `## Current Context`. A `{{variable}}` in `GOAL` or `PERSONA` changes the very start of the prompt every time its value changes. For values that change each turn, an explicit-mode agent that declares them in memory keeps them in the memory sections and `## Current Context` instead, leaving the stable start untouched. + +### Tools + +- **Fewer tools per agent.** Every tool's description and schema is sent on every call, and the model chooses faster and better from a short list. Split large tool sets across specialists. +- **Short descriptions and parameters.** One or two sentences per tool. Hide parameters the model doesn't fill with `default_source: runtime` and `visibility_model: false`. +- **Small results.** `MODEL_CONTEXT: FIELDS` on every tool that returns more than a few fields. That avoids the summarization call and keeps each tool round small. Better still, return compact payloads from the API itself: filter, paginate, and drop fields the agent never uses. +- **Structured, not summarized.** On chat agents where speed matters, prefer `tool_results.strategy: structured` with flat `essential_fields`; summarizing costs an extra call. Voice never summarizes. +- **Tight timeouts.** Set `timeout` on the Project Tool to what the API really needs, rather than the 30-second default. Use transport retry only on idempotent reads. + +### Knowledge base + +- **Token budget.** Set `max_search_tokens` on every KB tool (2,000-4,000 for voice, more for long-form chat). +- **Fewer, better chunks.** Lower Top K and raise Similarity threshold so fewer, better chunks come back. +- **Automatic-search eligibility.** A single-KB agent gets the automatic first search, which saves a model round. Adding other business tools, handoff or delegation tools, or `GATHER` fields collected with inline gather gives that up -- see [How the platform searches](/agent-platform/knowledge#how-the-platform-searches). +- **Selective extras.** Use `search_instructions` and `retrieval_profile: object-aware` only where they improve answers. Each adds planning time or extra parallel searches with reranking. + +```yaml +AGENT: Policy_Answers +GOAL: "Answer HR policy questions from the handbook" +BEHAVIOR: + role: assistant +EXECUTION: + compaction: + tool_results: + strategy: structured + keep_recent: 1 + prior_turns: + strategy: compact + assistant_preview_chars: 160 + prompt_context: + total_max_chars: 12000 + auto_tool_result_value_max_chars: 2000 +TOOLS: + search_kb_hr_policies(query: string) -> object + compaction: + max_search_tokens: 3000 +``` + +## Checks, side calls, models, and voice + +### Guardrails and checks + +- **Order rules by cost.** Put `check` (CEL) rules first. Use provider rules for moderation and `llm_check` only for meaning patterns can't catch -- each judge is an extra model call at its checkpoint. +- **Streaming and output rules.** An agent with output guardrails or response constraints holds a streamed reply until the checks pass, in every stream-safety mode except Terminate forward and Retract capable. Nothing is shown until the full reply has been generated and checked. If both output rules and fast streaming are needed, set the project's stream-safety mode to Terminate forward: text then flows and is stopped on a violation. +- **Reask costs a full regeneration.** On latency-critical agents, prefer `block` with a good message instead. +- **Timeouts.** Lower the policy's Model and LLM timeouts for voice, and pick the fail mode deliberately. +- **PII.** Model-based detection waits up to its time budget (200 ms by default) on each scan. A pattern-only rule skips that wait, if pattern detectors cover the data. + +### Model tiers + +| Operation | Default tier | Speed lever | +|-----------|---------------|-------------| +| Coordination and routing | Most capable | Routing is a classification task -- test a balanced or fast model for routers. | +| Agent replies | Balanced | Keep balanced for quality-sensitive agents; fast for FAQ and status agents. | +| Extraction, validation, tool selection, guardrail judges | Fast | Already fast. | +| Tool-result summarization | Balanced | Set to fast, or avoid summaries entirely with `MODEL_CONTEXT`. | + +Turn off extended reasoning and thinking for conversational agents unless their answers genuinely need it. The voice low-latency profile does this by default. + +### Voice + +- **Keep the low-latency profile on.** It sets fast tiers, reasoning off, inline gather, and tight compaction. Make sure the workspace has a fast-tier model configured. +- **Fillers hide waiting; they don't remove it.** `voiceDelayMs` (300 ms in the profile) and status tags (`piggybackEnabled`, at no extra model cost) keep the caller informed while tools run. +- **Short spoken replies.** Use `CONVERSATION: speaking: max_sentences` and short instructions. +- **Realtime voice.** On Gemini Live, a long tool call blocks the voice model unless the channel's pending-tool fillers are on; Amazon Nova Sonic has its own pending-tool filler setting. Keep tool results small for realtime voice with `compaction: provider_fields`. +- **Buffered stream safety on voice.** Buffered or Gated delays the first audio until checks finish. + +## Measuring before and after + +- **Operate → Sessions → a session → Performance → LLM & Tools** lists every model and tool call in a turn with its latency, tokens, and cost. Count the sequential model calls. +- **The Traces tab → an LLM step → Summary** shows input tokens. Compare turn 1 with turn 20 to see growth. +- **Insights → Analytics Explorer → Generations** shows time to first token and latency across sessions. +- Change one thing at a time -- topology, tool payloads, tiers -- and re-run the same test conversation in a new session. + +## Speed checklist + +- [ ] At most two routing hops, with deterministic `WHEN` where state allows it. +- [ ] Status-style answers come straight from the tool (`on_result: do: RESPOND`). +- [ ] Every tool with more than a few fields has `MODEL_CONTEXT`; no tool-result summaries on hot paths. +- [ ] Fewer than about 10 tools per agent, with one- or two-sentence descriptions. +- [ ] `max_search_tokens` set on every knowledge base. +- [ ] Session memory holds IDs and short strings only. +- [ ] Routing and summarization use the cheapest tier that passes your evaluations. +- [ ] Output rules use `check` or providers, or the stream-safety mode keeps the reply streaming. + +## Design guidance + +The most reliable agents keep the prompt small and explicit: declare only what the model needs, shape every tool result, and pass state between agents on purpose rather than relying on history. + +- **Make visibility explicit.** Production agents should declare `BEHAVIOR: role:` so `## Current Context` holds only declared and granted values. Allow-list mode with `{{context}}` admits everything in the session. +- **Shape tool results at the source.** Give every tool that returns more than a few fields a `MODEL_CONTEXT`. Save anything needed on later turns to session values with `on_result`, because history keeps only a placeholder. +- **Keep memory lean.** Session memory is shown in full on every turn and is not size-limited. Hold large objects in tool results or persistent memory, not in declared session memory. +- **Hand off on purpose.** Prefer `pass` plus a templated summary, with `history: last_n` or `summary_only`, over the full default for long conversations. Give delegates everything they need in `INPUT` and `PURPOSE`. +- **Give the agent the date.** The system prompt has no current date or time -- only `GATHER` date fields get today's date, during extraction -- so supply one explicitly when an agent reasons about relative dates. +- **Keep secrets out of prompt text.** Credentials go in auth profiles, personal fields are marked `SENSITIVE`, and card data uses `SECURE_INPUT`. +- **Put stable text first.** `GOAL`, `PERSONA`, `LIMITATIONS`, and the tool list form the stable start of the prompt; values that change each turn come later, in `## Current Context`. Keeping the stable part stable helps provider-side prompt caching, which shows as Cache Read tokens on the session Overview. +- **Write guardrails for one message at a time.** A check never sees the conversation history. Choose the fail mode deliberately. + +## Pre-ship checklist + +- [ ] Each agent declares `BEHAVIOR: role:`, or its `## Current Context` has been checked in a trace. +- [ ] No `{{placeholder}}` shows unfilled in the system prompt of a test trace. +- [ ] No `{{config.*}}` or `{{env.*}}` appears in `GOAL`, `PERSONA`, `LIMITATIONS`, `SYSTEM_PROMPT`, or `RESPOND`. +- [ ] Every tool with a large or nested result has `MODEL_CONTEXT`, tested against a real response. +- [ ] Rich responses carry a response `MODEL_CONTEXT`. +- [ ] Handoff `CONTEXT:` keys are lowercase, and `history` uses a supported form. +- [ ] Delegates receive everything they need through `INPUT` or `PURPOSE`. +- [ ] Sensitive `GATHER` fields are marked `SENSITIVE` with a `PII_TYPE`. +- [ ] Guardrail rules set `kind` and `action`, use `abl.`-prefixed functions, and the policy fail mode is chosen on purpose. +- [ ] Memory is tested with an identified user; knowledge-base retrieval is tested with a real customer identity. +- [ ] Voice agents: the fast model tier has a model assigned, and custom-prompt voice agents state their own spoken-style rules. +- [ ] A long test conversation (20+ turns) has been checked for prompt size in the trace. +- [ ] Final tests ran in a new conversation, on the version that will be deployed. + +## See also + +- [Context size, compaction, and budgets](/agent-platform/context-compaction) -- the size budgets referenced throughout this page. +- [How a turn is built](/agent-platform/context-and-prompts) -- visibility modes and what reaches the model each turn. +- [Test agents](/agent-platform/testing) -- running and reading a test conversation. +- [Sessions](/agent-platform/sessions) -- reading a trace's Performance and Traces tabs. diff --git a/agent-platform/testing.mdx b/agent-platform/testing.mdx index 2435c7ee0..1e388b291 100644 --- a/agent-platform/testing.mdx +++ b/agent-platform/testing.mdx @@ -82,3 +82,15 @@ Session ``` For repeatable, automated testing beyond manual chat, the platform supports Personas, Scenarios, and Evals. [Learn More](/agent-platform/evals). + +## Pre-ship checklist + +Before deploying a new or updated agent, confirm the basics in a test trace: + +- [ ] No `{{placeholder}}` shows unfilled in the system prompt. +- [ ] Every tool with a large or nested result has `MODEL_CONTEXT`, tested against a real response. +- [ ] Memory is tested with an identified user; knowledge-base retrieval is tested with a real customer identity. +- [ ] A long test conversation (20+ turns) has been checked for prompt size growth. +- [ ] Final tests ran in a new conversation, on the version that will be deployed. + +See [Pre-ship checklist](/agent-platform/latency-and-speed#pre-ship-checklist) for the full list, including guardrail, handoff, and voice-specific checks. diff --git a/docs.json b/docs.json index 0a13cf143..a94ac0b6c 100644 --- a/docs.json +++ b/docs.json @@ -75,6 +75,7 @@ "/agent-platform/orchestrate", "/agent-platform/workflows", "/agent-platform/knowledge", + "/agent-platform/context-and-prompts", { "group": "Tools", "pages": @@ -89,6 +90,7 @@ ] }, "/agent-platform/memory-and-state", + "/agent-platform/context-compaction", "/agent-platform/gather-data", "/agent-platform/prompts", "/agent-platform/feedback-template", @@ -114,6 +116,7 @@ "/agent-platform/testing", "/agent-platform/evals", "/agent-platform/optimize", + "/agent-platform/latency-and-speed", { "group": "Govern", "pages": @@ -167,6 +170,7 @@ "icon": "laptop-code", "pages": [ + "/agent-platform/abl/reference/configuration-reference", "/agent-platform/abl/reference/language-overview", "/agent-platform/abl/reference/scripting-constructs", "/agent-platform/abl/reference/agent-declaration", From fd08db92ba59790a0ea7794447ed4a188298cd4d Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 16:22:04 +0530 Subject: [PATCH 05/20] Updated MD linting rules --- .markdownlint.jsonc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc index b7584e7ee..59bcb19ed 100644 --- a/.markdownlint.jsonc +++ b/.markdownlint.jsonc @@ -11,6 +11,8 @@ */ "MD001": true, //Heading levels should only increment by one level at a time. But in RNs we use this. + "MD009": true, //No trailing spaces. + "MD012": true //Multiple consecutive blank lines. "MD013": false, //Line length should be within limits. "MD022": true, //Headings should be surrounded by blank lines "MD023": true, //Headings must start at the beginning of the line @@ -19,12 +21,15 @@ "MD029": true, //Ordered list item prefix. Turn to true later since it'll catch improperly-indented content in ordered lists. "MD031": true, //Fenced code blocks should be surrounded by blank lines. Turn to true later. "MD032": true, //Lists should be surrounded by blank lines + "MD033": false, //No inline HTML "MD034": true, //Bare URL or email used. Mentions of naked email ID converts an intended sample to a mailto link. Or a sip example to a mailto link. "MD036": false, //Emphasis used instead of a heading. We use bold for heading but that's incorrect. "MD039": true, //Spaces inside link text. Turn it on later "MD040": true, //Fenced code blocks should have a language specified. + "MD041": true, //All articles start with a heading in the first line in the MD file. + "MD047": true, //Files should end with a single newline character "MD056": true, //Table column count. Some incorrectly-formatted table rows can have less or more cells than the rest of the table. The information in such cells is lost in the output that we don't want. "MD058": true, //Tables should be surrounded by blank lines. "MD059": true, //Link text should be descriptive. Turn it on later after we edit link texts. - "MD041": true //All articles start with a heading in the first line in the MD file. + "MD060": false //Table column style } From 3c91561b0401adadb482143b1b68cd6ff45b42f3 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 16:22:48 +0530 Subject: [PATCH 06/20] Linting, formatting, spell check, etc. --- .../administration/ai-configuration.mdx | 5 +- agent-platform/create-agents.mdx | 5 +- agent-platform/faq.mdx | 2 +- agent-platform/feedback-template.mdx | 2 +- agent-platform/getting-started.mdx | 54 +++++++++---------- agent-platform/glossary.mdx | 2 +- 6 files changed, 36 insertions(+), 34 deletions(-) diff --git a/agent-platform/administration/ai-configuration.mdx b/agent-platform/administration/ai-configuration.mdx index bf27970b6..0d01a6996 100644 --- a/agent-platform/administration/ai-configuration.mdx +++ b/agent-platform/administration/ai-configuration.mdx @@ -20,7 +20,9 @@ The Agent Platform is provider-neutral. Agents can use models from multiple LLM The page is organized into three tabs: **Credentials**, **Model Catalog**, and **Project Access**. -{/*### How model resolution works +{/* + +### How model resolution works Model configuration follows a layered approach. When the runtime executes an agent, it resolves the model through a five-level priority cascade, stopping at the first match: @@ -53,6 +55,7 @@ Every LLM call tracks token usage and estimated cost, broken down by agent, proj | Estimated cost | Calculated from token counts and the model's known pricing. | | Model used | Which model served the request. | | Latency | Time-to-first-token and total request duration. | + */} ### Credentials diff --git a/agent-platform/create-agents.mdx b/agent-platform/create-agents.mdx index a56d60c60..9929a199e 100644 --- a/agent-platform/create-agents.mdx +++ b/agent-platform/create-agents.mdx @@ -50,7 +50,9 @@ Click **Create Agent** and fill in the following details: Click **Create Agent** to open the agent editor. -{/* Commented by Shruti - Patterns listed here are different. +{/* + +SK: Patterns listed here are different. ### Pattern-aware agent creation @@ -64,6 +66,7 @@ If your project uses an orchestration pattern, Studio automatically assigns a ro | **Custom** | No roles are enforced. | A context panel in the creation dialog explains how the new agent fits into the pattern, including which coordination blocks (such as ESCALATE rules) will be pre-configured. + */} ## Use the ABL Editor diff --git a/agent-platform/faq.mdx b/agent-platform/faq.mdx index 9323d10ef..e3e332a05 100644 --- a/agent-platform/faq.mdx +++ b/agent-platform/faq.mdx @@ -15,7 +15,7 @@ import { FAQSearch } from "/snippets/FAQSearch.jsx" To sign up, use your email address or use Google or GitHub login via single sign-on (SSO). A free tier is available so you can [start building agents](/agent-platform/getting-started) immediately. -To reset a forgotton password, click **Forgot password** on the login page and enter the email address associated with your account. Follow the password reset link delivered in your inbox. If you signed up using Google or GitHub SSO, you don't have a platform password. Instead, sign in using your identity provider. +To reset a forgotten password, click **Forgot password** on the login page and enter the email address associated with your account. Follow the password reset link delivered in your inbox. If you signed up using Google or GitHub SSO, you don't have a platform password. Instead, sign in using your identity provider. ### How do I invite team members to my workspace? diff --git a/agent-platform/feedback-template.mdx b/agent-platform/feedback-template.mdx index 78f2912f5..9c7e28e1b 100644 --- a/agent-platform/feedback-template.mdx +++ b/agent-platform/feedback-template.mdx @@ -281,4 +281,4 @@ Create the API key under **Settings > API Keys** with the scopes you need. | `feedback.surveys.submit` | Submitting responses. | | `feedback.surveys.read` | Retrieving responses. | -Retrieval returns comment text to any caller that holds the read scope. Issue the read scope only to systems that are allowed to see open text. \ No newline at end of file +Retrieval returns comment text to any caller that holds the read scope. Issue the read scope only to systems that are allowed to see open text. diff --git a/agent-platform/getting-started.mdx b/agent-platform/getting-started.mdx index edf93f5c0..6368df8a8 100644 --- a/agent-platform/getting-started.mdx +++ b/agent-platform/getting-started.mdx @@ -11,16 +11,12 @@ Agent Platform is available to Kore.ai customers and partners. Sign-up is enable The platform runs in multiple regions. For the US-Central Cloud, use https://agents.kore.ai/. See the region-specific URLs below. -{/* -Agent Platform is available in multiple regions. You can sign up for free to access the platform. For our US-Central Cloud, use https://agents.kore.ai/. For all regions, see the region-specific URLs. -Sign up is currently enabled only for approved domains. To request access for your domain, contact your Kore.ai partner or [contact support](https://support.kore.ai/). - */} - ### Region-specific URLs and allowlist of IPs The platform sends requests to a fixed set of egress IP addresses. If your systems use IP restrictions, add the region-specific egress IPs below to your allowlist to permit platform traffic. - + + | Region | Region-specific URL | Egress IPs | |:---------------------|:------------------------------------------------------------|:----------------------------------------------------------------| | USA-Central | [agents.kore.ai](https://agents.kore.ai) | • 172.173.109.141
• 172.212.188.206
• 20.9.69.249
• 20.12.238.143
• 104.43.208.181
• 52.173.108.174
• 172.202.57.107
• 135.119.76.33
• 130.131.217.68 | @@ -30,12 +26,13 @@ The platform sends requests to a fixed set of egress IP addresses. If your syste | Germany | [de-agents.kore.ai](https://de-agents.kore.ai) | • 3.65.5.141 | | Germany-Prime | [de-prime-agents.kore.ai](https://de-prime-agents.kore.ai) | • 20.79.56.64 | | Japan | [jp-agents.kore.ai](https://jp-agents.kore.ai) | • 20.48.103.185 | -| Japan-Prime | [jp-prime-agents.kore.ai](https://jp-prime-agents.kore.ai) | • 18.180.133.211 | +| Japan-Prime | [jp-prime-agents.kore.ai](https://jp-prime-agents.kore.ai) | • 18.180.133.211 | | Australia | [au-agents.kore.ai](https://au-agents.kore.ai) | • 52.187.236.188 | | Singapore | [sg-agents.kore.ai](https://sg-agents.kore.ai) | • 4.194.44.63 | | United Arab Emirates | [uae-agents.kore.ai](https://uae-agents.kore.ai) | • 20.74.173.252
• 20.74.153.122 | -| Kingdom of Saudi Arabia | [ksa-agents.kore.ai](https://ksa-agents.kore.ai) | 8.228.193.152 | +| Kingdom of Saudi Arabia | [ksa-agents.kore.ai](https://ksa-agents.kore.ai) | • 8.228.193.152 | | India | [ind-agents.kore.ai](https://ind-agents.kore.ai) | • 135.235.170.165 | +
### Set up your account, workspace, and initial configuration @@ -43,10 +40,11 @@ The platform sends requests to a fixed set of egress IP addresses. If your syste 1. Sign in to the platform at https://agents.kore.ai/ and create a workspace as part of the onboarding flow. 2. Invite team members to your workspace: click the **Admin/Gear** icon at the top, click **Invite members**, enter the member's email address, select a role, and click **Send invite**. 3. Configure the LLM provider and Arch AI: + 1. Register provider credentials and configure at least one supported model. See [Configure LLM](/agent-platform/administration/ai-configuration#llm-providers). - 2. Configure the model and credentials Arch uses to generate agent specifications and drive chat-based orchestration. See [Configure Arch](/agent-platform/administration/ai-configuration#arch). + 2. Configure the model and credentials that Arch uses to generate agent specifications and drive chat-based orchestration. See [Configure Arch](/agent-platform/administration/ai-configuration#arch). -Once your account and configuration are set up, you are ready to build your first AI project. +After your account and configuration are set up, you're ready to build your first AI project. --- @@ -63,12 +61,12 @@ flowchart TD P --> D["Build with Arch using CLI"] ``` -| Approach | What it is | Best for | -|:--------------------------------------------------------|:-------------|:---------| -| [Studio](#build-with-arch-in-studio) | Describe or upload your business requirements. Arch interviews you, generates a blueprint and project artifacts, then opens the project in Studio for review. | Teams that want to accelerate development through AI-assisted authoring. | -| [MCP](/agent-platform/mcp-server) | Build and manage projects from your development environment, using supported AI assistants and tools through the Model Context Protocol (MCP). | Developers who prefer working from their IDE or AI-assisted coding tools. | -| [CLI](/agent-platform/cli) | Create, test, and manage agents and projects from the terminal, and automate validation, evaluation, and deployment in CI workflows. | Developers and teams who prefer automating build, test, and deployment pipelines. | +| Approach | What it is | Best for | +|:-------------------------------------|:-------------|:---------| +| [Studio](#build-with-arch-in-studio) | Describe or upload your business requirements. Arch interviews you, generates a blueprint and project artifacts, then opens the project in Studio for review. | Teams that want to accelerate development through AI-assisted authoring. | +| [MCP](/agent-platform/mcp-server) | Build and manage projects from your development environment, using supported AI assistants and tools through the Model Context Protocol (MCP). | Developers who prefer working from their IDE or AI-assisted coding tools. | +| [CLI](/agent-platform/cli) | Create, test, and manage agents and projects from the terminal, and automate validation, evaluation, and deployment in CI workflows. | Developers and teams who prefer automating build, test, and deployment pipelines. | ## Build with Arch in Studio @@ -90,9 +88,7 @@ Arch creates your project in three phases: Interview, Blueprint, and Build. Arch analyzes your input and asks follow-up questions until it has enough information to generate a complete project blueprint. Depending on your requirements, it may ask about your business processes, communication channels, integrations, and other implementation details. - - You can upload an SOP, design document, or requirements specification instead of describing your project from scratch. Arch uses the uploaded content to generate more accurate project requirements. - + You can upload an SOP, design document, or requirements specification instead of describing your project from scratch. Arch uses the uploaded content to generate more accurate project requirements. **Example** @@ -160,11 +156,11 @@ After Arch generates your project, it opens the project in Studio and displays t The panel includes the following sections: -| Section | Description | -|---------------------------|------------------------------------------------------------------------------------| -| **Lifecycle** | Shows the current stage of the project setup and continuous improvement lifecycle. | +| Section | Description | +|:---------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------| +| **Lifecycle** | Shows the current stage of the project setup and continuous improvement lifecycle. | | **Build and validation details** | Displays the status of each stage, including project scaffold creation, compile repair, draft review, runtime evaluation, and promotion readiness. | -| **Recommended next step** | Highlights validation issues and recommends the next actions before continuing. | +| **Recommended next step** | Highlights validation issues and recommends the next actions before continuing. | ### Review the initial evaluation @@ -200,10 +196,10 @@ Depending on your project, you can: Learn how to customize and deploy your project: -* [Agents](/agent-platform/create-agents) – Review and customize the generated agents. -* [Workflows](/agent-platform/workflows) – Modify the generated workflows and orchestration logic. -* [Tools](/agent-platform/tools-overview) – Configure production tools and integrations. -* [Knowledge](/agent-platform/knowledge) – Configure and manage knowledge sources. -* [Evaluations](/agent-platform/evals) – Run additional evaluations to validate project quality. -* [Optimize with Arch AI](/agent-platform/optimize) – Improve your project using recommendations based on evaluation results. -* [Deployment](/agent-platform/deployment) – Deploy your project to the target environment. +* [Agents](/agent-platform/create-agents) - Review and customize the generated agents. +* [Workflows](/agent-platform/workflows) - Modify the generated workflows and orchestration logic. +* [Tools](/agent-platform/tools-overview) - Configure production tools and integrations. +* [Knowledge](/agent-platform/knowledge) - Configure and manage knowledge sources. +* [Evaluations](/agent-platform/evals) - Run additional evaluations to validate project quality. +* [Optimize with Arch AI](/agent-platform/optimize) - Improve your project using recommendations based on evaluation results. +* [Deployment](/agent-platform/deployment) - Deploy your project to the target environment. diff --git a/agent-platform/glossary.mdx b/agent-platform/glossary.mdx index f74e102b7..edbcf5714 100644 --- a/agent-platform/glossary.mdx +++ b/agent-platform/glossary.mdx @@ -217,7 +217,7 @@ The default execution mode for every agent. In reasoning mode, an agent uses LLM ### Role -{/* AG: +{/* AG: - Tenant or Workspace scope in table below? - Add row for Operator role. From 17936a9b0cb1cd3d08d90f3de8c09d1ef85bfc7b Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 16:25:20 +0530 Subject: [PATCH 07/20] Linting, formatting, spell check, etc. --- agent-platform/projects.mdx | 26 ++++++++++++-------------- agent-platform/sessions.mdx | 16 ++++++++++------ agent-platform/supported-models.mdx | 12 ++++++------ 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/agent-platform/projects.mdx b/agent-platform/projects.mdx index 6eea21a0b..7eecf39a5 100644 --- a/agent-platform/projects.mdx +++ b/agent-platform/projects.mdx @@ -84,7 +84,7 @@ Use this method when you want the AI Architect to scaffold agents, tools, and pr 7. In the **Review** phase, confirm that the configuration is correct. 8. Click **Create**. Studio provisions the project and opens its workspace. -The richer the context you provide during the interview and upload phases, the more accurate the generated agents will be. Upload real documentation rather than summaries where possible. +The richer the context you provide during the interview and upload phases, the more accurate the generated agents are. Upload real documentation rather than summaries where possible. ### Method 2: Blank project @@ -369,16 +369,14 @@ A workflow binds each of its tool steps to a tool in the project. When the impor Treat the list as work still to do. A workflow with an unresolved binding fails at the step that calls the missing tool, so fix every listed binding before you deploy or run the workflow. -| What to do | When | -| ---------- | ---- | +| What to do | When | +|:-----------------------------------------------------------------------|:-------------------------------------------------------------------| | Import or create the missing tool, then rebind the workflow step to it | The tool belongs in the project and the archive didn't include it. | -| Rebind the workflow step to an existing tool | The project already holds an equivalent tool under another name. | +| Rebind the workflow step to an existing tool | The project already holds an equivalent tool under another name. | ## Delete a project -Deleting a project removes it and all of its contents permanently. - -**To delete a project:** +Deleting a project removes it and all of its contents permanently. To delete a project, follow these steps: 1. Open the Projects dashboard. 2. Click the three-dot menu on the card of the project you want to delete. @@ -392,11 +390,11 @@ Deleting a project removes it and all of its contents permanently. Some project features depend on workspace configuration or your assigned role. If a feature appears unavailable, check the conditions below. -| Feature | Requirement | -| ---------------------------------- | ------------------------------------------------------------------------------------------------------- | -| **AI Architect** | An LLM provider must be configured under **Admin > Models**. Otherwise an in-panel banner is shown. | -| **Platform Admin** link | Visible only to users with super-admin permissions. | -| **Admin pages** (Members, Models, Security) | Require workspace administrator permissions. | -| **Some Insights pages** | Agent Performance, Quality Monitor, and Customer Insights may show a "coming soon" placeholder if not yet enabled for your workspace. | +| Feature | Requirement | +|:-----------------------------------|:----------------------------------------------------------------------------------------------------| +| **AI Architect** | An LLM provider must be configured under **Admin > Models**. Otherwise an in-panel banner is shown. | +| **Platform Admin** link | Visible only to users with super-admin permissions. | +| **Admin pages** (Members, Models, Security) | Require workspace administrator permissions. | +| **Some Insights pages** | Agent Performance, Quality Monitor, and Customer Insights may show a "coming soon" placeholder if not enabled for your workspace. | -If you expect access to a feature and don't have it, contact your workspace administrator. \ No newline at end of file +If you expect access to a feature and don't have it, contact your workspace administrator. diff --git a/agent-platform/sessions.mdx b/agent-platform/sessions.mdx index e68ae88b1..9a8d5dd57 100644 --- a/agent-platform/sessions.mdx +++ b/agent-platform/sessions.mdx @@ -8,7 +8,9 @@ A session represents a conversation between an agent in an Artemis project and a It stores the conversation context, maintains state across interactions, and remains active until it is closed. -{/* AG: items to be documented when available or in the next round of updates +{/* + +AG: items to be documented when available or in the next round of updates - How to search sessions. How to filter and/or sort to zero-in on a few specific sessions. - To filter using phone number, see feature request ABLP-4425. @@ -21,7 +23,7 @@ A session moves through the following set of states from creation to eventual ar | Status | Meaning | |:------------|:-------------------------------------------------------| -| `active` | Session in progress; agent is currently processing. | +| `active` | Session in progress; agent is processing right now. | | `idle` | Session in progress; waiting for user input. | | `ended` | Session completed by user action, or an idle timeout fired after COMPLETE in the DSL (timeout is configurable per project per channel). | | `completed` | Agent finished by calling COMPLETE. | @@ -295,8 +297,10 @@ Use call recordings to investigate issues with a voice call. - **Tell the caller yourself.** The platform doesn't play a "this call is recorded" announcement or show the caller a recording indicator. If your region requires consent or a notice, add it to your agent's opening prompt. - **Storage location.** Recordings are stored in the storage configured for your workspace. Use your own storage account if the audio must stay in a specific region. -{/* Not available yet -The session panel shows whether storage is Kore-managed or customer-managed. +{/* + +Not available yet. The session panel shows whether storage is Kore-managed or customer-managed. + */} #### Troubleshoot if recording doesn't start @@ -310,7 +314,7 @@ Check these in order - the first "no" is usually the cause. 5. Was the call started after you saved the setting? Recording only applies to new calls. 6. Did you wait about 15 minutes and click **Refresh**? -If you've verified all six checks and the recording is still unavailable, contact the support team and provide the environment details, project name, session ID, and the approximate call date and time. +If you've verified all six checks and the recording is unavailable, contact the support team and provide the environment details, project name, session ID, and the approximate call date and time. #### Turn recording off @@ -440,4 +444,4 @@ Post-agent action is **Return to bot**. The conversation session is **not** clos - Transfer metadata is written onto the session. - The status changes from `escalated` back to `active`. -- The bot resumes handling messages as usual. The session is closed later when the conversation ends through the agent, automatic timeout, or another transfer that terminates the conversation. \ No newline at end of file +- The bot resumes handling messages as usual. The session is closed later when the conversation ends through the agent, automatic timeout, or another transfer that terminates the conversation. diff --git a/agent-platform/supported-models.mdx b/agent-platform/supported-models.mdx index 0a6e401e2..d1c2c6c57 100644 --- a/agent-platform/supported-models.mdx +++ b/agent-platform/supported-models.mdx @@ -157,8 +157,8 @@ The supported models list includes the provider name, model name, and model iden ### Anthropic -| Display Name | Model ID | -|----------------------------------|-----------------------------------------------| +| Display Name | Model ID | +|---------------------------------------|----------------------------------------------| | Claude Haiku 4.5 (Microsoft Foundry) | microsoft_foundry/claude-haiku-4-5-20251001 | | Claude Opus 4.6 (Microsoft Foundry) | microsoft_foundry/claude-opus-4-6 | | Claude Opus 4.7 (Microsoft Foundry) | microsoft_foundry/claude-opus-4-7 | @@ -167,10 +167,10 @@ The supported models list includes the provider name, model name, and model iden ### OpenAI -| Display Name | Model ID | -|---------------------------|--------------------------------| -| GPT-4o (Microsoft Foundry) | microsoft_foundry/gpt-4o | -| GPT-5 (Microsoft Foundry) | microsoft_foundry/gpt-5 | +| Display Name | Model ID | +|----------------------------|--------------------------| +| GPT-4o (Microsoft Foundry) | microsoft_foundry/gpt-4o | +| GPT-5 (Microsoft Foundry) | microsoft_foundry/gpt-5 | ### Meta From 8d9c319716824c58ec3dd6749a84b9e361938e43 Mon Sep 17 00:00:00 2001 From: Prabhat Singh <109069787+prabhat-singh-kore@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:27:28 +0530 Subject: [PATCH 08/20] Related articles --- agent-platform/abl/reference/configuration-reference.mdx | 4 +++- agent-platform/context-and-prompts.mdx | 4 +++- agent-platform/context-compaction.mdx | 4 +++- agent-platform/latency-and-speed.mdx | 4 +++- docs.json | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/agent-platform/abl/reference/configuration-reference.mdx b/agent-platform/abl/reference/configuration-reference.mdx index 345b40e60..725a84899 100644 --- a/agent-platform/abl/reference/configuration-reference.mdx +++ b/agent-platform/abl/reference/configuration-reference.mdx @@ -43,7 +43,9 @@ ABL settings take effect in new conversations once saved, or once published and Fixed by the platform, not configurable: the order of prompt sections, the Customer Output Contract, the tool-history marker and its 6-round window, the realtime voice handoff history-replay limits, and the absolute limits on `## Current Context` (40,000 characters per value, 100,000 for the whole block). -## See also +--- + +{{related}} - [How a turn is built](/agent-platform/context-and-prompts) -- what each of these settings ultimately controls. - [Context size, compaction, and budgets](/agent-platform/context-compaction) -- the compaction defaults in full. diff --git a/agent-platform/context-and-prompts.mdx b/agent-platform/context-and-prompts.mdx index 319020b06..cb8cb07b9 100644 --- a/agent-platform/context-and-prompts.mdx +++ b/agent-platform/context-and-prompts.mdx @@ -60,7 +60,9 @@ If a referenced value is unset, the literal `{{customer_tier}}` text stays in th There is no per-entry setting to hide one declared memory value from the model while leaving the rest of a `MEMORY: SESSION:` block visible. Use the options in [Keeping a value out of the prompt](#keeping-a-value-out-of-the-prompt) above instead. -## See also +--- + +{{related}} - [Context size, compaction, and budgets](/agent-platform/context-compaction) -- default size budgets, where context grows, and how to debug a bloated prompt from a trace. - [Agent declaration](/agent-platform/abl-reference/agent-declaration) -- `GOAL`, `PERSONA`, `LIMITATIONS`, and `SYSTEM_PROMPT:` syntax. diff --git a/agent-platform/context-compaction.mdx b/agent-platform/context-compaction.mdx index f599e3ec1..81c62be05 100644 --- a/agent-platform/context-compaction.mdx +++ b/agent-platform/context-compaction.mdx @@ -140,7 +140,9 @@ Knowledge-base results leave no marker in the trace, so compare their size again - The automatic first knowledge-base search for a single-KB agent can't be turned off. Control its size with `max_search_tokens` instead. - Studio's Runtime Config tab edits project compaction only inside the voice profile. Set the project-wide section by API or project import. -## See also +--- + +{{related}} - [How a turn is built](/agent-platform/context-and-prompts) -- visibility modes and what reaches `## Current Context` in the first place. - [Compaction policy overrides](/agent-platform/abl-reference/agent-declaration#compaction-policy-overrides) -- the full `EXECUTION.compaction` property reference. diff --git a/agent-platform/latency-and-speed.mdx b/agent-platform/latency-and-speed.mdx index 019a03d5e..639c3731d 100644 --- a/agent-platform/latency-and-speed.mdx +++ b/agent-platform/latency-and-speed.mdx @@ -195,7 +195,9 @@ The most reliable agents keep the prompt small and explicit: declare only what t - [ ] A long test conversation (20+ turns) has been checked for prompt size in the trace. - [ ] Final tests ran in a new conversation, on the version that will be deployed. -## See also +--- + +{{related}} - [Context size, compaction, and budgets](/agent-platform/context-compaction) -- the size budgets referenced throughout this page. - [How a turn is built](/agent-platform/context-and-prompts) -- visibility modes and what reaches the model each turn. diff --git a/docs.json b/docs.json index a94ac0b6c..e20f49524 100644 --- a/docs.json +++ b/docs.json @@ -170,9 +170,9 @@ "icon": "laptop-code", "pages": [ - "/agent-platform/abl/reference/configuration-reference", "/agent-platform/abl/reference/language-overview", "/agent-platform/abl/reference/scripting-constructs", + "/agent-platform/abl/reference/configuration-reference", "/agent-platform/abl/reference/agent-declaration", "/agent-platform/abl/reference/multi-agent-and-supervisor", "/agent-platform/abl/reference/behavior-profiles", From baaa3a2f705e1073e8588724e1249125eb3f021d Mon Sep 17 00:00:00 2001 From: Prabhat Singh <109069787+prabhat-singh-kore@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:36:03 +0530 Subject: [PATCH 09/20] prompt library --- agent-platform/prompts.mdx | 2 +- docs.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/agent-platform/prompts.mdx b/agent-platform/prompts.mdx index 66d24eaf2..67f32b755 100644 --- a/agent-platform/prompts.mdx +++ b/agent-platform/prompts.mdx @@ -1,6 +1,6 @@ --- title: Prompt library -sidebarTitle: Prompts +sidebarTitle: Prompts Prompt library --- It's a central place to create, manage, and reuse prompt templates across your agents and workflows — with version tracking, response testing, and reference lookup built in. diff --git a/docs.json b/docs.json index e20f49524..ce784dd39 100644 --- a/docs.json +++ b/docs.json @@ -75,7 +75,6 @@ "/agent-platform/orchestrate", "/agent-platform/workflows", "/agent-platform/knowledge", - "/agent-platform/context-and-prompts", { "group": "Tools", "pages": @@ -89,6 +88,7 @@ "/agent-platform/inbuilt-tools/index" ] }, + "/agent-platform/context-and-prompts", "/agent-platform/memory-and-state", "/agent-platform/context-compaction", "/agent-platform/gather-data", From b1af1e463d6f0f461208d76c688e38e5da7c02b6 Mon Sep 17 00:00:00 2001 From: Prabhat Singh <109069787+prabhat-singh-kore@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:36:55 +0530 Subject: [PATCH 10/20] Minor edits --- agent-platform/prompts.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-platform/prompts.mdx b/agent-platform/prompts.mdx index 67f32b755..3253686c9 100644 --- a/agent-platform/prompts.mdx +++ b/agent-platform/prompts.mdx @@ -1,6 +1,6 @@ --- title: Prompt library -sidebarTitle: Prompts Prompt library +sidebarTitle: Prompts library --- It's a central place to create, manage, and reuse prompt templates across your agents and workflows — with version tracking, response testing, and reference lookup built in. From be603af93af258f8be20f3b33489265076f5aa44 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 16:45:38 +0530 Subject: [PATCH 11/20] Adding a WIP experiment in drafts folder --- drafts/.remarkrc.mjs.txt | 9 +++++++++ drafts/eslint.config.js.txt | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 drafts/.remarkrc.mjs.txt create mode 100644 drafts/eslint.config.js.txt diff --git a/drafts/.remarkrc.mjs.txt b/drafts/.remarkrc.mjs.txt new file mode 100644 index 000000000..9e0bdbf69 --- /dev/null +++ b/drafts/.remarkrc.mjs.txt @@ -0,0 +1,9 @@ +import remarkPresetLintRecommended from 'remark-preset-lint-recommended'; + +export default { + plugins: [ + remarkPresetLintRecommended, // Use standard recommended rules + // You can add more granular rules here, for example: + // ['remark-lint-list-item-indent', 'space'], + ], +}; diff --git a/drafts/eslint.config.js.txt b/drafts/eslint.config.js.txt new file mode 100644 index 000000000..1e80d5cd9 --- /dev/null +++ b/drafts/eslint.config.js.txt @@ -0,0 +1,20 @@ +import mdx from 'eslint-plugin-mdx'; + +"extends": ["plugin:mdx/recommended"] + +export default [ + // Apply MDX configurations to all .mdx files + { + files: ['**/*.mdx'], + ...mdx.flat, + processor: mdx.processors.remark, + settings: { + 'mdx/remark': true, // Enforces ESLint to read and track remark-lint rules + }, + }, + // Optional: lint standard code blocks wrapped inside MDX + { + files: ['**/*.mdx'], + ...mdx.flatCodeBlocks, + } +]; From 39acad2bc211be4fa7e5ef7faed523977bafc0b6 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 16:58:03 +0530 Subject: [PATCH 12/20] Minor edit --- agent-platform/context-compaction.mdx | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/agent-platform/context-compaction.mdx b/agent-platform/context-compaction.mdx index 81c62be05..ec5607602 100644 --- a/agent-platform/context-compaction.mdx +++ b/agent-platform/context-compaction.mdx @@ -19,29 +19,29 @@ They merge in this order: platform defaults, then the voice low-latency profile ### Default values -| Policy | Setting | Default | Voice latency profile | -|--------|---------|---------|------------------------| -| `tool_results` | `strategy` | `summarize` | `structured` | -| | `max_chars` | 102,400 | 16,000 | -| | `structured_threshold` | 10,000 | 4,000 | -| | `keep_recent` | 2 | 1 | -| | `max_description_length` | 200 | 80 | -| | `summary_timeout_ms` | 5,000 (1,000 to 30,000) | 1,500 | -| `prior_turns` | `strategy` | `compact` | `compact` | -| | `assistant_preview_chars` | 200 | 120 | -| `prompt_context` | `value_max_chars` | 8,000 (40,000 max) | 6,000 | -| | `total_max_chars` | 24,000 (100,000 max) | 16,000 | -| | `auto_tool_result_value_max_chars` | 4,000 | 2,000 | -| | `projection_strategy` | `preview` | `preview` | +| Policy | Setting | Default | Voice latency profile | +|------------------|------------------------------------|-------------------------|-----------------------| +| `tool_results` | `strategy` | `summarize` | `structured` | +| | `max_chars` | 102,400 | 16,000 | +| | `structured_threshold` | 10,000 | 4,000 | +| | `keep_recent` | 2 | 1 | +| | `max_description_length` | 200 | 80 | +| | `summary_timeout_ms` | 5,000 (1,000 to 30,000) | 1,500 | +| `prior_turns` | `strategy` | `compact` | `compact` | +| | `assistant_preview_chars` | 200 | 120 | +| `prompt_context` | `value_max_chars` | 8,000 (40,000 max) | 6,000 | +| | `total_max_chars` | 24,000 (100,000 max) | 16,000 | +| | `auto_tool_result_value_max_chars` | 4,000 | 2,000 | +| | `projection_strategy` | `preview` | `preview` | ### Prior-turn strategies -| Strategy | Effect on earlier turns | -|----------|---------------------------| -| `none` | Earlier replies are kept as written. Tool results in history are still placeholders. | -| `placeholder` | Each earlier tool result is replaced by `[Prior turn result — summarized]`. | +| Strategy | Effect on earlier turns | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `none` | Earlier replies are kept as written. Tool results in history are still placeholders. | +| `placeholder` | Each earlier tool result is replaced by `[Prior turn result — summarized]`. | | `compact` (default) | As `placeholder`, and each reply that followed a tool result is shortened to `assistant_preview_chars`. The agent's latest reply is kept whole if it is 2,000 characters or less. | -| `summarize` | Behaves the same as `compact`. No model call is made for this strategy. | +| `summarize` | Behaves the same as `compact`. No model call is made for this strategy. | ### Projection strategies for Current Context @@ -57,7 +57,7 @@ A `## Current Context` value over its limit is replaced by a marker object (`_co - **Per project** -- the project runtime configuration, set by API or project import. Studio's Runtime Config tab exposes these controls only for the voice latency profile overrides; the project-wide section is not editable from Studio. - **Per tool** -- `compaction: essential_fields`, `summary_timeout_ms`, and, for knowledge bases, `max_search_tokens`. See [Result compaction](/agent-platform/abl-reference/tools#result-compaction). -```yaml +```yaml expandable=true EXECUTION: models: summarization: gpt-4.1-mini From aca146cc83d0bdc121d03563fe70e9160288aadd Mon Sep 17 00:00:00 2001 From: melindaVi-Kore Date: Thu, 22 Oct 2026 16:58:59 +0530 Subject: [PATCH 13/20] Update workflows.mdx --- agent-platform/workflows.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent-platform/workflows.mdx b/agent-platform/workflows.mdx index f90dca9f2..c935df276 100644 --- a/agent-platform/workflows.mdx +++ b/agent-platform/workflows.mdx @@ -459,7 +459,7 @@ You can export an individual workflow and import it into another project as an e 3. The workflow is downloaded as a `.workflow.json` file. The workflow export includes the workflow definition and references to dependent components, such as agents, tools, and auth profiles. These dependent components are not exported with the workflow. -Configuration variable references, including references to secret variables, are included as dependencies in the exported workflow. Configuration variable values are not exported. +Configuration variable references, including references to secret variables, are included as dependencies in the exported workflow. Configuration variable values are not exported. Hard-coded secret values in node configurations are not exported and can prevent the workflow from being exported. Workflow trigger definitions are not included in workflow exports. You must configure triggers manually after importing the workflow. @@ -474,7 +474,7 @@ Configuration variable references, including references to secret variables, are The imported workflow is created as an editable draft. Unresolved dependencies must be manually relinked before you run or publish the workflow. -If a referenced configuration variable is missing from the target project, configure the variable before running or publishing the workflow. +If a referenced configuration variable is missing from the target project, the import can still proceed. The missing configuration variable is flagged as an unresolved dependency and must be configured before you run or publish the workflow. --- From c13ac6e8811fa7fef689cd4ec21ec8627b039dd2 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 17:04:44 +0530 Subject: [PATCH 14/20] Screenshot update --- agent-platform/images/prompts-create.png | Bin 224289 -> 118985 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/agent-platform/images/prompts-create.png b/agent-platform/images/prompts-create.png index c2c486d3dfaf6ce4629c032d26e3f2fc37b24b0b..edbfa6621b21667c886259302d57b1358bfde9d3 100644 GIT binary patch literal 118985 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¬i4UQJi?h%~u5b9Qp8NkbFZ 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 literal 224289 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ΠkENoHvhZ2fZv84}Dp+e|NNjz=vtrHp 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 From 64af6562917ecf7b2b8958f081d85f374dc3d770 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 17:10:26 +0530 Subject: [PATCH 15/20] Minor copyedit --- agent-platform/safety-and-guardrails.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-platform/safety-and-guardrails.mdx b/agent-platform/safety-and-guardrails.mdx index fb43f2d8d..6292af7f2 100644 --- a/agent-platform/safety-and-guardrails.mdx +++ b/agent-platform/safety-and-guardrails.mdx @@ -10,7 +10,7 @@ The platform uses three enforcement layers to control agent behavior and protect | Enforcement layer | Description | Example | |-------------------|-------------|---------| | [Guardrails](#input-guardrails) | Safety and quality checks applied to agent input and output content. | Blocking abusive language or redacting sensitive information from responses. | -| [Limitations](/agent-platform/create-agents#define-identity-and-persona) | Reasoning-based guidance enforced through the model. Defines how the agent should behave, what it should avoid, and the scope it should operate within. | Instructing an agent to avoid financial advice or remain within a support domain. | +| [Limitations](/agent-platform/create-agents#define-identity-and-persona) | Reasoning-based guidance enforced through the model. Defines how the agent behaves, what it avoid, and the scope it operates within. | Instructing an agent to avoid financial advice or remain within a support domain. | | [Constraints](/agent-platform/concepts#constraints-and-guardrails) | Runtime business-rule validations that prevent execution when required conditions aren't met. | Requiring a customer ID before allowing an order lookup or payment action. | ## Constraints vs. guardrails From 39b56c7d54a6594d5858b3448a9b76b9ea9e017e Mon Sep 17 00:00:00 2001 From: siddharthmenon-7 Date: Thu, 22 Oct 2026 17:58:10 +0530 Subject: [PATCH 16/20] Updated Whatsapp channel --- agent-platform/channels/whatsapp.mdx | 459 +++++++++++++++++++-------- 1 file changed, 328 insertions(+), 131 deletions(-) diff --git a/agent-platform/channels/whatsapp.mdx b/agent-platform/channels/whatsapp.mdx index 595689bc4..8c96bf4e1 100644 --- a/agent-platform/channels/whatsapp.mdx +++ b/agent-platform/channels/whatsapp.mdx @@ -5,51 +5,109 @@ sidebarTitle: WhatsApp [Back to messaging or digital channels](/agent-platform/channels#messaging-or-digital-channels) -Connect your agent to a WhatsApp Business sender so customers reach it from WhatsApp. Artemis reaches WhatsApp through a Business Solution Provider, and the provider you choose decides which credentials you collect, which webhook route you register, and where the sender lives. +Connect your agent to a WhatsApp Business sender so customers reach it from WhatsApp. Artemis reaches WhatsApp through a Business Solution Provider (BSP): Meta Cloud API, Infobip, or Gupshup. The provider you choose decides which credentials you collect, which webhook route you register, how Artemis verifies inbound traffic, and who owns the sender. The setup requires: -1. [Choose a provider](#choose-a-provider-first), then complete either [Meta setup](#meta-setup) or [Infobip setup](#infobip-setup) to collect the routing identifier and credentials. -2. [Artemis channel configuration](#artemis-channel-configuration) using those values, then copy the generated webhook URL. -3. [Webhook configuration with your provider](#webhook-configuration-with-your-provider): register the callback URL so inbound messages reach Artemis. +1. [Choose a provider](#choose-a-provider) before you collect any value. +2. Complete the provider setup for your choice: [Meta setup](#meta-setup), [Infobip setup](#infobip-setup), or [Gupshup setup](#gupshup-setup). +3. [Artemis channel configuration](#artemis-channel-configuration): create the connection with the provider's values, then copy the generated webhook URL. +4. [Webhook configuration with your provider](#webhook-configuration-with-your-provider): register the callback URL so inbound messages reach Artemis. +5. [Verify the connection](#verify-the-connection) with a real two-way WhatsApp conversation. -After you complete the configuration, your provider posts inbound WhatsApp messages to Artemis, which matches the sender identifier to this connection and hands the message to the deployed agent. +After you complete the configuration, your provider posts inbound WhatsApp messages to Artemis. The runtime matches the business sender in each callback to a saved connection, verifies the callback, and hands the message to the agent deployed in the bound environment. The agent's reply goes back out through the same provider. **Important considerations** -- **The provider selector changes the whole setup**: It decides which credential fields the dialog shows and which webhook route you register. Credentials from one provider never work with another's route, so pick the provider before you collect anything. -- **Who owns the WhatsApp Business account differs by provider**: On Meta Cloud API, you hold it directly and Meta issues a test sender in minutes. That's why most projects start there. On Infobip, Infobip holds it and onboards the sender for you, which removes the Meta paperwork at the cost of a provisioning wait. -- **The Meta test token expires within 24 hours**: To test and not to run. See [Create a permanent access token](#create-a-permanent-access-token). -- **Verification proves less than it appears to**: A webhook that returns 2xx proves only that your provider reached the runtime. It says nothing about whether your outbound credentials work. +- **The provider selector changes the whole setup**: It decides which fields the dialog shows, which webhook route the connection generates, and which in-product setup guide appears. Values from one provider never work on another provider's route, so pick the provider first and keep every value on that single path. +- **Who owns the WhatsApp Business account differs by provider**: On Meta Cloud API, you hold the account directly and Meta issues a test sender in minutes. On Infobip and Gupshup, the provider holds the account and onboards the sender for you, which removes the Meta paperwork at the cost of a provisioning wait. +- **Inbound verification strength differs by provider**: Meta signs every callback with your App Secret. Gupshup can send a signed bearer token if you set a JWT secret. Infobip sends no signature at all, so you protect its route with network controls instead. +- **The Meta test token expires within 24 hours**: It's enough to test and not enough to run. See [Create a permanent access token](#create-a-permanent-access-token). +- **A verified webhook proves less than it appears to**: A 2xx response proves only that your provider reached the runtime. It says nothing about whether your outbound credentials work, so always finish with a real two-way conversation. ## Prerequisites -- An account with your chosen Business Solution Provider: A Meta developer account, or an Infobip account. -- For production on either path, the business details Meta requires for verification. Both routes wait on Meta review, so start early. -- An HTTPS-reachable Artemis runtime, since Meta calls the callback URL during verification. +Collect these before you open the connection dialog, because Meta and the BSPs both gate production on review time you can't shorten. + +- An account with your chosen provider: a Meta developer account, an Infobip account, or a Gupshup Enterprise WhatsApp account. +- For production on any path, the business details Meta requires for verification. Every route waits on Meta review, so start early. +- An HTTPS-reachable Artemis runtime, since providers call the callback URL from the public internet. - Artemis project access with permission to open **Deployments** -> **Channels**, and a deployed agent in the environment you intend to bind. --- -## Choose a provider first +## Choose a provider + +Each card jumps to that provider's setup. Read the comparison below the cards first if you haven't picked one yet. + + + + You own the account. Fastest test sender, strongest inbound verification. + + + Infobip owns the sender. Inbound traffic relies on network allowlisting. + + + Gupshup owns the sender. Optional JWT verification on inbound traffic. + + -Pick the provider before you collect anything, and keep the identifier, credentials, webhook route, and provider-side sender on that single path. +### What each provider needs + +The routing identifier tells the runtime which connection an inbound callback belongs to. The credentials authenticate outbound messages and, where the provider supports it, inbound callbacks. | Provider | Routing identifier | Credentials | |---|---|---| -| **Meta Cloud API** | Phone Number ID | Access Token and Phone Number ID for outbound, App Secret and Verify Token for inbound verification | -| **Infobip** | WhatsApp phone number, digits only | API Base URL with an API key or basic auth, plus a network allowlist for inbound verification | -| **Gupshup** | Business number the provider sends in the callback body | API username and password, plus an optional bearer token secret for inbound verification | +| **Meta Cloud API** | Phone Number ID | Access Token and Phone Number ID for outbound. App Secret and Verify Token for inbound verification. | +| **Infobip** | WhatsApp phone number, digits only | API Base URL plus an API key or a username and password for outbound. Inbound verification relies on a network allowlist. | +| **Gupshup** | WhatsApp business number, digits only | API username and password for outbound. An optional Webhook JWT Secret for inbound verification. | + +### Webhook route and inbound verification -Each provider also has its own webhook route. Meta uses the generic WhatsApp route, while Infobip and Gupshup each add their provider slug to the URL. Copy the route that matches the provider you selected in Artemis rather than assuming one URL serves all three. +Each provider gets its own route on the runtime, and the connection generates the right one for you. The route decides which payload format and which verification model the runtime applies. -Work through the provider section that matches your choice, then rejoin the shared path at [Artemis channel configuration](#artemis-channel-configuration). +| Provider | Webhook route | How the runtime verifies inbound callbacks | +|---|---|---| +| **Meta Cloud API** | `/whatsapp/webhook` | Checks the `X-Hub-Signature-256` HMAC-SHA256 signature over the raw request body, using your App Secret. A GET challenge using your Verify Token verifies the URL itself. | +| **Infobip** | `/whatsapp/infobip/webhook` | No request signature. You restrict ingress with provider IP allowlists, a trusted gateway, or other network controls. | +| **Gupshup** | `/whatsapp/gupshup/webhook` | Validates an `Authorization: Bearer` JWT, HS256 by default, when you set a Webhook JWT Secret. With the field blank, it skips cryptographic verification. | + +Never append a phone number, connection ID, or provider slug to these routes yourself. The runtime reads the sender from the callback body. + +--- + +## How Artemis routes WhatsApp events + +Every inbound message follows the same path, whichever provider carries it. Knowing the path tells you where to look when a message goes missing. + +```mermaid +flowchart LR + A[Customer sends WhatsApp message] --> B[Provider posts callback to Artemis webhook route] + B --> C{Sender identifier matches a saved connection?} + C -- No --> D[Connection not found] + C -- Yes --> E{Inbound verification passes?} + E -- No --> F[Callback rejected] + E -- Yes --> G[Session created or resumed] + G --> H[Deployed agent runs] + H --> I[Reply sent through provider API with outbound credentials] + I --> J[Customer receives reply] +``` + +The runtime finds the connection by reading one field from each provider's callback body. That field must match the routing identifier you saved in Artemis. + +| Provider | Inbound field the runtime reads | Common mix-up | +|---|---|---| +| **Meta Cloud API** | `metadata.phone_number_id` | The display phone number or the WhatsApp Business Account ID | +| **Infobip** | `results[0].to` | A formatted number with spaces or punctuation | +| **Gupshup** | `body.waNumber` | The customer's number, which Gupshup sends as `body.mobile` | + +The path also splits troubleshooting in two. A session in **Sessions** means the inbound half worked and the outbound half failed. No session means nothing passed routing and verification. --- ## Meta setup -Complete this section only if you selected Meta Cloud API. Everything here happens in Meta, before you open Artemis, and each screen depends on the one before it. Meta covers the same ground in its own words in the [Cloud API get started guide](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started). +Complete this section only if you selected Meta Cloud API. Everything here happens in Meta before you open Artemis, and each screen depends on the one before it. Meta covers the same ground in its [Cloud API get started guide](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started). @@ -64,13 +122,13 @@ Complete this section only if you selected Meta Cloud API. Everything here happe 2. When Meta asks what the app does, choose the business messaging use case, or choose **Other** and then **Business** as the app type if Meta shows you that older flow. 3. Enter an app name and a contact email, attach a Meta Business portfolio if you have one, and create the app. - The app type matters, because only a business app exposes the WhatsApp product. Meta opens the App Dashboard once the app exists. + Only a business app exposes the WhatsApp product. Keep development and production on separate apps or separate phone numbers, so test traffic never reaches customer conversations. - 1. On the App Dashboard, scroll the **Add products to your app** list to **WhatsApp** and select **Set up**. If you've navigated away from that screen, the left menu carries an **Add product** entry that returns you to the same list. + 1. On the App Dashboard, scroll the **Add products to your app** list to **WhatsApp** and select **Set up**. If you've navigated away, the **Add product** entry in the left menu returns you to the same list. - Meta provisions several things at once: a test WhatsApp Business Account, a test business phone number, and a set of pre-approved message templates. The test number reaches up to five verified recipients at no cost. The left menu now shows a **WhatsApp** section containing **API Setup** and **Configuration**, which are the two screens you'll use. + Meta provisions a test WhatsApp Business Account, a test business phone number, and a set of pre-approved message templates. The test number reaches up to five verified recipients at no cost. The left menu now shows a **WhatsApp** section containing **API Setup** and **Configuration**, the two screens you'll use. All of this is test infrastructure. It works for development and none of it works for production. @@ -81,7 +139,7 @@ Complete this section only if you selected Meta Cloud API. Everything here happe 1. Select **Generate access token** and complete the prompt, then copy the token. Meta issues a fresh one each time you open this panel, and it expires within 24 hours. 2. Below the **From** field, Meta shows the test business phone number, and directly beneath that, a numeric **Phone Number ID**. Copy the ID. - The Phone Number ID isn't the phone number. It's Meta's internal identifier for the sender, and entering the displayed number instead is the most common reason a connection never receives traffic. The two values sit next to each other on this screen, which is exactly why they get swapped. + The Phone Number ID isn't the phone number, and it isn't the WhatsApp Business Account ID either. It's Meta's numeric resource ID for the sender. Entering either of the other two values is the most common reason a connection never receives traffic, and all three sit close together in Meta's screens. See [Create a permanent access token](#create-a-permanent-access-token) before you move past testing. @@ -93,13 +151,13 @@ Complete this section only if you selected Meta Cloud API. Everything here happe 2. Select **Show** beside **App secret**. 3. Re-enter your Facebook password when Meta asks, then copy the value. - Meta signs every inbound callback with this secret, and Artemis checks that signature. A wrong value here means every inbound message fails verification even though the webhook itself verified successfully, which makes it a confusing failure to diagnose later. + Meta signs every inbound callback with this secret, and Artemis checks that signature. A wrong value fails every inbound message even though the webhook itself verified successfully, which makes it a confusing failure to diagnose later. - Choose any secret string. Meta doesn't issue this one, so you invent it and use the same value in two places: the Artemis connection, and the webhook configuration in Meta. A mismatch fails webhook verification. + Meta doesn't issue this value. You invent a high-entropy secret string and use it in two places: the Artemis connection and the webhook configuration in Meta. - Treat it as a secret rather than a label, and store it where you can retrieve it, because Meta shows it back to you only while you edit the webhook. + The runtime finds the connection by its Verify Token during the handshake, so give each connection its own value. Store it where you can retrieve it, because Meta shows it back to you only while you edit the webhook. @@ -117,30 +175,74 @@ Complete this section only if you selected Meta Cloud API. Everything here happe ## Infobip setup -Complete this section only if you selected Infobip. Infobip owns the WhatsApp Business account and the sender. You collect three things from the Infobip web interface instead of from Meta: the sender number, your account's API base URL, and an API key. +Complete this section only if you selected Infobip. Infobip owns the WhatsApp Business account and the sender. You collect the sender number, your account's API base URL, and one set of outbound credentials from the Infobip web interface. - - 1. Sign in to the [Infobip web interface](https://portal.infobip.com/login/). + + 1. Sign in to the [Infobip web interface](https://portal.infobip.com/login/) with the account and workspace that own the sender you intend to connect. 2. Go to **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders**. - 3. Note the sender number. Artemis wants it as digits only, with no plus sign, spaces, or punctuation. + 3. Complete sender onboarding if the sender isn't live yet, then note the sender number. - A trial account comes with a shared test sender that reaches numbers you verify, which is enough to prove the integration works. A production sender goes through Infobip onboarding, where Infobip registers the number with Meta and runs business verification on your behalf. Infobip's [WhatsApp over API guide](https://www.infobip.com/docs/whatsapp/whatsapp-over-api) covers what the channel supports once the sender is live. Start that process early, because it waits on Meta review rather than on Infobip. + A trial account comes with a shared test sender that reaches numbers you verify, which is enough to prove the integration works. A production sender goes through Infobip onboarding, where Infobip registers the number with Meta and runs business verification for you. Infobip's [WhatsApp over API guide](https://www.infobip.com/docs/whatsapp/whatsapp-over-api) covers what the channel supports once the sender is live. Start early, because onboarding waits on Meta review. - Infobip gives every account a personalized base URL in the form `xxxxx.api.infobip.com`, which you'll see on the homepage once you sign in. Infobip explains the scheme under [base URL](https://www.infobip.com/docs/developer-resources/about-infobip-apis/base-url). + Infobip gives every account a personalized base URL in the form `xxxxx.api.infobip.com`, shown on the homepage once you sign in. Infobip explains the scheme under [base URL](https://www.infobip.com/docs/developer-resources/about-infobip-apis/base-url). This URL isn't a credential. It routes your requests to the data center serving your account, so a wrong one degrades or fails the integration rather than exposing it. Enter it in Artemis with the `https://` scheme. - - 1. Go to **Developer Tools** -> **API Keys** and create a key for this integration. - 2. Copy the key when Infobip displays it and store it in your secret manager. + + Artemis authenticates outbound calls with either an API key or a username and password. Pick one and fill in only that method's fields. - Infobip also shows an existing key on the homepage, but a dedicated key per integration lets you revoke this one without disturbing anything else. + 1. To use an API key, go to **Developer Tools** -> **API Keys**, create a key for this integration, and copy it into your secret manager when Infobip displays it. + 2. To use basic authentication, note the username and password your account uses, and select basic authentication when you create the connection. - If your account authenticates with a username and password instead, note those rather than a key, and select basic authentication as the method when you create the connection. + Prefer a restricted API key where your account supports one. A dedicated key per integration lets you revoke this one without disturbing anything else. + + + + Infobip doesn't sign its callbacks, and the API key authenticates only your outbound calls. It never authenticates Infobip's calls to you. + + 1. Ask your Infobip contact which source addresses their platform sends webhooks from. + 2. Arrange an allowlist, a trusted gateway, or equivalent network controls in front of the Artemis route before you go live. + + + +--- + +## Gupshup setup + +Complete this section only if you selected Gupshup. Gupshup owns the WhatsApp Business account and the sender, and you collect the business number and the account's API credentials. The Artemis Gupshup fields take an Enterprise account's user ID and password and route on the `waNumber` field that Enterprise callbacks carry. + + + + 1. Sign in to the Gupshup account that owns the intended WhatsApp sender. + 2. Confirm with Gupshup that it's an Enterprise WhatsApp account that authenticates with a user ID and password. + + Gupshup's self-serve WhatsApp apps authenticate with an API key and post a different callback payload, so they don't fit these fields. Keep production credentials on a separate account from sandbox or development accounts. Some Enterprise setups split template messaging and two-way messaging across separate account IDs, so confirm which account carries two-way conversations. + + + + 1. Note the WhatsApp business number Gupshup provisioned for the account, as digits only with the country code. + + This is the number Gupshup sends as `body.waNumber` in every inbound callback, and it becomes the routing identifier in Artemis. Don't use the customer's number, which Gupshup sends as `body.mobile` in the same callback. + + + + 1. Note the user ID and password for the account. Gupshup issues them when it creates the account. + 2. Store both in your secret manager. + + These credentials authorize every outbound Gateway API call Artemis makes. Rotate them on your Gupshup account's policy. Gupshup's [API reference](https://docs.gupshup.io/docs/api-reference) shows how the Gateway API uses them. + + + + The Webhook JWT Secret is optional. Set it only when Gupshup or a trusted gateway in front of Artemis sends an `Authorization: Bearer` JWT signed with the same secret. + + 1. Agree on the shared secret with whoever signs the token. + 2. Store it in your secret manager for the Artemis connection. + + Leaving the field blank skips cryptographic verification, so protect the route with network controls instead. Setting it without a matching signer rejects every callback. @@ -148,113 +250,178 @@ Complete this section only if you selected Infobip. Infobip owns the WhatsApp Bu ## Artemis channel configuration -Create the connection before you register the webhook with your provider. Provider callbacks can arrive as soon as you save the webhook, and the runtime has to resolve an inbound sender to a saved connection before it can authenticate the event. +Create the connection before you register the webhook with your provider. Callbacks can arrive as soon as you save the webhook, and the runtime has to resolve an inbound sender to a saved, active connection before it can authenticate the event. 1. Open Artemis and select the project. -2. Go to **Deployments** -> **Channels** -> **WhatsApp** -> **+ New**. The **New WhatsApp Connection** dialog opens. -3. Configure the fields that apply whichever provider you chose: +2. Go to **Deployments** -> **Channels** -> **WhatsApp** -> **+ New**. The **New WhatsApp Connection** dialog opens, with the setup guide on the left and the connection fields on the right. +3. Set **Provider** first. The guide, the field set, and the label of the routing identifier field all change to match. The routing identifier field sits above **Provider**, so recheck it after you switch providers. +4. Configure the fields that apply to every provider: | Artemis connection field | Source / Notes | What it controls | |---|---|---| - | Display Name | You choose it | The label operators see in the connections list. Name it for the sender and the environment it serves, because a project can hold several WhatsApp connections. Routing ignores this value. | - | Provider | Your chosen Business Solution Provider | Decides which credential fields the dialog shows and which webhook route you register later, so set it before you fill in anything below it. | - | Environment | Your published environments | The environment whose active deployment answers incoming messages. Leave the working copy default only while you develop, and bind the connection to an environment later from the **Deployment** tab. | - | Provider Verification Strength | Defaults to **Weak** | How far the runtime trusts the provider's identity assertion when it links a sender to an existing session. Choose **Strong** only when you trust the provider's assertions enough to base continuity and account-linking decisions on them. | - | Initial Status | Defaults to **Active** | Whether the connection starts handling messages. **Active** takes traffic immediately. **Inactive** saves the configuration in a disabled state, which suits a connection you're staging ahead of a launch. | + | **Display Name** | You choose it | The label operators see in the connections list. Name it for the sender and environment it serves, because a project can hold several WhatsApp connections. Routing ignores this value. | + | **Provider** | Your chosen BSP | Which credential fields the dialog shows, which webhook route the connection generates, and which setup guide appears. | + | **Environment** | Your published environments | The environment whose active deployment answers incoming messages. If no environment has an active deployment yet, leave the default to use the working copy, and bind the connection later from the **Deployment** tab. | + | **Provider Verification Strength** | Defaults to **Weak** | How far the runtime trusts the provider's identity assertion when it links a sender to an existing session. Choose **Strong** only when you trust the provider's assertions enough to base continuity and account-linking decisions on them. | + | **Initial Status** | Defaults to **Active** | Whether the connection handles messages. **Active** takes traffic immediately. **Inactive** saves the connection in a disabled state until you activate it, which suits staging ahead of a launch. | -4. Configure the routing identifier and credential fields, which change with the provider: +5. Configure the routing identifier and credential fields for your provider: | Artemis connection field | Source / Notes | What it controls | |---|---|---| - | Phone Number ID | **WhatsApp** -> **API Setup**, below the test phone number | Routes inbound messages to this connection. The runtime matches the sender identifier on each callback to this value, so a wrong entry here produces a connection-not-found result rather than an authentication error. | - | Access Token | **WhatsApp** -> **API Setup**, or a system user token for production | Authenticates every outbound message Artemis sends. | - | Phone Number ID | Same value as the routing identifier | Identifies the sender on outbound messages. | - | App Secret | **App settings** -> **Basic** | Verifies the signature Meta puts on each inbound callback. Without it, Artemis can't confirm that a callback came from Meta. | - | Verify Token | You invent it | Meta echoes it during the webhook handshake, and Artemis compares the two. | + | **Phone Number ID** (routing identifier) | **WhatsApp** -> **API Setup**, below the test phone number | Routes inbound messages to this connection by matching `metadata.phone_number_id`. A wrong entry produces connection-not-found rather than an authentication error. | + | **Access Token** | **WhatsApp** -> **API Setup** for testing. A system user token for production. | Authorizes every outbound Graph API call. Use a least-privilege system user token and never expose it in client code. | + | **Phone Number ID** (credential) | Same value as the routing identifier | Identifies the sender on outbound messages. | + | **App Secret** | **App settings** -> **Basic** | Verifies the HMAC signature Meta puts on each inbound POST. | + | **Verify Token** | You invent it | Meta echoes it during the webhook handshake, and the runtime uses it to find this connection and confirm the match. | - Meta Cloud API asks for the Phone Number ID twice, once as the routing identifier and once as an outbound credential. Enter the same value in both. Other providers use different values in each field, which is why they stay separate. + Meta Cloud API asks for the Phone Number ID twice: once as the external identifier that routes inbound events, and once as the credential for outbound delivery. Paste the same value into both. Other providers use different values in each role, which is why the fields stay separate. | Artemis connection field | Source / Notes | What it controls | |---|---|---| - | WhatsApp Phone Number | **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders** | Routes inbound messages to this connection. Enter the sender number as digits only, because a stray plus sign or space produces a connection-not-found result. | - | Authentication Method | Matches how your Infobip account is set up | Whether Artemis authenticates with an API key or with a username and password. | - | API Base URL | The Infobip homepage, in the form `xxxxx.api.infobip.com` | Your account's personalized host, entered with the `https://` scheme. Requests to the wrong base URL take a suboptimal route or fail outright. | - | API Key | **Developer Tools** -> **API Keys** | The key Artemis sends on every outbound call to Infobip. The dialog shows credential fields for basic authentication instead when you select that method. | + | **WhatsApp Phone Number** | **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders** | Routes inbound messages by matching `results[0].to`. Enter digits only. The runtime tolerates a leading plus and normalizes the inbound value, but any other formatting or a different number produces connection-not-found. | + | **Authentication Method** | Matches how your Infobip account authenticates | Whether Artemis sends an API key or a username and password, and which credential fields appear below. | + | **API Base URL** | The Infobip homepage, in the form `xxxxx.api.infobip.com` | Your account's personalized host, entered with the `https://` scheme. The wrong base URL takes a suboptimal route or fails outright. | + | **API Key**, or username and password | **Developer Tools** -> **API Keys**, or your account's basic credentials | The credential Artemis builds into the authorization header of every outbound call. Fill in only the method you selected. | + + Infobip inbound requests aren't cryptographically verified. Don't select **Strong** for **Provider Verification Strength** unless your deployment adds and validates a trusted identity assertion before traffic reaches the runtime. + + + + | Artemis connection field | Source / Notes | What it controls | + |---|---|---| + | **WhatsApp Business Phone Number** | The business number Gupshup provisioned, digits only | Routes inbound messages by matching `body.waNumber`. Entering the customer's number from `body.mobile` produces connection-not-found. | + | **API Username** | Your Gupshup Enterprise user ID | Authenticates outbound Gateway API calls, together with the password. | + | **API Password** | Your Gupshup Enterprise password | Authenticates outbound Gateway API calls. Keep it server-side only. | + | **Webhook JWT Secret** (optional) | The secret shared with whoever signs inbound tokens | Validates the bearer JWT on inbound callbacks, HS256 by default. Leave it blank to skip cryptographic verification. | - Infobip doesn't sign its callbacks with a shared secret the way Meta does, so Artemis verifies inbound traffic by source network. Confirm with your Infobip contact which addresses their platform sends from, and allowlist those before you go live. + A saved Webhook JWT Secret helps only if the inbound bearer token carries a signature made with the same secret. Send a real callback after you set it, and confirm the runtime accepts it. -5. Select **Create**. -6. Open the connection and copy the **Webhook URL** from the **Overview** tab. The URL carries the route for the provider you selected, so copy it rather than constructing it. If the dialog reports that the runtime URL is unavailable, configure Runtime first, then reopen the connection. +6. Select **Create**. +7. Open the connection and copy the **Webhook URL** from the summary panel on the right, or from the **Configuration** tab. The URL already carries your provider's route, so copy it rather than building it by hand. If the dialog reports that the Runtime URL is unavailable, configure Runtime first, then reopen the connection to get the complete URL. --- ## Webhook configuration with your provider -The webhook is what turns a one-way integration into a conversation. Until your provider has a callback URL, your agent can send but never receives. +The webhook turns a one-way integration into a conversation. Until your provider has the callback URL, your agent can send but never receives. In your Meta app, go to **WhatsApp** -> **Configuration** in the left menu. The **Webhook** row sits at the top of this screen. - 1. Select **Edit**. Meta opens a dialog with two fields. - 2. Paste the Artemis **Webhook URL** into the callback URL field, and the same **Verify Token** you entered in Artemis into the verify token field. - 3. Select **Verify and save**. Meta immediately calls the URL with a challenge and expects your verify token back, so the dialog stays open with an error when the handshake fails. A dialog that closes means the URL verified. - 4. Below the webhook row, find the webhook fields list, select **Manage**, and subscribe to the **messages** field. + 1. Confirm the Artemis connection exists and is **Active**. The runtime answers Meta's handshake only for a saved connection. + 2. Select **Edit**. Meta opens a dialog with two fields. + 3. Paste the Artemis **Webhook URL** into the callback URL field, and the same **Verify Token** you saved in Artemis into the verify token field. + 4. Select **Verify and save**. Meta sends a GET challenge to the URL. The runtime finds the connection by its Verify Token and returns `hub.challenge` only when the token matches. A dialog that closes means the URL verified. A dialog that stays open with an error means the handshake failed. + 5. Below the webhook row, find the webhook fields list, select **Manage**, and subscribe to the **messages** field. + 6. Confirm the right WhatsApp Business Account and phone number attach to this app. + + Verification alone delivers nothing. Meta verifies the URL whether or not you subscribe to anything, so a verified webhook with no subscription looks correct on screen and still sends your agent no traffic. Check the subscription first when the setup looks right and nothing arrives. - Verification alone delivers nothing. Meta verifies the URL whether or not you subscribe to anything, so a verified webhook with no subscription looks correct on screen and still sends your agent no traffic. Check this first when the setup looks right and nothing arrives. + Use the generic route exactly as the connection shows it. The runtime extracts `metadata.phone_number_id` from each signed POST body, so don't append the phone number or a provider slug. In the Infobip web interface, go to **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders**. - 1. Find the tile for your sender and open its three-dot menu. - 2. Select **Edit configuration**. - 3. Turn on forwarding to a URL, which Infobip labels as forwarding to HTTP in some accounts, and paste the Artemis **Webhook URL** into the URL field. - 4. Select **Save**. + 1. Confirm the Artemis connection exists and is **Active**. + 2. Find the tile for your sender and open its three-dot menu. + 3. Select **Edit configuration**. + 4. Turn on forwarding to a URL, which some accounts label as forwarding to HTTP, and paste the Artemis **Webhook URL** into the URL field. + 5. Select JSON delivery, and include every message type the agent must receive. + 6. Select **Save**. + 7. Send a test event from the portal if your account offers one, or send a real message, and require an HTTP 2xx delivery result. - Infobip has no verification handshake, so saving the configuration is the whole registration. Infobip documents what arrives on that URL under [inbound messages](https://www.infobip.com/docs/whatsapp/message-types-and-templates/inbound-messages). Nothing confirms the URL works until a real message arrives, which makes the test in the next section the only proof you have. + Infobip has no verification handshake, so saving the configuration is the whole registration. Infobip documents what arrives on that URL under [inbound messages](https://www.infobip.com/docs/whatsapp/message-types-and-templates/inbound-messages). + + The URL must contain `/whatsapp/infobip/webhook`. The generic Meta route expects a different payload and a different verification model. Keep delivery reports on a separate destination: don't point delivery-report payloads at the message webhook unless your Infobip configuration explicitly uses the same schema. Configuration lives on the sender rather than on the account, so a second sender needs its own forwarding configuration and its own Artemis connection. + + + Gupshup sets the inbound callback per account. Depending on your account, you set it in the account's webhook or callback settings, or your Gupshup account manager sets it for you. + + 1. Confirm the Artemis connection exists and is **Active**. + 2. Open the WhatsApp account's webhook or callback settings and paste the Artemis **Webhook URL** as the inbound message callback. If your account doesn't expose these settings, send the URL to your Gupshup account manager and ask them to set it as the inbound callback. + 3. Enable the inbound events the agent needs: text, media, location, contacts, and interactive replies. Save the callback configuration. + 4. If you set a Webhook JWT Secret, send a real callback that carries `Authorization: Bearer` with a matching HS256 token. The runtime rejects a missing, malformed, expired, or incorrectly signed token. + + The URL must contain `/whatsapp/gupshup/webhook`. The runtime routes from `body.waNumber`, so don't append the phone number to the path. + + Gupshup typically allows one inbound callback URL per Enterprise account. Use a separate Gupshup account for each environment you want to keep apart, since one account can't point at two connections. + ### Validation checklist +Work down this list once per connection. Each row depends on the one above it. + | Validation item | Expected result | |:---|:---| | Choose a provider | The provider selected in Artemis matches the account where the sender lives. | -| Complete provider setup | Meta: app created, WhatsApp product added, test recipient verified. Infobip: sender available, base URL and API key collected. | +| Complete provider setup | Meta: app created, WhatsApp product added, test recipient verified. Infobip: sender live, base URL and one credential method collected, network controls planned. Gupshup: Enterprise account confirmed, business number and API credentials collected. | | Collect credentials | Routing identifier and credentials copied from the same provider account. | | Create the Artemis connection | Connection saved as **Active** with the provider's fields and the intended environment. | -| Register the callback URL | Meta: the webhook dialog closes after **Verify and save**. Infobip: forwarding is on for that sender. | -| Subscribe the events | Meta only: the webhook subscribes to the **messages** field. | +| Register the callback URL | Meta: the webhook dialog closes after **Verify and save**. Infobip: JSON forwarding is on for that sender and a test returns 2xx. Gupshup: the inbound callback points at the Gupshup route. | +| Subscribe the events | Meta: the webhook subscribes to **messages**. Infobip: every needed message type forwards. Gupshup: inbound message events are on. | | Send a live message | A real WhatsApp conversation produces exactly one agent reply. See [Verify the connection](#verify-the-connection). | ## Verify the connection Artemis doesn't synthesize provider callbacks, so a real WhatsApp message is the only way to confirm the integration works end to end. -1. From a WhatsApp account you registered as a test recipient, send the business sender a short message you can search for later. A distinctive string makes the message easy to find in session records. -2. Check that the agent replies once, from the intended sender and the intended environment. Duplicate replies point to duplicate provider subscriptions, another automation on the same number, or repeated webhook delivery rather than an agent fault. -3. If no reply arrives, open **Sessions** and search for the message you sent. A session that exists tells you the webhook works and the outbound path failed, while no session tells you nothing reached the runtime at all. The two need different fixes, so make this check before you change any configuration. -4. If the agent sends buttons or lists, select a button and a list row and confirm the action returns to the same session. WhatsApp limits how many reply buttons a message carries and how long their labels run, so check that your authored content renders in WhatsApp rather than only in preview. -5. Test only the message types your provider enables, then confirm the agent handles the downloaded attachment rather than only acknowledging it. +1. Use an approved test recipient. On a Meta app in development mode or a provider sandbox, register the number first. For production, confirm business verification, sender quality, payment, and template approvals are complete. +2. From a normal WhatsApp account, send the business sender a short, distinctive message you can search for later. +3. Check that the agent replies once, from the intended sender and the intended environment. Duplicate replies point to duplicate provider subscriptions, another automation on the same number, or repeated webhook delivery rather than an agent fault. +4. If no reply arrives, open **Sessions** and search for the message you sent. A session tells you the webhook works and the outbound path failed. No session tells you nothing reached the runtime. The two need different fixes, so make this check before you change any configuration. +5. If the agent sends buttons or lists, select a button and a list row and confirm the action returns to the same session. WhatsApp limits how many reply buttons a message carries and how long their labels run, so check that your content renders in WhatsApp rather than only in preview. +6. Exercise every message type your provider enables, and confirm the agent handles the downloaded attachment rather than only acknowledging it. + +The runtime normalizes these WhatsApp inputs across all three providers. Test only the ones your provider enables for your sender. + +| Message type | What to confirm | +|---|---| +| `text` | The agent receives and answers it. | +| `image`, `video`, `audio`, `document` | The runtime downloads the file and the agent processes its content. | +| `location`, `contacts` | The agent reads the shared data rather than ignoring it. | +| `interactive replies` | A button or list selection returns to the same session with the right action. | A webhook that returns 2xx proves only that your provider reached the runtime. It says nothing about whether your outbound credentials work. Always confirm a real two-way conversation before you call the channel done. --- +## Security and provider boundaries + +Each provider protects a different part of the exchange. These rules keep the inbound and outbound halves trustworthy. + +| Provider | Inbound protection | Outbound protection | +|---|---|---| +| **Meta Cloud API** | Every POST must carry `X-Hub-Signature-256`. The runtime computes HMAC-SHA256 over the unchanged raw body with your App Secret. | The Access Token authorizes outbound Graph API calls. Use a least-privilege system user token and never expose it in client code. | +| **Infobip** | Network-based only. There's no request-signature check, so restrict ingress with provider IP allowlists, a trusted gateway, and network controls. | The API key or basic credentials authorize outbound calls and live only in encrypted Artemis fields. Never treat the API key as webhook authentication. | +| **Gupshup** | When configured, the Webhook JWT Secret validates the bearer JWT with an allowed HMAC algorithm. Without it, rely on network controls. | The API username and password authorize outbound Gateway API calls and must stay server-side. | + +These rules apply to every provider: + +- **Preserve the raw body**: Where a provider signs the body, any proxy or middleware in front of Artemis must pass the exact raw bytes through. Re-serializing JSON breaks the signature and fails every callback. +- **Rotate in the right order**: Rotate credentials without changing the inbound sender identifier. Update Artemis first, then revoke the old credential, then verify both inbound and outbound traffic. +- **Separate environments completely**: Use separate apps or senders, credentials, webhooks, and connections for development and production. +- **Match verification strength to evidence**: Keep **Provider Verification Strength** at **Weak** unless the provider's identity assertion carries cryptographic proof, or your deployment adds and validates one. + +--- + ## Create a permanent access token -This section applies to Meta Cloud API only. Infobip API keys don't expire on a schedule, so rotate them on your own policy instead. +This section applies to Meta Cloud API only. Infobip API keys and Gupshup passwords don't expire on a schedule, so rotate them on your own policy instead. -The token on the API Setup page expires within 24 hours, which is enough to test and not enough to run. Replace it with a system user token, which lasts until you revoke it. Meta explains how the token types differ under [access tokens](https://developers.facebook.com/docs/whatsapp/access-tokens). +The token on the API Setup page expires within 24 hours. Replace it with a system user token, which lasts until you revoke it. Meta explains how the token types differ under [access tokens](https://developers.facebook.com/docs/whatsapp/access-tokens). This work happens in Meta Business Suite rather than the App Dashboard, and it needs a Meta Business admin. @@ -276,9 +443,9 @@ This work happens in Meta Business Suite rather than the App Dashboard, and it n 1. Select **Generate token**, choose your app, and set the expiration to never. - 2. Select the `whatsapp_business_messaging` permission so the token can send and receive messages, and `whatsapp_business_management` so it can manage templates and account settings. + 2. Select the `whatsapp_business_messaging` permission so the token can send and receive messages, and `whatsapp_business_management` so it can manage templates and account settings. Grant nothing beyond what the integration uses. 3. Generate the token and copy it straight into your secret manager, because Meta displays it once and never again. - 4. Update the **Access Token** on the Artemis connection from the **Credentials** tab. + 4. Update the **Access Token** on the Artemis connection from the **Credentials** tab, then revoke the temporary token. @@ -286,72 +453,78 @@ This work happens in Meta Business Suite rather than the App Dashboard, and it n ## Move to production -A test sender covers development and nothing else. Who does the production paperwork depends on your provider. +A test sender covers development and nothing else. Who does the production paperwork depends on your provider, and every path waits on Meta review. -On Meta Cloud API, you complete business verification, add a payment method, register a business phone number in WhatsApp Manager, and get your display name approved. You do all of this from [Meta Business Suite](https://business.facebook.com/). On Infobip, Infobip runs the sender registration and verification for you, and you supply the business details it asks for. Either way the work waits on Meta review, so start it well ahead of your launch date. +| Provider | Who does the production work | +|---|---| +| **Meta Cloud API** | You complete business verification, add a payment method, register a business phone number in WhatsApp Manager, and get your display name approved, all from [Meta Business Suite](https://business.facebook.com/). | +| **Infobip** | Infobip runs sender registration and Meta verification. You supply the business details it asks for. | +| **Gupshup** | Gupshup creates the Enterprise account and onboards the WhatsApp business number with Meta. You supply the business details it asks for. | Two WhatsApp rules shape what your agent can say, whichever provider carries the traffic: **The customer service window.** After a customer messages you, you can reply freely for 24 hours. Outside that window, an outbound message needs an approved template, so an agent that reaches out first needs templates approved before it can start a conversation at all. Template approval is its own review, and a rejected template blocks the conversation you wrote it for. -**Separate senders per environment.** Use different senders, credentials, webhooks, and connections for development and production. Sharing a sender means test traffic reaches the same conversation history as customer traffic. +**Separate senders per environment.** Use different senders, credentials, webhooks, and connections for development and production. Sharing a sender means test traffic lands in the same conversation history as customer traffic. --- ## Manage the channel connection -Opening a WhatsApp connection from **Deployments** -> **Channels** shows four tabs. The header carries the connection name, its environment, its status, and a delete control. +Open a WhatsApp connection from **Deployments** -> **Channels** -> **WhatsApp** to manage it. The page has a header, three tabs, and a summary panel on the right. - - - **Connection Summary** records what the connection is and when it changed. +**Header.** Shows the connection name, its environment badge, its status, and when it last changed. The **...** overflow menu holds the connection-level actions. - | Field | Description | - |---|---| - | **Status** | Whether the connection currently handles messages. | - | **Created** and **Updated** | Date and time of creation, and of the last change. | - | **Environment** | The environment whose deployment answers messages. | - | **Source Type** | Reads `Channel Connection`. | - | **Source ID** | Identifies the connection uniquely. Quote it when you raise a support ticket. | - - **Setup Instructions** below the summary carries the values you need on the provider side, each with a copy control. +**Summary panel.** Stays visible on every tab and carries the values you need on the provider side. - | Value | Description | - |---|---| - | **Webhook URL** | The callback URL to register with your provider. It already carries the provider route, so copy it rather than building it by hand. | - | Routing identifier | The value this connection matches inbound messages to, shown as the Phone Number ID or the WhatsApp phone number depending on your provider. Check it here first when messages arrive and no session appears. | - +| Field | Description | +|---|---| +| **Channel** | Reads **WhatsApp**. | +| **Connection Type** | Reads **Channel Connection**. | +| **Identifier** | The routing identifier this connection matches inbound messages to: the Phone Number ID or the WhatsApp number, depending on your provider. Check it first when messages arrive and no session appears. | +| **Credentials** | Reads **Configured** once credentials save. | +| **Webhook URL** | The callback URL to register with your provider, with a copy control. It already carries the provider route. | +| **Created** and **Updated** | Date and time of creation and of the last change. | + The platform encrypts credentials after you save them, so every field reads as saved rather than showing its value. Leave a field empty to keep the current value, or enter a new value to replace it. - The fields below the first one change with your provider. Meta Cloud API shows the access token, Phone Number ID, App Secret, and Verify Token. Infobip shows the authentication method, API base URL, and either an API key or basic authentication credentials. - | Field | Description | |---|---| | **Use Auth Profile** | Switches the connection to a saved auth profile in place of the fields below. Prefer it when the same credentials serve more than one connection, since a rotation then touches one profile. | - | Outbound credential | Authenticates outbound messages. Replace it here when you rotate a Meta token or an Infobip API key. | - | Inbound verification | Confirms that a callback came from your provider. Changing the Verify Token here breaks the Meta webhook until you change it in Meta as well. | + | Outbound credentials | Meta: **Access Token** and **Phone Number ID**. Infobip: authentication method, **API Base URL**, and an API key or basic credentials. Gupshup: **API Username** and **API Password**. Replace them here when you rotate. | + | Inbound verification | Meta: **App Secret** and **Verify Token**. Gupshup: **Webhook JWT Secret**. Changing the Meta Verify Token breaks the webhook until you change it in Meta as well. | - Select **Save Credentials** to apply your changes. + Select **Save Credentials** to apply your changes. Update credentials here before you revoke the old ones at the provider. - Under **General**, update the **Display Name** and the **Provider Verification Strength**. - - Under **WhatsApp Settings**, the routing identifier appears read-only. You can't change it after creation, so a connection pointed at the wrong sender needs replacing rather than editing. + This tab carries the connection's editable settings and a second copy of the webhook URL. - **Authorization message** + | Setting | Description | + |---|---| + | **Display Name** | The label operators see in the connections list. | + | **Provider Verification Strength** | Under **WhatsApp Settings**. How far the runtime trusts the provider's identity assertion. | + | Routing identifier | Under **WhatsApp Settings**, read-only with a copy control. You can't change it after creation, so a connection pointed at the wrong sender needs replacing rather than editing. | + | **Authorization message** | The **Message template** the connection sends when a tool needs the user to authorize before the conversation continues. | + | **Webhook URL** | The callback URL, with a copy control. | - The connection sends this message when a tool needs the user to authorize before the conversation continues. Edit the template to match your agent's voice, since the default reads as system text rather than as the agent talking. + The default authorization message reads as system text. Edit the template to match your agent's voice, insert variables from the chips below the editor, and select **Show more** to see every variable. Select **Show preview** to check the rendered message. - The editor lists the variables you can insert, offers a preview, and expands to show every available variable. The variables cover the number of outstanding authorizations, the profile each one belongs to, and the link the user follows. + | Variable | What it inserts | + |---|---| + | `{{remaining}}` | The number of authorizations still outstanding. | + | `{{#authorizations}}` ... `{{/authorizations}}` | A block that repeats once per outstanding authorization. | + | `{{index}}`, `{{profileName}}`, `{{authLink}}` | Inside the block: the item's position, the auth profile it belongs to, and the link the user follows. | Select **Save Changes** to apply your changes. - **Agent Version** carries an **Environment** dropdown that selects which deployed version handles incoming messages. + This tab decides which deployed agent version answers the channel. + + **Environment Binding** carries an **Environment** dropdown that selects which deployed version handles incoming messages. **Active Deployment** shows the bound version and when someone deployed it. Check this pair when the channel connects but the agent behaves like an older build: the connection follows whatever the environment currently has deployed, not the version you last edited. @@ -363,26 +536,36 @@ Opening a WhatsApp connection from **Deployments** -> **Channels** shows four ta ## Key values reference -Each value sits on a different provider screen, and two of them look alike enough to swap by accident. Use the table for your provider to collect everything in one pass. +Each value sits on a different provider screen, and several look alike enough to swap by accident. Use the table for your provider to collect everything in one pass. | Value | Where to find it | Where it goes | | ----- | ---------------- | ------------- | - | **Phone Number ID** | **WhatsApp** -> **API Setup**, directly below the test business phone number | The routing identifier and the outbound credential field in Artemis | + | **Phone Number ID** | **WhatsApp** -> **API Setup**, directly below the test business phone number | The routing identifier and the Phone Number ID credential in Artemis | | **Access Token** | **WhatsApp** -> **API Setup** for testing. For production, **Business settings** -> **Users** -> **System users** in Meta Business Suite | The **Access Token** field in Artemis | | **App Secret** | **App settings** -> **Basic**, revealed by selecting **Show** | The **App Secret** field in Artemis | | **Verify Token** | You choose it | The **Verify Token** field in Artemis, and the webhook configuration in Meta | - | **Webhook URL** | The **Overview** tab of the Artemis connection | The callback URL in **WhatsApp** -> **Configuration** in the Meta app | + | **Webhook URL** | The summary panel or **Configuration** tab of the Artemis connection | The callback URL in **WhatsApp** -> **Configuration** in the Meta app | | Value | Where to find it | Where it goes | | ----- | ---------------- | ------------- | - | Sender number | **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders** | The **WhatsApp Phone Number** field in Artemis, as digits only | + | Sender number | **Channels and Numbers** -> **Channels** -> **WhatsApp** -> **Senders** | The **WhatsApp Phone Number** field in Artemis, as digits | | **API Base URL** | The homepage of the Infobip web interface, in the form `xxxxx.api.infobip.com` | The **API Base URL** field in Artemis, with the `https://` scheme | - | **API Key** | **Developer Tools** -> **API Keys** | The **API Key** field in Artemis | - | **Webhook URL** | The **Overview** tab of the Artemis connection | The forwarding URL in the sender's **Edit configuration** screen | + | **API Key** or basic credentials | **Developer Tools** -> **API Keys**, or your account's username and password | The matching credential fields in Artemis | + | Source addresses | Your Infobip contact | Your allowlist or gateway in front of the Artemis route | + | **Webhook URL** | The summary panel or **Configuration** tab of the Artemis connection | The forwarding URL in the sender's **Edit configuration** screen | + + + + | Value | Where to find it | Where it goes | + | ----- | ---------------- | ------------- | + | WhatsApp business number | Your Gupshup Enterprise account, the number Gupshup sends as `body.waNumber` | The **WhatsApp Business Phone Number** field in Artemis, as digits | + | User ID and password | Issued with your Gupshup Enterprise account | The **API Username** and **API Password** fields in Artemis | + | JWT secret | Agreed with whoever signs inbound tokens | The **Webhook JWT Secret** field in Artemis, if you use it | + | **Webhook URL** | The summary panel or **Configuration** tab of the Artemis connection | The inbound callback in Gupshup, set by you or your account manager | @@ -390,17 +573,24 @@ Each value sits on a different provider screen, and two of them look alike enoug ## Troubleshoot connection issues +Start with the **Sessions** check from [Verify the connection](#verify-the-connection), then match the symptom here. + | Symptom | Likely cause | Recommended action | |---|---|---| -| The agent never replies, and a session exists | The recipient isn't verified on a test sender | On Meta, development mode accepts inbound messages from anyone but delivers only to verified recipients, so add your number under **WhatsApp** -> **API Setup**. On an Infobip trial sender, verify the recipient number in Infobip. | -| The agent never replies, and no session exists | Nothing reached the runtime | On Meta, confirm the webhook subscribes to the `messages` field, that the callback URL verified, and that the App Secret matches. On Infobip, confirm forwarding is on for that sender and that the URL matches the connection. | -| The runtime reports no connection found | The routing identifier doesn't match the inbound callback | Compare the sender identifier on the inbound callback with the value saved in Artemis, and confirm the provider selector matches the provider that sent it. On Infobip, check for a plus sign or spaces in the saved number. | -| Inbound messages arrive but no reply goes out | The outbound credential is wrong or expired | Check the outbound credential, the sender identifier, the account-specific base URL where your provider uses one, the connection status, and whether a runnable deployment exists. A temporary Meta token that expired overnight produces exactly this symptom. | -| Inbound callbacks reach the runtime but fail verification | The inbound verification setting doesn't match the provider | On Meta, the App Secret doesn't match the app that sent the callback. On Infobip, your allowlist is missing the address their platform sent from. | -| Customers receive duplicate replies | More than one subscription or automation answers the same number | Remove duplicate provider subscriptions, disable any other automation on the number, and account for provider retry behavior. | -| Text works but buttons or lists fail | The content exceeds a provider limit, or the authored action is gone | Check the provider's limits, the reply payload IDs, whether your provider supports the interactive type, and how the agent handles the returned action. | -| Text works but media fails | The message type isn't enabled, or the file breaks a policy | Confirm the provider enabled that message type, the credentials can download media, size and host policies allow it, and the agent handles attachments. | -| Outbound sends fail outside the customer service window | The 24-hour window has closed | Send an approved WhatsApp template instead. | +| Meta webhook verification fails and the dialog stays open | The connection doesn't exist yet, the Verify Token doesn't match, or Meta can't reach the URL | Create the connection first, match the Verify Token exactly, use the generic callback URL, and confirm the GET request can reach public HTTPS. | +| Meta callbacks return 401 | App Secret mismatch, or the body changed before verification | Copy the App Secret from the same app that owns the sender, and make sure proxies and middleware pass the raw bytes unchanged. | +| Gupshup callbacks return 401 | The JWT setting doesn't match what Gupshup sends | Use the Gupshup-specific URL. Either leave **Webhook JWT Secret** blank, or make sure each callback carries a bearer JWT signed with the same secret and an allowed HMAC algorithm. | +| Infobip test delivery fails | Wrong route, payload format, sender, or source network | Use the Infobip-specific URL with JSON delivery, enter the sender as digits, allow Infobip's source addresses, and confirm the callback returns 2xx quickly. | +| The runtime reports no connection found | The routing identifier doesn't match the inbound callback | Compare the inbound sender field with the saved identifier: `metadata.phone_number_id` for Meta, `results[0].to` for Infobip, `body.waNumber` for Gupshup. Confirm the selected provider matches the one that sent it. | +| The agent never replies, and a session exists | The recipient isn't approved on a test sender | On Meta, add your number under **WhatsApp** -> **API Setup**, since development mode accepts inbound messages from anyone but delivers only to verified recipients. On a trial or sandbox sender, verify the recipient with the provider. | +| The agent never replies, and no session exists | Nothing reached the runtime, or verification rejected it | On Meta, confirm the **messages** subscription, the verified callback URL, and the App Secret. On Infobip, confirm forwarding is on for that sender. On Gupshup, confirm the inbound callback points at the Gupshup route. | +| Inbound messages arrive but no reply goes out | The outbound path fails | Check the outbound credential, the sender identifier, the account-specific base URL where your provider uses one, the connection status, and whether a runnable deployment exists. An expired temporary Meta token produces exactly this symptom. | +| Traffic stops right after a credential rotation | Someone revoked the old credential before Artemis had the new one | Enter the new credential in the **Credentials** tab, then verify inbound and outbound traffic. Next time, update Artemis before you revoke. | +| Infobip callbacks fail with unexpected payloads | Delivery reports reach the message webhook | Point delivery reports at a separate destination unless your Infobip configuration uses the same schema for both. | +| Customers receive duplicate replies | More than one subscription or automation answers the same number | Remove duplicate provider subscriptions, disable any other automation on the number, and account for provider retry and redelivery behavior. | +| Text works but buttons or lists fail | The content exceeds a provider limit, or the authored action is gone | Check the provider's limits, the reply payload IDs, whether your BSP supports the interactive type, and how the agent handles the returned action. | +| Text works but media fails | The message type isn't enabled, or the file breaks a policy | Confirm the BSP enabled that message type, the credentials can download media, size and host policies allow it, and the agent handles attachments. | +| Outbound sends fail outside the customer service window | The 24-hour window has closed | Send an approved WhatsApp template through the selected provider when its policy requires one. | --- @@ -426,6 +616,13 @@ Use these pages when you need detail beyond what this article covers. | [Base URL](https://www.infobip.com/docs/developer-resources/about-infobip-apis/base-url) | Why Infobip personalizes the base URL and what a wrong one does. | | [Developer resources](https://www.infobip.com/docs/developer-resources) | Authentication methods, API keys, and the wider API reference. | + + + | Resource | Use it for | + | -------- | ---------- | + | [Gupshup documentation](https://docs.gupshup.io/docs/overview) | The entry point to Gupshup's WhatsApp, Enterprise, and API documentation. | + | [API reference](https://docs.gupshup.io/docs/api-reference) | How the Enterprise Gateway API authenticates with a user ID and password. | + {{related}} From 66f6b80c64b2b4b75da0a1ae3f5d74d94ed0ce08 Mon Sep 17 00:00:00 2001 From: vishnubkore Date: Thu, 22 Oct 2026 18:08:16 +0530 Subject: [PATCH 17/20] Update voice.mdx --- agent-platform/channels/voice.mdx | 417 ++++++++++++++++++------------ 1 file changed, 247 insertions(+), 170 deletions(-) diff --git a/agent-platform/channels/voice.mdx b/agent-platform/channels/voice.mdx index b8dd59f29..ae150a0d8 100644 --- a/agent-platform/channels/voice.mdx +++ b/agent-platform/channels/voice.mdx @@ -5,323 +5,400 @@ title: Voice channels [Back to voice channels](/agent-platform/channels#voice-channels) ## Set up Realtime LLM Voice channel - -Supports live voice conversations using Realtime LLM models (OpenAI Realtime, Gemini Live) through the Kore.ai Voice Gateway or a Bring Your Own SIP connection. - -To configure a Realtime LLM Voice channel, go to **Deployments** > **Channels** > **VOICE** > **Realtime LLM Voice** > **+ New** and complete the following steps in order. - + +Realtime LLM Voice is a voice channel that handles live voice conversations through a single provider-native speech session. It supports Realtime LLM models (such as OpenAI Realtime and Gemini Live) through the Kore.ai Voice Gateway (KoreVG) or a Bring Your Own SIP connection. + +Unlike the STT → LLM → TTS pipeline that Pipeline Voice uses, a provider-native realtime model owns the live audio conversation. KoreVG handles telephony, connection routing, bounded session state, traces, and the call lifecycle. + +Studio also provides in-product guidance. On the **Realtime LLM Voice** channel page, click **Setup instructions** to open a step-by-step panel that covers connection creation, provider and phone routing, call quality validation, and security, latency, and reliability boundaries. + +### Create a Realtime LLM Voice channel + +To create a Realtime LLM Voice channel, go to **Deployments** > **Channels** > **Voice** > **Realtime LLM Voice** > **New connection** and complete the following steps in order. + - + On the **New Realtime LLM Voice Connection** page, provide the following fields. - - | Field | Description | - | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | **Display Name** | A label for the connection. | - | **Connection Name** | A system name for the connection, such as `realtime-voice-prod`. Up to 255 characters. | - | **Environment** | The deployment the connection binds to. Select an environment to follow its active deployment automatically, or leave the default to use the working copy. When no environment has an active deployment yet, create a deployment first to bind the connection to a published environment. | - | **Provider Verification Strength** | Controls how strictly the platform trusts the provider's identity assertions for session continuity and linking. **Weak** is the default. Choose **Strong** only for channels or providers whose identity assertions you trust. | - | **Initial Status** | **Active** connections are usable immediately. **Inactive** connections stay saved but disabled until you activate them. | - + | Field | Description | + | --- | --- | + | **Display Name** | A label for the connection. | + | **Connection Name** | A stable system name for the connection, up to 255 characters. Use an environment-specific identifier such as `realtime-voice-production`. It's an external identifier, not a phone number or a shared gateway account. | + | **Environment** | The deployment the connection binds to. Select an environment whose active deployment contains the realtime-compatible agent, tools, model policy, and welcome behavior. Select an environment to follow its active deployment automatically, or leave the default to use the working copy. When no environment has an active deployment yet, create a deployment first to bind the connection to a published environment. | + | **Provider Verification Strength** | Controls how strictly the platform trusts the provider's identity assertions for session continuity and linking. **Weak** is the default. Choose **Strong** only for channels or providers whose identity assertions you trust. | + | **Initial Status** | **Active** connections are usable immediately. **Inactive** connections stay saved but disabled until you activate them. Use **Inactive** while the provider and phone routing are incomplete. An **Active** phone-routed connection without a provisioned number can't receive production PSTN calls. | + + Click **Create**. + Create the connection before you configure voice details. The connection record must exist before Studio can provision a phone number and save provider-specific realtime settings. - - - After creating the channel, go to the **Configuration** tab. If you choose **Voice Provider: Kore.ai Voice Gateway**, set the following fields under **Kore.ai Voice Gateway**. - - | Route | Description | - | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | - | **Soft Phone** (FREE) | Dial the agent from your browser with no DID purchase or telephony charges. Use it for evals, QA, and demos. **Launch dialer** opens the browser dialer. | - | **Phone Number (DID)** | Purchase a real phone number through Twilio. Disable this route to stop DID listing and call routing while keeping the number saved. | - - If you select **Phone Number (DID)**, complete the next step. If you selected **Voice Provider: Bring Your Own SIP** instead, skip to Configure SIP Settings. + +### Configure the Realtime LLM Voice channel + +Once the channel is created, open it from the **Realtime LLM Voice** connections list. The connection has three tabs: **Settings**, **Speech**, and **Testing**. The **Settings** tab holds the voice provider and call routing. The **Speech** tab holds realtime orchestration, the S2S provider, and advanced voice behavior. The **Testing** tab holds the shareable softphone link. + + + + On the **Settings** tab, under **Realtime LLM Voice Settings**, set **Voice Provider** to **Kore.ai Voice Gateway** or **Bring Your Own SIP**. If you choose **Kore.ai Voice Gateway**, set the following under **Call routing**. Choose how calls reach this agent. Enable **Soft Phone** for browser testing, and add a phone number (DID) when the channel needs a real phone number. + | Route | Description | + | --- | --- | + | **Soft Phone** (FREE) | Dial the agent from your browser with no DID purchase or telephony charges. Use it for evals, QA, and demos. **Launch dialer** opens the browser dialer. | + | **Phone Number (DID)** | Purchase a real phone number through Twilio. Disable this route to stop DID listing and call routing while keeping the number saved. | + + Keep KoreVG as the managed telephony gateway unless your platform owner has approved another provider. Confirm that the realtime provider you plan to use is available for your tenant and environment. + + If you select **Phone Number (DID)**, complete the next step. If you selected **Voice Provider: Bring Your Own SIP** instead, skip to step 3. - - + Set the **Provider** to **Twilio**, toggle **Inbound calls** (route calls from this number into the voice agent) and **Outbound calls** (allow this number to be used for campaign dialout), and select a **Country**, **Number Type**, and optional **Area Code**. Select **Search Available Numbers** to list numbers that match your filters. + Buy or assign a Twilio-backed number from the saved connection's settings, and confirm the number is bound to this connection before you activate it. After you assign a number, it appears in the **Phone Number** field. Select **Remove** to remove the number from the connection. - - - Once the channel is created, select it, then go to the **Configuration** tab. If you chose **Voice Provider: Bring Your Own SIP**, set the following fields under **SIP Configuration**. - - | Field | Description | - | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | **Our SIP Server Address** | Configure your SIP provider to send `INVITE` to this address, for example `korevg-np.kore.ai:5060`. Select **Copy** to copy the address. | - | **SIP Gateway IPs / CIDRs** | Provider SIP source addresses. Separate multiple IPv4 addresses or CIDR ranges with commas, for example `203.0.113.50:5080, 3.80.16.0/23`. | - | **SIP Termination URI** | Choose whether your SIP provider identifies by **IP Address** or **Domain Name**, then enter the SIP termination URI. | - | **DID / Phone Number** | The phone number (DID) your SIP provider routes to this SIP gateway. | - | **Enable E.164 (leading +)** | Prepend a leading `+` to outbound numbers sent to the carrier. On by default, which international (full-E.164) numbers require. Turn off only for local/national-format numbers — otherwise the leading `+` misroutes them. | + + If you chose **Bring Your Own SIP**, the **Call routing** options are replaced by a **SIP Configuration** section on the **Settings** tab. Set the following fields. + | Field | Description | + | --- | --- | + | **Our SIP Server Address** | A read-only address. Configure your SIP provider to send `INVITE` to this address, for example `korevg-np.kore.ai:5060`. Select **Copy** to copy the address. | + | **SIP Gateway IPs / CIDRs** | Provider SIP source addresses. Separate multiple IPv4 addresses or CIDR ranges with commas, for example `203.0.113.50:5080, 3.80.16.0/23`. | + | **SIP Termination URI** | The termination address your SIP provider expects outbound calls to reach, as either an **IP Address** or **Domain Name**. Select the type, then type the SIP termination IP address or domain name in the **SIP termination URI** field below it. | + | **DID / Phone Number** | The phone number (DID) your SIP provider routes to this SIP gateway. | + | **Enable E.164 (leading +)** | Prepend a leading `+` to outbound numbers sent to the carrier. On by default, which international (full-E.164) numbers require. Turn off only for local or national-format numbers, otherwise the leading `+` misroutes them. | - - - Under **Realtime LLM Voice settings**, set the following fields. - + + At the bottom of the **Settings** tab, for either voice provider, set the following. + | Field | Description | + | --- | --- | + | **Trust inbound SIP headers** | Off by default. Turn it on only if your SBC sets or overwrites these headers. If the headers can arrive from the caller, the value isn't trustworthy. When on, transfer headers configured to pass through from the inbound call (for example, `User-to-User`) are sent on the transfer. When off, they are dropped. | + | **Connection Name** | The system name of the connection. Select the copy icon to copy it. | + + Click **Save Changes** to apply the settings. + + + On the **Speech** tab, set the following fields. * **Realtime orchestration**: Select how runtime coordinates the conversation flow and business tool execution for realtime voice interactions. Realtime orchestration determines whether the realtime model or runtime controls conversation progression and business actions, such as bookings, orders, and payments. - + | Mode | Description | Recommended for | - | - | - | - | + | --- | --- | --- | | **Legacy - model-selected tools** | Preserves the existing behavior where the realtime model manages both the conversation and business tool selection. | Existing agents and backward compatibility. | | **Runtime Guarded - hybrid freeform (recommended)** | Allows the realtime model to conduct the conversation naturally while runtime validates tool execution and context updates against the current FLOW step. Business tools execute only when they belong to the active FLOW step, preventing out-of-order actions while maintaining the authored FLOW. | New realtime voice agents that require natural conversations while maintaining FLOW integrity. | | **Runtime Owned - canonical turn** | Runtime controls every conversation turn and executes the FLOW exactly as authored. The realtime model handles conversational responses but cannot invoke business tools directly. | Workflows involving payments, bookings, orders, or other irreversible business actions and highly deterministic flows. | - + - - Changes to the orchestration mode apply only to new realtime sessions. Calls already in progress continue using the mode that was active when the session started. - - Existing channel configurations without a configured orchestration mode continue to use Legacy behavior. + * Changes to the orchestration mode apply only to new realtime sessions. Calls already in progress continue using the mode that was active when the session started. + * Existing channel configurations without a configured orchestration mode continue to use Legacy behavior. - + * **Response wording owner**: Select who generates the wording of responses for realtime voice conversations. This setting is available only when the Realtime orchestration mode is set to **Runtime Owned — canonical turn**. * **Runtime text (recommended)**: Runtime generates the response text. This option provides consistent response generation. * **Provider-grounded voice**: Uses the realtime voice provider to generate spoken responses while runtime continues to control conversation flow and business actions. This option is available only for Gemini Live. For unsupported or unsafe conversation turns, it automatically falls back to runtime-generated text responses. - - * **Semantic convergence**: Semantic Convergence determines how the platform coordinates with the realtime voice provider during a voice interaction. Controls whether realtime voice turns use the coordinated utterance runtime. This setting is available only when the realtime orchestration config is set to **Legacy mode**. - + + * **Semantic convergence**: Semantic Convergence determines how the platform coordinates with the realtime voice provider during a voice interaction. Controls whether realtime voice turns use the coordinated utterance runtime. This setting is available only when the realtime orchestration config is set to **Legacy mode**. The **Effective at runtime** line below the setting shows the mode currently in effect. + | Mode | Description | Recommended use | - | - | - | - | + | --- | --- | --- | | **Off** | Uses the legacy realtime voice execution model. The realtime provider executes tool calls directly without semantic coordination. | Use for backward compatibility with existing voice applications. | | **Shadow** | Uses the legacy execution model while collecting diagnostics to compare legacy behavior with semantic convergence. Doesn't affect customer interactions. | Use for validation, testing, and migration before enabling **Enforce**. | | **Enforce** | Uses semantic convergence to route voice turns through the platform's coordinator, ensuring tool execution and business logic are processed consistently with the agent runtime. | Recommended for new realtime voice deployments and production environments requiring consistent behavior across voice and text. | - - * **S2S Provider**: The realtime speech-to-speech model the channel uses. Select one of the following: **Amazon Nova Sonic (S2S)**, **Azure OpenAI Realtime**, **Grok Realtime (S2S)**, **Google Gemini Live**, or **OpenAI Realtime**. Each option shows which credentials it uses: - + + * **S2S Provider**: The realtime speech-to-speech model the channel uses. Select an approved realtime provider and model, and match its audio format, locale, voice, and tool-calling capabilities to the agent. Select one of the following: **Amazon Nova Sonic (S2S)**, **Azure OpenAI Realtime**, **Grok Realtime (S2S)**, **Google Gemini Live**, or **OpenAI Realtime**. Each option shows which credentials it uses: + | Provider | Credentials used | - | - | - | + | --- | --- | | **Amazon Nova Sonic (S2S)** | Voice Service credentials (Amazon Nova Sonic (S2S) Credentials). | | **Azure OpenAI Realtime**, **Grok Realtime (S2S)**, **Google Gemini Live**, **OpenAI Realtime** | The project-selected model connection. See **Realtime model connection** below. | - - * **Realtime model connection**: Shown for every S2S provider except Amazon Nova Sonic, which authenticates via Voice Service credentials instead. Selects the project-pinned realtime model this provider uses - shows `Use project realtime model` until a workspace admin adds one: - + + * **Realtime model connection**: Shown for every S2S provider except Amazon Nova Sonic, which authenticates via Voice Service credentials instead. Selects the project-pinned realtime model this provider uses. It shows `Use project realtime model` until a workspace admin adds one. The **Source** line below the dropdown shows where the model comes from, and the deployment uses this exact model connection. To add one: + 1. Configure the model under [Voice Services](/agent-platform/administration/ai-configuration#voice-services), then add it to the [model catalog](/agent-platform/administration/ai-configuration#model-catalog) as an LLM provider. - 2. In the project, go to **Settings** -> **Model** and add the model you configured at the workspace level. - + 2. In the project, go to **Settings** > **Models** and add the model you configured at the workspace level. See [Models](/agent-platform/administration/general-settings#models). + * **Provider-specific settings**: After you select an S2S provider, a configuration section for that provider appears. Expand the provider below to see its settings. - + Under **Amazon Nova Sonic Configuration**, set the following fields. - + | Field | Description | - | - | - | + | --- | --- | | **Voice** | The voice Nova Sonic uses to speak to callers. Default: **Tiffany**. | | **Model** | The Amazon Bedrock model ARN, for example `arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-2-sonic-v1:0`. | | **Maximum tokens** | The maximum number of tokens in a model response. Default: `1024`. | | **Temperature** | Controls response randomness. Lower values give more predictable responses; higher values give more varied responses. Default: `0.70`. | | **Top P** | Limits the model to the smallest set of likely tokens whose combined probability reaches this value. Default: `0.90`. | | **Endpointing sensitivity** | How quickly Nova decides the caller has finished speaking. **Medium** (default) suits general conversation. **High** responds sooner but may interrupt callers. **Low** allows more pause before responding. | - + **Pending tool fillers** - + Turn on **Pending tool fillers** to let Nova speak a brief hold phrase when a project tool is still running. Fast tools finish without a filler. - + | Field | Description | - | - | - | + | --- | --- | | **Filler delay (milliseconds)** | Nova speaks only if the tool is still pending after this delay. Leave empty to use the default of `900` ms. | | **Tool filler instruction** | The instruction Nova follows to generate the hold phrase. Use `{{toolName}}` to insert the name of the running tool. Default: `The tool {{toolName}} is still in progress. Briefly tell the caller that you are working on it.` | - + **Coordinator turn filler** - + Turn on **Coordinator turn filler** to let Nova speak a short hold phrase during convergence-enabled coordinator turns while Runtime decides and executes the turn. - + | Field | Description | - | - | - | + | --- | --- | | **Coordinator filler instruction** | The instruction Nova follows to generate the hold phrase. Default: `Briefly tell the caller that you are still working on their request.` Runtime sends this as native cross-modal input and keeps its transcript out of the canonical conversation history. | - + **Advanced voice behaviour (Nova-specific)** - + | Field | Description | - | - | - | + | --- | --- | | **Failed tool call fallback** > **Tell the caller and end the call** | When a Nova tool call fails, Nova says a short apology and ends the call. Off by default. | - + Also configure the **Advanced voice behaviour** settings that apply to all providers, described after the provider list. - + Under **Azure OpenAI Realtime Configuration**, set the following fields. - + | Field | Description | - | - | - | + | --- | --- | | **Voice** | The voice used to speak to callers. Default: **Marin (recommended)**. | | **Temperature** | Controls response randomness. Range: **Focused** (`0.6`) to **Creative** (`1.2`). Default: `0.8`. | - + **Turn detection** - + | Field | Description | - | - | - | + | --- | --- | | **Speech detection sensitivity** | Adjusts how readily the model detects speech. Default: `0.5`. | | **Silence Duration (ms)** | How long the caller must be silent before the turn is treated as complete. Default: `700`. | | **Prefix Padding (ms)** | Audio kept before detected speech so the start of the caller's utterance is preserved. Default: `300`. | - + Also configure the **Advanced voice behaviour** settings that apply to all providers, described after the provider list. - + Under **Grok Realtime Configuration**, set the following fields. - + | Field | Description | - | - | - | + | --- | --- | | **Voice** | The voice used to speak to callers. Default: **Ara**. | | **Temperature** | Controls response randomness. Range: **Focused** (`0.0`) to **Creative** (`2.0`). Default: `0.8`. | | **Threshold** | Controls speech detection. Range: **Sensitive** (`0.0`) to **Conservative** (`1.0`). Default: `0.5`. | | **Silence Duration (ms)** | How long the caller must be silent before the turn is treated as complete. Default: `500`. | | **Prefix Padding (ms)** | Audio kept before detected speech so the start of the caller's utterance is preserved. Default: `300`. | - + Also configure the **Advanced voice behaviour** settings that apply to all providers, described after the provider list. - + Under **Gemini Live Configuration**, set the following fields. - + | Field | Description | - | - | - | + | --- | --- | | **Voice** | The voice used to speak to callers, for example **Puck — Upbeat**. | | **Enable context window compression** | Lets Gemini compress older session context so long-running Live conversations can continue beyond the model's context window. Off by default. | | **Temperature** | Controls response randomness. Range: **Deterministic** (`0.0`) to **Creative** (`2.0`). Default: `0.8`. | - + **Tool response scheduling** - + | Field | Description | - | - | - | + | --- | --- | | **Tool response scheduling** | Controls how Gemini resumes after a final tool result. **Interrupt** responds immediately to the final result. **When idle — finish the current response first** (default) waits for the current response to finish. **Silent** retains the final result without speaking right away. Progress and filler updates always wait until Gemini is idle. | | **Pending tool fillers** | Lets Gemini Live acknowledge long-running project tools while the original tool call remains pending. Off by default. | - + **Realtime turn filler** - + Separate from project Voice Fillers. Applies only to Google or Vertex realtime S2S calls while semantic convergence is set to **Enforce**. - + | Field | Description | - | - | - | + | --- | --- | | **Native turn filler** | Lets Gemini speak a short hold phrase while Runtime settles an enforced turn. It never applies to transfers, handoffs, or protected playback. | | **Generative native filler** | Lets Gemini choose a short, contextual hold phrase in the current language instead of using the deterministic phrase pool. | | **Generative filler prompt override** | Overrides the prompt Gemini uses to generate the hold phrase. Default: `Reply with a short, natural hold phrase in the current language.` | - + **Filler delivery safeguards** - + Shared by pending-tool and realtime turn fillers. - + | Field | Description | - | - | - | + | --- | --- | | **Settlement watchdog** | Time allowed for filler generation or a held final response to settle before Runtime releases the safe fallback. Accepted range: `1000`–`60000` ms. Leave empty to use the platform default of `10000` ms. | - + **Voice activity detection** - + Controls when Gemini starts listening to a caller turn and how long it waits before closing that turn. - + | Field | Description | - | - | - | + | --- | --- | | **Start Sensitivity** | Higher detects speech sooner but may trigger on noise. Lower waits for a stronger speech signal. Default: **Default**. | | **End Sensitivity** | Higher ends turns sooner for lower latency. Lower allows longer pauses before Gemini responds. Default: **Default**. | | **Silence Duration (ms)** | Milliseconds of non-speech before Gemini closes the caller turn. Increase to allow pauses; decrease for faster responses. Default: `100`. | | **Prefix Padding (ms)** | Milliseconds of detected speech required before Gemini commits a speech start. Lower values catch shorter utterances but can increase false starts. Default: `20`. | - + **Caller transcription** - + | Field | Description | - | - | - | + | --- | --- | | **Caller language** (Optional) | The language callers speak, such as `en-US`. If left empty, Gemini guesses the language on every turn, which can turn English into another script. The call's language setting, when there is one, takes precedence. | - + **Silent-turn recovery** - + | Field | Description | - | - | - | + | --- | --- | | **Recover silent turns** | Re-prompts, then restarts, a Gemini session that stays silent when it owes the caller an answer. | | **Recover unanswered caller turns only** | Limits recovery to caller turns that received no answer. Included automatically when **Recover silent turns** is on. If Gemini hears the caller but does not respond within 8 seconds, the Gemini session restarts with the caller's words, without re-prompting tool results. | - + **Advanced voice behaviour (Gemini-specific)** - + | Field | Description | - | - | - | + | --- | --- | | **Silent resume recovery** > **Recover a silent resumed session** | Starts a fresh Gemini session when a resumed one connects but never speaks. Off by default. | - + Also configure the **Advanced voice behaviour** settings that apply to all providers, described after the provider list. - + Under **OpenAI Realtime Configuration**, set the following fields. - + | Field | Description | - | - | - | + | --- | --- | | **Voice** | The voice used to speak to callers. Default: **Marin (recommended)**. | - + **Turn detection** - + Tune how OpenAI detects when speech starts and when the caller has finished speaking. - + | Field | Description | - | - | - | + | --- | --- | | **Turn detection mode** | How OpenAI detects turns, for example **Server VAD — audio activity**. | | **Speech detection sensitivity** | Range: **More sensitive** (`0.0`) to **More conservative** (`1.0`). Lower values pick up quieter speech; higher values reduce background-noise triggers. Default: `0.5`. | | **Silence Duration (ms)** | Quiet time before OpenAI treats the caller turn as complete. Default: `700`. | | **Prefix Padding (ms)** | Audio kept before detected speech so the beginning of the caller's utterance is preserved. Default: `300`. | - + **Caller transcription** - + How the caller's speech is written down. This text is stored as the caller's turn and is what the agent checks answers against. - + | Field | Description | - | - | - | + | --- | --- | | **Caller transcriber** | The transcription model, for example **Whisper (default)**. | | **Caller language** (Optional) | The language callers speak, such as `en-US`. If left empty, the transcriber guesses the language on every turn, which can turn English into another script. | | **Words to expect** | Brand names and terms callers use, for example `Acme, Rewards, email addresses spelled out letter by letter`. Used by Whisper and GPT-4o Transcribe. | - + Never put a caller's own details in **Words to expect**. The transcriber would then hear them from anyone. - + **Realtime turn filler** - - Configure turn fillers to play short hold phrases while the agent processes a caller's request. - + + Applies only to OpenAI Realtime calls while semantic convergence is set to **Enforce**. Off by default. + | Field | Description | | --- | --- | - | **Native turn filler** | Enables the model to generate short hold phrases in the caller's language while Runtime processes the caller's turn. Hold phrases stop when the answer is ready, do not play during a transfer or handoff, and are not added to the conversation. | - | **Filler prompt override** (Optional) | Replaces the default instruction used to generate hold phrases. Runtime appends fixed safety rules to prevent the model from making claims about results, actions, promises, questions, or tool calls. | - - The model generates fillers based on the caller's language and context. The agent's final answer is spoken after the filler finishes, preventing the filler and answer from overlapping. + | **Native turn filler** | While Runtime works on a caller turn, OpenAI says a short hold phrase in the caller's language. Hold phrases stop when the answer is ready, never play during a transfer or handoff, and aren't added to the conversation. | + | **Filler prompt override** (Optional) | Replaces the default instruction OpenAI words each hold phrase from. Default: `Reply with a short, natural hold phrase in the current language.` Runtime appends fixed safety rules that prevent claims about results, actions, promises, questions, or tool calls. | + + **Advanced voice behaviour (OpenAI-specific)** + + | Field | Description | + | --- | --- | + | **Caller interruption** > **Let callers interrupt the agent** | When off, the caller speaking doesn't cut off what the agent is saying. | + | **Caller interruption** > **Protect non-interruptible outputs** | Uses model playback for protected outputs and protects the welcome unless interruption is allowed. Off by default. With server VAD, turning this on lets the model play protected outputs and protects the welcome unless `ON_START` allows interruption. An `ON_START` greeting authored with barge-in disallowed is protected automatically with server or semantic VAD, regardless of this switch. Input that repeats a protected output word for word is treated as echo. Menu answers, numbers, spelled names, and other caller input still run. | + | **Silent caller reprompt** > **Reprompt a silent caller** | Uses the project's voice no-input settings (timeout, reprompt messages, retries, and final action) on this realtime channel. Turn it off to keep the channel silent. | + | **Caller transcript cross-check** > **Check the model's wording against the transcript** | Waits briefly for the caller's transcript and gives it to the agent beside what the model reported. | + | **Longest wait for the transcript (ms)** (Optional) | Sets how long the turn waits for the caller's transcript, up to 5000 ms. Leave empty to size the wait to the caller transcription model of the selected realtime model: 1500 ms for `whisper-1` and 400 ms for `gpt-4o` transcription. The turn runs without the transcript once the wait ends. | + + Also configure the **Advanced voice behaviour** settings that apply to all providers, described after the provider list. - + * **Advanced voice behaviour (all providers)**: Optional behaviours for this channel. Each one is off, empty, or set to the earlier platform behaviour until you change it. - + | Field | Description | - | - | - | + | --- | --- | | **Caller wording** > **Wording a caller turn runs on** | Select the wording the agent runs a caller turn on: **Model's wording** (default), **Auto: prefer the caller's transcript**, or **Caller transcript**. | | **Default transfer announcement** > **Line spoken before a transfer** (Optional) | The line the agent speaks before a transfer, for example `One moment while I connect you.` | - - * **Noise isolation**: Applies server-side noise reduction to inbound call audio to filter out background voices and ambient noise. - - * **Voice transfer and survey capabilities**: A read-only panel that shows which transfer and survey capabilities Runtime supports for the selected provider. + | **Runtime-owned speech** > **Speak Runtime answers exactly** | Runtime makes the voice model say its answers word for word, once per caller turn, and records what was said. | + | **Noise isolation** | Applies server-side noise reduction to inbound call audio to filter out background voices and ambient noise. | + | **Trust inbound SIP headers** | The same setting as on the **Settings** tab. Off by default. Turn it on only if your SBC sets or overwrites these headers. | + + * **Voice transfer and survey capabilities**: A read-only panel that shows how many of the transfer and survey capabilities Runtime evaluates as available for the concrete voice execution boundary (the execution surface is **KoreVG realtime S2S**), for example **11 of 11 capabilities available**. It lists the following capabilities, each marked **Available** or not. + + | Capability | Description | + | --- | --- | + | **Human transfer** | Transfer the caller to a human agent. | + | **Pre-transfer announcement** | Speak an announcement before a transfer. | + | **Transfer outcome recovery** | Recover when a transfer doesn't complete. | + | **SIP transfer** | Transfer the call over SIP. | + | **PSTN transfer** | Transfer the call to a phone number on the public telephone network. | + | **Bridged agent transcript** | Carry the transcript to the agent the call is bridged to. | + | **Transfer CSAT** | Collect a satisfaction rating after a transfer (`csat`, `nps`, `likeDislike`). | + | **Template survey** | Run a template survey with a rating type of `star`, `thumbs`, or `scale`. | + | **Survey comments** | Collect free-text comments in a survey. | + | **Survey follow-ups** | Ask follow-up questions in a survey. | + | **Return-leg survey** | Run a survey on the return leg of a transferred call. | + + Click **Save Changes** on the **Speech** tab to apply the settings. + + + Resolve any missing provider credentials and model configuration before you test. After you save, confirm that Studio shows the phone number on the saved connection. Each tab has its own **Save Changes** button, so save on each tab you edit. + Don't repoint shared KoreVG or softphone hosts. Phone registration, device call, Jambonz API, and SBC hosts are shared environment settings. Only a connection-specific callback may target a local tunnel during isolated testing. -### Manage an existing realtime LLM voice channel +### Test the Realtime LLM Voice Channel -Open a channel from **Deployments** > **Channels** > **Voice** > **Realtime LLM Voice**. It contains three tabs: **Overview**, **Configuration**, and **Deployment**. +Open the **Testing** tab to verify the channel before going live. - - - **Connection Summary** displays the following fields. - - | Field | Description | - | ----------------- | -------------------------------------- | - | **Status** | For example: `Active` | - | **Created** | Timestamp the channel was created | - | **Updated** | Timestamp of the last change | - | **Environment** | For example: `dev` | - | **Source Type** | Realtime LLM Voice Channel | - | **Source ID** | Unique identifier (UUID) of channel | - - - - The channel includes the same **General** (Display Name), **Provider Verification Strength**, call routing, **Realtime LLM Voice Settings**, and provider-specific settings (which vary by the selected S2S provider) described in [Set up Realtime LLM Voice](#set-up-realtime-llm-voice-channel). You can edit these settings any time and with immediate effect. - +- **Shareable softphone link:** Generate a time‑limited link that lets anyone call the channel from a phone browser through the real gateway and view a read‑only transcript. + - Links expire after 7 days and can be revoked at any time. + - **Active links** shows links currently in use, or **No active links for this channel**. + - Viewing active links requires read access; generating or revoking links requires edit permission. - - The **Deployment** tab displays these fields. +- **Soft Phone dialer:** From the **Settings** tab, select **Soft Phone > Launch dialer** to call the agent directly from your browser. + - No DID purchase or telephony charges are required. - | Field | Description | - | ----------------------- | ----------------------------------------------------------------------------------------------------------------------- | - | **Agent Version** | An **Environment** dropdown (for example: `Development`) that selects which deployed version handles incoming messages. | - | **Active Deployment** | Displays the bound deployment version and when it was deployed. | + +### Verify and secure the Realtime LLM Voice channel + +Before you go live, validate the quality of realtime calls. Realtime quality depends on the slowest leg of the call, so test each of the following. + + + + Generate a time‑limited preview, allow microphone access, start and stop a call, mute/unmute, and confirm chat remains usable if microphone or provider setup fails. + + + Dial the provisioned number and validate greeting, bidirectional audio, tool execution, transfer/termination, caller hang‑up, and one stable Runtime session. + + + Record gateway connect time, provider session setup, input audio commit, first model audio, end‑to‑end turn p50/p95, jitter, and packet loss. + + + Interrupt a long agent response, speak immediately, and verify stale audio is cancelled, tool calls aren’t duplicated, and the next user turn is preserved. + + + Deny microphone access, force provider disconnect, gateway reconnect, model timeout, tool failure, phone hang‑up, and capacity rejection. Confirm caller hears or receives the designed fallback. + + - Click **Save Changes** after switching the environment/version. - - +## Security, Latency, and Reliability Practices + +- **Protect credentials:** Treat realtime provider and carrier credentials as administrator‑managed secrets. Do not copy API keys into connection identifiers, browsers, screenshots, or agent prompts. +- **Minimize overhead:** Avoid unnecessary transcoding, buffering, proxy hops, and oversized tool responses. Set explicit connection and turn timeouts, and verify heartbeat behavior through every proxy. +- **Validate capacity:** Check provider concurrency, KoreVG session limits, phone capacity, and backpressure before load tests. Capacity rejection must fail predictably, not degrade active calls. +- **Define fallback behavior:** Specify caller‑visible handling for provider unavailability, timeout, safety rejection, tool failure, and transfer failure. Include rules for retry, reprompt, mode switch, or call termination. +- **Trace sessions:** Capture call/session IDs, provider events, tool calls, turn latency, interruptions, errors, and termination reasons. Scrub audio, transcripts, and credential data from logs. + +### Manage an existing Realtime LLM Voice channel + +Open a channel from **Deployments** > **Channels** > **Voice** > **Realtime LLM Voice** and select a connection. The connection header shows the display name, its status (for example, *Active*), and when it was last updated. The connection has three tabs. + +| Tab | Description | +| --- | --- | +| **Settings** | The **Display Name**, **Realtime LLM Voice Settings** (**Provider Verification Strength**, **Voice Provider**, and **Call routing** or **SIP Configuration**), **Trust inbound SIP headers**, and **Connection Name**. Described in [Configure the Realtime LLM Voice channel](#configure-the-realtime-llm-voice-channel). | +| **Speech** | **Realtime orchestration**, **Semantic convergence**, the **S2S provider** and its settings, and **Advanced voice behaviour**. Described in step 5 of [Configure the Realtime LLM Voice channel](#configure-the-realtime-llm-voice-channel). | +| **Testing** | The shareable softphone link and active links. Described in [Test the Realtime LLM Voice channel](#test-the-realtime-llm-voice-channel). | + +Changing settings on the **Settings** or **Speech** tab updates the live channel after you click **Save Changes**. + +### Troubleshoot Realtime LLM Voice + +* **Calls to the number fail:** an **Active** phone-routed connection without a provisioned number can't receive production PSTN calls. Assign or buy a number, and confirm it's bound to this connection. +* **The channel can't start a session:** resolve missing provider credentials and model configuration, then save the connection and test again. +* **Duplicate tool calls or stale audio after an interruption:** repeat the barge-in test from [Verify and secure the Realtime LLM Voice channel](#verify-and-secure-the-realtime-llm-voice-channel) and check the traces for the affected call and session IDs. + For the full validation checklist, click **Setup instructions** on the Realtime LLM Voice channel page. ## Set up Pipeline Voice channel From 0f603d3acd56d204821815f556d1431b8ec6d47c Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 18:08:26 +0530 Subject: [PATCH 18/20] Updated readme.md file - updated contribution instruction and added new tree output to list of files --- README.md | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f2ffb4172..beff97212 100644 --- a/README.md +++ b/README.md @@ -14,20 +14,11 @@ Other business solutions of Kore.ai: ## Contribute to this Documentation -Prerequisites to author and contribute are: +This repo is public. To contribute edits, clone it or fork it and submit a PR. Request a review of your PR and wait for it to be merged to `main`. To report bugs or share suggestions, create an issue. -- [Node.js](https://nodejs.org) v20.17.0 or later (LTS version recommended). -- Get write access to this repo. -- Install Mintlify CLI `npm i -g mintlify`. +When editing .mdx files, follow GitHub Flavored Markdown syntax. -To author and preview, follow these steps: - -1. Clone the repo. Use GitHub Desktop client. -1. Work only in your [product-specific branch](https://github.com/Koredotcom/docs-v2/branches) and your product-specific folder. -1. Create or update the .mdx files or other assets. -1. To preview locally, create a local build using `mint dev` or `mint dev --port xxxx` in the cloned repo's root folder. -1. To preview on stage, create [a pull requests](https://github.com/Koredotcom/docs-v2/pulls) targeting `main` branch and view the preview or deployment link in it. -1. To publish your doc updates, request a review of your PR and wait for it to be merged. Do NOT merge on your own. +To preview your edits locally, use the npm package of [Mintlify](https://www.mintlify.com/docs/cli/index). ## Folder structure and common files @@ -45,12 +36,17 @@ assets/ # Common assets for all docs, say favicon, logo, etc. Used in d ├── koreailogo-white.svg custom-css # custom stylesheets. Don't edit. ├── style.css +drafts # Drafted content or assets that are to be used later. snippets # Reusable content for single sourcing .cspell.json # Spell check config file that's NOT available in the repo but added in everyone's local clone manually. Works when extension is installed in VSCode editor. .gitignore # Exclusions from repo uploads +.lycheeignore # Configuration for Lychee linkchecker. It is configured to run as an on-demand Action on this repo. .markdownlint.jsonc # Markdown linting rules. Works when extension is installed in VSCode editor .mintignore # Exclusions from the Mintlify build docs.json # Config, TOC, home page design theme, analytics integration, etc. home.mdx # Docs home page License # MIT license for docs +linkinator.config.json # Config for Linkinator link checker. It is used separately from the CLI. +README.md # This file. +search.js # JavaScript that powers search of AI for Service and AI for Work help articles. ``` From 26e29926f4113bc2d6b64801ff11a41d08827782 Mon Sep 17 00:00:00 2001 From: vishnubkore Date: Thu, 22 Oct 2026 18:19:05 +0530 Subject: [PATCH 19/20] Update voice.mdx --- agent-platform/channels/voice.mdx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/agent-platform/channels/voice.mdx b/agent-platform/channels/voice.mdx index ae150a0d8..239ed7e74 100644 --- a/agent-platform/channels/voice.mdx +++ b/agent-platform/channels/voice.mdx @@ -49,8 +49,16 @@ Once the channel is created, open it from the **Realtime LLM Voice** connections If you select **Phone Number (DID)**, complete the next step. If you selected **Voice Provider: Bring Your Own SIP** instead, skip to step 3. - Set the **Provider** to **Twilio**, toggle **Inbound calls** (route calls from this number into the voice agent) and **Outbound calls** (allow this number to be used for campaign dialout), and select a **Country**, **Number Type**, and optional **Area Code**. Select **Search Available Numbers** to list numbers that match your filters. - Buy or assign a Twilio-backed number from the saved connection's settings, and confirm the number is bound to this connection before you activate it. After you assign a number, it appears in the **Phone Number** field. Select **Remove** to remove the number from the connection. + - Set **Provider** to **Twilio**. + - Toggle **Inbound calls** (routes calls from this number into the voice agent). + - Toggle **Outbound calls** (allows this number for campaign dial‑out). + - Select a **Country**, **Number Type**, and optional **Area Code**. + - Choose **Search Available Numbers** to list matching numbers. + + Buy or assign a Twilio‑backed number from the saved connection’s settings. + - Confirm the number is bound to this connection before activation. + - After assignment, the number appears in the **Phone Number** field. + - Select **Remove** to unbind the number from the connection. If you chose **Bring Your Own SIP**, the **Call routing** options are replaced by a **SIP Configuration** section on the **Settings** tab. Set the following fields. @@ -350,7 +358,6 @@ Open the **Testing** tab to verify the channel before going live. - **Soft Phone dialer:** From the **Settings** tab, select **Soft Phone > Launch dialer** to call the agent directly from your browser. - No DID purchase or telephony charges are required. - ### Verify and secure the Realtime LLM Voice channel Before you go live, validate the quality of realtime calls. Realtime quality depends on the slowest leg of the call, so test each of the following. @@ -373,7 +380,7 @@ Before you go live, validate the quality of realtime calls. Realtime quality dep -## Security, Latency, and Reliability Practices +### Security, Latency, and Reliability Practices - **Protect credentials:** Treat realtime provider and carrier credentials as administrator‑managed secrets. Do not copy API keys into connection identifiers, browsers, screenshots, or agent prompts. - **Minimize overhead:** Avoid unnecessary transcoding, buffering, proxy hops, and oversized tool responses. Set explicit connection and turn timeouts, and verify heartbeat behavior through every proxy. From 6a927f06b4c20d487e7a8c595fb4e2e853f1780a Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 22 Oct 2026 18:47:51 +0530 Subject: [PATCH 20/20] Update prompts.mdx --- agent-platform/prompts.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-platform/prompts.mdx b/agent-platform/prompts.mdx index 3253686c9..677bef7e5 100644 --- a/agent-platform/prompts.mdx +++ b/agent-platform/prompts.mdx @@ -1,5 +1,5 @@ --- -title: Prompt library +title: Prompts library sidebarTitle: Prompts library ---