From a5eb458bb89c47273e3d834bf510c413367df25b Mon Sep 17 00:00:00 2001
From: Paul Wozniczka <25128922+pwoznic@users.noreply.github.com>
Date: Tue, 9 Dec 2025 15:36:03 -0600
Subject: [PATCH 01/18] Restructure agents
---
www/docs/agent-os/agent-platform-overview.md | 220 -----
www/docs/agent-os/agents-quickstart.md | 364 -------
www/docs/agent-os/create-a-lambda-tool.md | 268 ------
www/docs/agent-os/subagent-tool.md | 88 --
www/docs/agents/agent-platform-overview.md | 57 ++
.../agent-tools-overview.md | 8 +-
www/docs/{agent-os => agents}/agent-tools.md | 6 +-
www/docs/agents/agents-quickstart.md | 110 +++
www/docs/{agent-os => agents}/agents.md | 0
.../{agent-os => agents}/conversational-ai.md | 6 +-
.../create-a-lambda-tool.md} | 217 ++---
www/docs/agents/create-agent-examples.md | 137 +++
www/docs/agents/custom-tools.md | 101 ++
www/docs/{agent-os => agents}/instructions.md | 0
www/docs/agents/lambda-tools.md | 69 ++
.../model-context-protocol.md | 5 +-
www/docs/{agent-os => agents}/sessions.md | 0
.../structured-indexing.md | 0
www/docs/agents/subagent-tool.md | 198 ++++
www/docs/{agent-os => agents}/tool-servers.md | 0
www/docs/{agent-os => agents}/tools.md | 0
www/docs/build.md | 4 +-
www/docs/console-ui/agents/create-an-agent.md | 2 +-
www/docs/console-ui/agents/example-agents.md | 2 +-
www/docs/developer-quickstart.md | 2 +-
www/docs/getting-started.md | 2 +-
www/docs/learn/ai-agents.md | 4 +-
www/docs/prompts/vectara_prompt_engine.md | 62 +-
www/docs/quick-starts.mdx | 2 +-
www/docs/release-notes.mdx | 49 +-
.../rest-api/create-agent-session.api.mdx | 2 +-
.../fuzzy-metadata-search.md | 59 +-
www/docs/use-case-exploration.md | 2 +-
www/docs/welcome.mdx | 2 +-
www/sidebars.ts | 899 +++++++++++++++++-
www/static/_redirects | 3 +-
www/static/img/add-first-tool.png | Bin 0 -> 60082 bytes
www/static/img/corpora-list-tool.png | Bin 0 -> 114116 bytes
www/static/img/create-agent-general.png | Bin 0 -> 52930 bytes
.../img/create-agent-instructions-1.png | Bin 0 -> 76685 bytes
.../img/create-agent-instructions-2.png | Bin 0 -> 56521 bytes
.../img/create-agent-instructions-3.png | Bin 0 -> 88157 bytes
www/static/img/create-agent-model.png | Bin 0 -> 65168 bytes
www/static/img/create-agent-success.png | Bin 0 -> 50648 bytes
www/static/img/create-agent-tools-1.png | Bin 0 -> 58015 bytes
www/static/img/create-agent-tools-2.png | Bin 0 -> 58069 bytes
www/static/img/create-agent-tools-3.png | Bin 0 -> 130635 bytes
www/static/img/create-agent-tools-4.png | Bin 0 -> 54736 bytes
www/static/img/create-agent-tools-5.png | Bin 0 -> 59268 bytes
www/static/img/create-lambda-tool.png | Bin 0 -> 126561 bytes
www/static/img/test-lambda-function.png | Bin 0 -> 104020 bytes
.../img/use-recommended-instructions.png | Bin 0 -> 81066 bytes
www/static/img/web-search-tool.png | Bin 0 -> 175003 bytes
www/static/vectara-oas-v2.yaml | 2 +-
54 files changed, 1768 insertions(+), 1184 deletions(-)
delete mode 100644 www/docs/agent-os/agent-platform-overview.md
delete mode 100644 www/docs/agent-os/agents-quickstart.md
delete mode 100644 www/docs/agent-os/create-a-lambda-tool.md
delete mode 100644 www/docs/agent-os/subagent-tool.md
create mode 100644 www/docs/agents/agent-platform-overview.md
rename www/docs/{agent-os => agents}/agent-tools-overview.md (92%)
rename www/docs/{agent-os => agents}/agent-tools.md (97%)
create mode 100644 www/docs/agents/agents-quickstart.md
rename www/docs/{agent-os => agents}/agents.md (100%)
rename www/docs/{agent-os => agents}/conversational-ai.md (89%)
rename www/docs/{agent-os/lambda-tools.md => agents/create-a-lambda-tool.md} (81%)
create mode 100644 www/docs/agents/create-agent-examples.md
create mode 100644 www/docs/agents/custom-tools.md
rename www/docs/{agent-os => agents}/instructions.md (100%)
create mode 100644 www/docs/agents/lambda-tools.md
rename www/docs/{agent-os => agents}/model-context-protocol.md (96%)
rename www/docs/{agent-os => agents}/sessions.md (100%)
rename www/docs/{agent-os => agents}/structured-indexing.md (100%)
create mode 100644 www/docs/agents/subagent-tool.md
rename www/docs/{agent-os => agents}/tool-servers.md (100%)
rename www/docs/{agent-os => agents}/tools.md (100%)
create mode 100644 www/static/img/add-first-tool.png
create mode 100644 www/static/img/corpora-list-tool.png
create mode 100644 www/static/img/create-agent-general.png
create mode 100644 www/static/img/create-agent-instructions-1.png
create mode 100644 www/static/img/create-agent-instructions-2.png
create mode 100644 www/static/img/create-agent-instructions-3.png
create mode 100644 www/static/img/create-agent-model.png
create mode 100644 www/static/img/create-agent-success.png
create mode 100644 www/static/img/create-agent-tools-1.png
create mode 100644 www/static/img/create-agent-tools-2.png
create mode 100644 www/static/img/create-agent-tools-3.png
create mode 100644 www/static/img/create-agent-tools-4.png
create mode 100644 www/static/img/create-agent-tools-5.png
create mode 100644 www/static/img/create-lambda-tool.png
create mode 100644 www/static/img/test-lambda-function.png
create mode 100644 www/static/img/use-recommended-instructions.png
create mode 100644 www/static/img/web-search-tool.png
diff --git a/www/docs/agent-os/agent-platform-overview.md b/www/docs/agent-os/agent-platform-overview.md
deleted file mode 100644
index baa7243f5..000000000
--- a/www/docs/agent-os/agent-platform-overview.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-id: agent-platform-overview
-title: Agents
-sidebar_label: Agents
----
-
-import CodePanel from '@site/src/theme/CodePanel';
-
-Agents are autonomous systems that understand natural language and use tools
-and reasoning to accomplish tasks.
-
-1. [**Create an agent**](/docs/rest-api/create-agent): Define the agent's name, description, and available
- tools.
-2. [**Write instructions**](/docs/rest-api/create-instruction): Create templates that guide the agent's behavior.
-3. [**Configure tools**](/docs/rest-api/list-tools): Set up corpus access permissions and any external
- integrations.
-4. [**Test agents with sessions**](/docs/rest-api/create-agent-session): Start conversations and iterate on your
- configuration.
-
-
-:::tip Quick Start
-To build your first agent, see the [**Agent quick start**](/docs/agents/agents-quickstart).
-Or, check out our [**Agents APIs**](/docs/rest-api/agents).
-:::
-
-## Concepts
-
-The core concept to understand about agents is that their behavior is defined
-by instructions. The agent uses these instructions alongside information from
-a conversation session to determine how to respond to user input, including
-which tools to use.
-
-These are the other core concepts when it comes to agents:
-
-* **Tools:** Tools provide agents with capabilities to interact with data and
- external systems.
-* **Sessions:** Sessions preserve context throughout a conversation so the agent
- can consider prior information when responding to a query.
-
-
-```mermaid
-flowchart TD
- %% Nodes
- User["User"]
- Session["**Agent**"]
- Agent["**Session**"]
- Inst["**Instructions**"]
- Query["**Agent Query**"]
-
- %% Tools layer
- AvailableTools["**Tools** (Corpora Search, Web Search, Lambda Tools)"]
-
- %% MCP
- MCP["**MCP Tool + Client**"]
- ExtMCP["External MCP Server"]
-
- %% Core flow
- User -->|Query| Session
- Session -->|Conversation state| Agent
- Agent --> |Configured with| Inst
- Inst --> |Guide agent behavior| Query
-
- %% Tool execution paths
- Query <--> AvailableTools
-
- %% Optional MCP path (de-emphasized)
- Query <--> MCP
- MCP -.-> ExtMCP
-
- %% Return to user
- Query -->|Synthesizes response| Session
- Session -->|Response| User
-
- %% Classes for color grouping
- classDef userEntry fill:#182033,color:#fff,stroke:#fff,stroke-width:2px;
- classDef session fill:#EEF2F8,color:#182033,stroke:#787878,stroke-width:2px;
- classDef agentic fill:#EEF2F8,color:#182033,stroke:#787878,stroke-width:2px;
- classDef toolLayer fill:#EEF2F8,color:#182033,stroke:#787878,stroke-width:2px;
- classDef corpus fill:#E9368E,color:#fff,stroke:#E9368E,stroke-width:2px;
- classDef external fill:#182033,color:#fff,stroke:#fff,stroke-width:2px;
- classDef mcpTP fill:#EEF2F8,color:#182033,stroke:#787878,stroke-width:2px;
-
- %% Assign classes
- class User userEntry;
- class Session session;
- class Agent,Inst,Query agentic;
- class AvailableTools toolLayer;
- class ExtMCP external;
- class MCP mcpTP;
-
-```
-
-
-## Example: Research assistant agent with web search
-
-Here's how to create a research assistant agent that can search the web for
-current information. This agent completes the following tasks:
-- Search the web when users ask questions requiring current information
-- Limit search results to 20 for comprehensive responses
-- Use a lower temperature (0.3) for more consistent, factual responses
-- Follow instructions to cite sources and admit uncertainty when appropriate
-- Configure retry logic to handle transient API failures gracefully
-
-This example requires no corpus setup, making it perfect for immediate testing.
-
-
-
-To chat with your agent, read on about [Sessions](/docs/agents/sessions).
-
-
-## Model Context Protocol (MCP)
-
-The Model Context Protocol (MCP) is an emerging and rapidly changing standard
-for communication between agents and tools. Introduced by Anthropic and now
-adopted across multiple agentic ecosystems, MCP defines a structured way for
-agents to invoke external tools, pass contextual input, and receive structured
-responses. MCP acts as a universal connector between AI agents and enterprise
-services.
-
-In the tech preview of Agents, Vectara only supports MCP as a
-client. This means Vectara agents can call MCP-enabled tools and services
-hosted on external MCP servers.
-
-:::note
-You can run your own MCP server to expose your tools and data within the Vectara
-platform. To help you get started, we provide an unsupported
-[open-source MCP server implementation](https://github.com/vectara/py-vectara-agentic).
-Please note that while you can connect your self-hosted MCP server to Vectara,
-you are responsible for its management and maintenance.
-:::
-
-## Why MCP is important
-
-MCP eliminates the need for custom integrations by providing a universal
-protocol that any AI system can use to access external capabilities.
-Instead of building custom integrations for every tool or service, MCP
-creates a standardized interface that works across different LLM providers
-and enterprise systems. MCP provides the following benefits:
-
-| Benefit | Description |
-| ------ | ------- |
-| Standardized tool access | Access tools through a common schema and interface.
-| Dynamic tool discovery | Agents can discover tools available at a registered MCP server.
-| Enterprise integration | Tools can represent internal APIs, RAG systems, databases, or even other agents.
-| Auditability and security | Permissions and access control can be managed per tool, enabling secure orchestration.
-| Model-agnostic | MCP works across agent platforms (Vectara, Claude, OpenAI SDK, Google Gemini, and so on).
-
diff --git a/www/docs/agent-os/agents-quickstart.md b/www/docs/agent-os/agents-quickstart.md
deleted file mode 100644
index c2b16f77a..000000000
--- a/www/docs/agent-os/agents-quickstart.md
+++ /dev/null
@@ -1,364 +0,0 @@
----
-id: agents-quickstart
-title: Quickstart
-sidebar_label: Quickstart
----
-
-import CodePanel from '@site/src/theme/CodePanel';
-
-Vectara Agents are AI assistants that can use tools, follow instructions, and
-maintain conversation context. This guide shows you how to create and interact
-with a Vectara agent using the API. We'll walk through the workflow from agent
-creation to having a conversation. Here is some information about using agents:
-
-- **Sessions are required**: You cannot chat with an agent directly. You must
- create a session first.
-- **Sessions maintain context**: All messages within a session share
- conversation history.
-- **One agent, many sessions**: Multiple users can have separate conversations with
- the same agent.
-- **Event-based architecture**: All interactions are tracked as events for
- full auditability.
-
-The agent workflow follows these steps:
-
-1. **Create an agent** - Configure your AI assistant with tools and instructions.
-2. **Create a session** - Start a conversation context for message history.
-3. **Send messages** - Chat with the agent through the session.
-
-Let's walk through each step with working examples.
-
-```mermaid
-flowchart LR
- A[👤 User] --> B{Step 1:
Create Agent}
- B -->|Console UI| C[🖥️ Configure Agent]
- B -->|API| D[⚡ POST /v2/agents]
- C --> E[🤖 Agent Created]
- D --> E
- E --> F[đź”— Step 2:
Create Session]
- F --> G[đź’¬ Step 3:
Chat with Agent]
-
- classDef userNode fill:#F8FAFC,stroke:#334155,stroke-width:3px,color:#1E293B
- classDef actionNode fill:#3B82F6,stroke:#1D4ED8,stroke-width:3px,color:#fff
- classDef configNode fill:#10B981,stroke:#047857,stroke-width:3px,color:#fff
- classDef resultNode fill:#F59E0B,stroke:#D97706,stroke-width:3px,color:#fff
- classDef chatNode fill:#EC4899,stroke:#BE185D,stroke-width:3px,color:#fff
-
- class A userNode
- class B,F actionNode
- class C,D configNode
- class E resultNode
- class G chatNode
-```
-
-## Step 1: Create an Agent
-
-First, let's create a simple research assistant agent that can search the web.
-This example requires no corpus setup, so you can follow along immediately.
-
-### Create an agent with the console UI (Recommended)
-
-For your first agent, we recommend using the Console UI. If you need more
-detailed UI instructions, see [Create an Agent](/docs/console-ui/agents/create-an-agent).
-
-1. Navigate to **Agents** in the sidebar.
-2. Click **Add Agent**.
-3. Configure each step:
- - **General**: Name: `research-assistant` and description: `A research assistant that can search the web for current information`
- - **Model**: Select `gpt-5`, and set `{"temperature":0.3}` for factual responses
- - **Instructions**: `You are a helpful research assistant. When users ask questions, search the web
- for current and accurate information. Always cite your sources and be honest if you cannot find reliable information.`
- - **Tools**: Add Web Search tool with the argument override: `{"limit": 10}`.
- - **Advanced**: Add `{"category": "research"}`.
-4. Click **Create Agent**.
-
-### Create an agent with the API
-
-Alternatively, create the same agent programmatically:
-
-:::tip Curl Command Format
-If you have issues with copy-pasting multi-line command, use a single-line version.
-:::
-
-
-
-This creates an agent with an auto-generated key like `agt_research-assistant_abc123`.
-
-
-
-## Step 2: Create a Session
-
-First, create a session to maintain conversation context:
-
-
-
-This returns a session object with a `key` ( `ase_12345`) that you need in
-the next step.
-
-## Step 3: Chat with the Agent
-
-Send user input by creating an event in the session:
-
-
-
-## Complete Example
-
-Here's a complete example using curl:
-
-
-
-## Test your agent with the console UI
-
-1. In the agent details page, click the **Chat** tab.
-2. Try asking: `"What are the main benefits of solar energy for average Texas homes?"`
-3. You should see the agent search the web and provide a cited response.
-
-### Expected response
-
-The agent acts as follows:
-1. Uses web search to find current information.
-2. Provides a summary with key points.
-3. Includes source citations.
-4. Shows tool usage in the response events.
-
-## Response format
-
-The agent responds with events that include:
-- `input_message`: Your original message
-- `thinking`: The agent's reasoning process (optional)
-- `tool_input`/`tool_output`: Web search execution and results
-- `agent_output`: The final response with citations.
-
diff --git a/www/docs/agent-os/create-a-lambda-tool.md b/www/docs/agent-os/create-a-lambda-tool.md
deleted file mode 100644
index 5c82c9d14..000000000
--- a/www/docs/agent-os/create-a-lambda-tool.md
+++ /dev/null
@@ -1,268 +0,0 @@
----
-id: create-a-lambda-tool
-title: Create a Lambda Tool
-sidebar_label: Create a Lambda Tool
----
-
-import CodePanel from '@site/src/theme/CodePanel';
-
-To create a Lambda Tool, review the prerequisites, define a function, and
-use the API.
-
-1. Meet the following prerequisites:
-- Access to the Vectara API with tool creation permissions.
-- Basic Python familiarity.
-- API key.
-2. Define a simple function. The entry point must be `process`.
- This example calculates customer scores based on their activity metrics:
- dict:
- """Calculate customer score based on activity metrics."""
- score = (order_count * 10 + total_revenue * 0.1) / days_active
- tier = 'gold' if score > 20 else 'silver' if score > 10 else 'bronze'
- return {
- 'score': round(score, 2),
- 'tier': tier
- }`
- }
- ]}
- />
- :::note Notes
- - Use type annotations for automatic schema discovery
- - Parameters with default values become optional in the schema
- - Return a JSON-serializable dictionary
- :::
-
-3. Create the Lambda Tool with the API.
-
- dict:\\n score = (order_count * 10 + total_revenue * 0.1) / days_active\\n tier = 'gold' if score > 20 else 'silver' if score > 10 else 'bronze'\\n return {'score': round(score, 2), 'tier': tier}",
- "execution_configuration": {
- "max_execution_time_seconds": 30,
- "max_memory_mb": 100
- }
- }'`
- }
- ]}
- />
-
- **Example response:**
-
- dict:...",
- "validation_status": "valid"
- }
- }`
- }
- ]}
- />
-
-The input and output schemas were automatically discovered from the function's
-type annotations.
-
-## Test Lambda Tools
-
-Before deploying your Lambda Tool to agents, test it with sample inputs to
-verify correct behavior.
-
-### Test your Lambda Tool
-
-
-
-**Test Response:**
-
-
-
-## Update lambda tools
-
-Modify existing Lambda Tools to update code, configuration, or metadata:
-
- dict:\\n base_score = (order_count * 10 + total_revenue * 0.1) / days_active\\n adjusted_score = base_score + (loyalty_points * 0.05)\\n return {\\'score\\': round(adjusted_score, 2), \\'tier\\': \\'platinum\\' if adjusted_score > 30 else \\'gold\\' if adjusted_score > 20 else \\'silver\\'}",
- "execution_configuration": {
- "max_execution_time_seconds": 60,
- "max_memory_mb": 200
- }
- }'`
- }
- ]}
-/>
-
-When you update the code, schemas are automatically re-discovered from the
-new function signature.
-
-## List all lambda tools
-
-
-
-## Disable a lambda tool
-
-
-
-## Delete a lambda tool
-
-
-
-## Available Python libraries
-
-Lambda Tools run in a secure sandbox with access to the
-following Python 3.12 standard library modules:
-
-- **`json`** - JSON encoding and decoding
-- **`math`** - Mathematical functions
-- **`datetime`** - Date and time handling
-- **`collections`** - Container datatypes (deque, Counter, OrderedDict, etc.)
-- **`itertools`** - Iterator functions
-- **`functools`** - Higher-order functions and operations on callable objects
-- **`re`** - Regular expression operations
-- **`time`** - Time access and conversions
-- **`typing`** - Type hints and annotations (List, Dict, Optional, Union, TypedDict, etc.)
-
-:::warning Security Constraints
-Lambda Tools cannot:
-- Install additional packages (pip install is not available)
-- Access the network (all network operations are blocked)
-- Write to the file system (read-only environment)
-- Execute system commands
-- Import modules outside the allowed list
-:::
diff --git a/www/docs/agent-os/subagent-tool.md b/www/docs/agent-os/subagent-tool.md
deleted file mode 100644
index 61eda8d72..000000000
--- a/www/docs/agent-os/subagent-tool.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-id: subagent-tool
-title: Subagents
-sidebar_label: Subagents
----
-
-import CodePanel from '@site/src/theme/CodePanel';
-
-As a single agent handles increasingly complex workflows, some tasks require
-multi-step reasoning that goes beyond a single tool call. For example, an
-agent that summarizes documentation may need to also perform code reviews and
-generate diverse output types. Managing these separate workflows within a
-single context leads to confusion and hallucinations.
-
-Subagents enable your agents to delegate specialized tasks to other agents
-that work autonomously. Think of them as expert consultants that your main
-agent can call upon for more nuanced work. These specialized subagents
-maintain their own context and conversation history, allowing them to handle intricate workflows independently before returning results to the parent agent.
-
-Subagents provide the following:
-
-- **Delegate tasks** to specialized agents with their own tools and instructions.
-- **Separate context** so that subagents maintain independent conversation history.
-- **Execute autonomously** to handle complex, multi-step tasks without parent
- agent intervention.
-- **Manage sessions** as configurable time-to-idle for persistent or one-time
- sessions.
-- **Return complete** and processed results to the parent agent.
-
-:::note
-After creating specialized agents, you can configure parent agents to invoke
-them through inline sub-agent tool configurations. You reference the agent by
- its key and configure session behavior.
-:::
-
-## Create a subagent
-
-To create a subagent, review the prerequisites, configure the tool, and
-use the Create Subagent API to enable agents to initialize specialized sub-agents for complex
-tasks.
-
-
-## Configure a subagent
-
-Subagents are configured inline when creating or updating an agent. They
-reference an existing agent to invoke as a sub-agent.
-
-
diff --git a/www/docs/agents/agent-platform-overview.md b/www/docs/agents/agent-platform-overview.md
new file mode 100644
index 000000000..d5896b6f9
--- /dev/null
+++ b/www/docs/agents/agent-platform-overview.md
@@ -0,0 +1,57 @@
+---
+id: agent-platform-overview
+title: Concepts
+sidebar_label: Concepts
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+Agents are autonomous systems that understand natural language and use tools
+and reasoning to accomplish tasks. An Agent maintains state and uses reasoning
+to determine the best way to solve a user's problem.
+
+:::tip Quick Start
+To build your first agent, see the [**Agent quick start**](/docs/agents/agents-quickstart).
+Or, check out our [**Agents APIs**](/docs/rest-api/agents).
+:::
+
+An agent consists of three primary components that define its behavior and
+capabilities.
+
+## Instructions
+
+Instructions serve as the system prompt for the agent and define its behavior,
+how to respond to user input, and which tools to use. Velocity templates,
+enable dynamic variable substitutions. You can also reference session
+metadata (such as `${session.metadata.user_role}`) to personalize agent behavior.
+
+## Tools
+
+Tools provide agents with capabilities to interact with data and
+external systems including corpora search, web search, artifacts (uploaded
+files), subagents and MCP servers.
+
+
+### Subagents
+
+Subagents enable you to create modular agent systems. Instead of building a
+single agent that tries to handle every scenario, you define specialized agents
+and register them as tools for a parent agent. This allows the main agent to
+delegate domain-specific tasks to a subagent. The subagents executes its own
+reasoning loop and returns the result to the parent agent.
+
+
+## Sessions
+
+Sessions preserve context throughout a conversation so the agent
+can consider all prior information when responding to a query.
+
+* **Metadata:** You can provide custom metadata into a session (like `user_id` or
+ `language`), which the Agent can access through the instructions.
+* **Artifacts:** Sessions provide a workspace for file uploads. You can upload
+ documents to a session for the agent to analyze without indexing them into
+ a permanent corpus. You can also generate new documents from these artifacts
+ and upload to a corpus for future use.
+
+To chat with your agent, read on about [Sessions](/docs/agents/sessions).
+
diff --git a/www/docs/agent-os/agent-tools-overview.md b/www/docs/agents/agent-tools-overview.md
similarity index 92%
rename from www/docs/agent-os/agent-tools-overview.md
rename to www/docs/agents/agent-tools-overview.md
index ce15d0eba..806ed2dbf 100644
--- a/www/docs/agent-os/agent-tools-overview.md
+++ b/www/docs/agents/agent-tools-overview.md
@@ -1,11 +1,9 @@
---
-id: agent-tools-overview
-title: Agent Tools Overview
-sidebar_label: Overview
+id: agent-tools
+title: Built-in tools
+sidebar_label: Built-in tools
---
-import CodePanel from '@site/src/theme/CodePanel';
-
Vectara provides several tools that enable agents to perform searches, manage
artifacts, process documents, and connect to external systems. This overview
summarizes each tool type and its capabilities.
diff --git a/www/docs/agent-os/agent-tools.md b/www/docs/agents/agent-tools.md
similarity index 97%
rename from www/docs/agent-os/agent-tools.md
rename to www/docs/agents/agent-tools.md
index 08943079b..f8872347c 100644
--- a/www/docs/agent-os/agent-tools.md
+++ b/www/docs/agents/agent-tools.md
@@ -1,7 +1,7 @@
---
id: agent-tools
-title: Agent tools
-sidebar_label: Agent tools
+title: Built-in tools
+sidebar_label: Built-in tools
---
import CodePanel from '@site/src/theme/CodePanel';
@@ -20,7 +20,7 @@ your own. For a complete list of available tools, refer to the [Tools API docs](
relevant results.
* Supports custom search parameters, generation settings, and query
configuration.
-
+
## Web search
* Searches the internet for current information beyond your indexed corpora.
* Configurable result limits and query parameters. You can also specify
diff --git a/www/docs/agents/agents-quickstart.md b/www/docs/agents/agents-quickstart.md
new file mode 100644
index 000000000..920c6b071
--- /dev/null
+++ b/www/docs/agents/agents-quickstart.md
@@ -0,0 +1,110 @@
+---
+id: agents-quickstart
+title: Quickstart
+sidebar_label: Quickstart
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+This guide walks you through creating and configuring a Research
+Assistant agent in the Vectara Console. By the end of this tutorial, you will have
+a working agent capable of searching the web to answer questions.
+
+The Create agent wizard lets you customize an agent including its model,
+instructions, tools, and other advanced options.
+
+## Step 1: Create the agent and configure general settings
+
+Start by accessing the Agents section and giving your agent a clear name and
+description to help identify its purpose and capabilities.
+
+1. Navigate to **Agents** in the sidebar.
+2. Click **Add Agent**.
+ The General pane appears.
+3. Add a **Name** like `Research Assistant`.
+4. Add a **Description** like
+ `A research assistant that can search the web for current information.`
+ 
+5. Click **Next**.
+
+## Step 2: Select the model
+
+Choose the Large Language Model (LLM) that you want for your agent's
+reasoning. Then, configure the model parameters. We'll set the creativity
+level with the temperature parameter.
+
+1. Select a **Model name** like `gpt-4o`.
+2. Set the `temperature` parameter to `0.3`.
+ 
+ This temperature value provides more consistent results with factual
+accuracy and low creativity. This `0.3` value is like a _sweet spot_ for many
+use cases involving Q&As, research assistants, and technical outputs.
+3. Click **Next** to open the Instructions pane.
+
+## Step 3: Add custom instructions
+
+Instructions define your agent's behavior, personality, and how it should
+approach queries. Custom instructions give you full control over the agent's
+responses. You can use our recommended instructions, or you can choose your
+own.
+
+1. Click the option to **Choose your own**.
+ 
+2. Click **Add custom instruction**.
+ 
+ The **Instruction 1** box appears.
+3. Enter "_You are a helpful research assistant. When users ask questions,
+ search the web for current and accurate information. Always cite your
+ sources and be honest if you cannot find reliable information._"
+ 
+
+If you want, you can add additional instructions. Then, click **Next** to move
+to the Tools configuration.
+
+## Step 4: Add and configure the Web Search tool
+
+Tools extend your agent's capabilities beyond its base knowledge. Proper tool configuration helps the agent understand when and how to use the tool effectively.
+
+1. Click **Add first tool**.
+ 
+2. Select **Web Search**.
+ 
+3. Enter **web_search** as the Name and provide a description for this tool:
+
+ _The web search tool that find up to date information from trustworthy sources
+ and returns concise summaries with links. Use when a query needs current
+ facts external references or verification beyond internal knowledge. Prefer
+ authoritative sites such as documentation government and academic pages and
+ avoid low quality or speculative content._
+
+4. Specify a `limit` of `10` results. You can learn more about the
+ other options such as query, exclude domains, and include domains in the
+ [API Reference](/docs/rest-api/create-agent).
+
+ 
+
+5. Click **Next** to move to the Advanced options pane.
+
+## Step 5: Add metadata
+
+Metadata helps you organize and categorize agents, making them easier to find and manage as your agent library grows.
+
+This final step of the wizard lets you add metadata to help organize your
+agent.
+
+10. Add a **Research** category and **version**.
+
+
+
+## Step 6: Create and test the agent
+
+With all configurations complete, you can now create your agent and immediately test it in the Console chat interface.
+
+11. Click **Create agent** to finish the wizard and then begin a chat
+ with your new Research Assistant agent.
+
+
+
+Alternatively, you can create the same agent with the [Create Agent API](/docs/agents/create-agent-examples).
+
+Read on to learn how to craft custom instructions and tools.
diff --git a/www/docs/agent-os/agents.md b/www/docs/agents/agents.md
similarity index 100%
rename from www/docs/agent-os/agents.md
rename to www/docs/agents/agents.md
diff --git a/www/docs/agent-os/conversational-ai.md b/www/docs/agents/conversational-ai.md
similarity index 89%
rename from www/docs/agent-os/conversational-ai.md
rename to www/docs/agents/conversational-ai.md
index 2a72ef6ed..3863d20a9 100644
--- a/www/docs/agent-os/conversational-ai.md
+++ b/www/docs/agents/conversational-ai.md
@@ -51,6 +51,6 @@ quick access to department-specific knowledge with proper access controls.
## More information
-- [Agents Overview](/docs/agent-os/agent-platform-overview) - Understand how agents work.
-- [Agents Quickstart](/docs/agent-os/agents-quickstart) - Build your first agent.
-- [Working with Sessions](/docs/agent-os/sessions) - Manage conversations.
+- [Agents Overview](/docs/agents/agent-platform-overview) - Understand how agents work.
+- [Agents Quickstart](/docs/agents/agents-quickstart) - Build your first agent.
+- [Working with Sessions](/docs/agents/sessions) - Manage conversations.
diff --git a/www/docs/agent-os/lambda-tools.md b/www/docs/agents/create-a-lambda-tool.md
similarity index 81%
rename from www/docs/agent-os/lambda-tools.md
rename to www/docs/agents/create-a-lambda-tool.md
index bb116c8df..dff8e1997 100644
--- a/www/docs/agent-os/lambda-tools.md
+++ b/www/docs/agents/create-a-lambda-tool.md
@@ -1,123 +1,12 @@
---
-id: lambda-tools
-title: Lambda tools
-sidebar_label: Lambda tools
+id: create-a-lambda-tool
+title: Create and test lambda tools
+sidebar_label: Create and test lambda tools
---
-import CodePanel from '@site/src/theme/CodePanel';
-
-As your AI agents take on more complex workflows, they might need to perform
-actions that go beyond what built-in tools can handle. For example, applying
-custom business logic or transforming data.
-
-Lambda Tools enable you to create your own tools that your agents can
-run during conversations. Think of them as custom skills that teach your agent
-how to handle specialized tasks. These user-defined functions run in secure,
-sandboxed environments, allowing you to extend agent capabilities with custom
-business logic, data processing, or integrations. Check out our tutorial on
-[building a financial research agent](/docs/tutorials/build-a-financial-research-agent).
-
-Lambda Tools are user-defined functions that:
-
-- Execute in a **sandboxed Python 3.12 environment** with gVisor isolation.
-- Have **automatic schema discovery** from function type annotations.
-- Support a **curated set of libraries**: `json`, `math`, `datetime`, `collections`,
- `itertools`, `functools`, `re`, `time`, `typing`.
-- Include **resource limits**: 100MB memory (up to 1GB), 30-second timeout
- (up to 300 seconds).
-- Provide **complete audit trails** of execution history.
-
-:::tip Note
-Lambda Tools run **without** network access. You have secure sandboxed environment, and
-you **cannot** install custom packages. This ensures secure execution in multi-tenant
-environments.
-:::
-
-## Use a lambda tool with an agent
-
-After creating a Lambda Tool, you can configure agents to use it through inline tool configurations.
-You reference the tool by its ID and optionally provide argument overrides.
-
-### Inline configuration
-
-Use an inline configuration to point an agent to an existing Lambda Tool by ID:
-
-
-
-The `argument_override` field allows you to:
-- **Hardcode specific values** that the LLM cannot change (e.g., `"customer_tier": "enterprise"`)
-- **Use dynamic context references** with `$ref` to pull values from session or agent metadata (e.g., `{"$ref": "session.metadata.search_query"}`)
-
-### Reusable Lambda tool configuration
-
-You can also create a reusable `LambdaToolConfiguration` that can be referenced across multiple agents.
-This approach is useful for consistent, governed usage of Lambda Tools.
-
-
+import CodePanel from '@site/src/theme/CodePanel';
-Then reference this configuration in your agent:
-
-
-
-
-## Create a lambda tool
-
-To create a Lambda Tool, review the prerequisites, define a function, and
-use the API.
+To create a Lambda Tool with the API:
1. Meet the following prerequisites:
- Access to the Vectara API with tool creation permissions.
@@ -143,9 +32,9 @@ use the API.
]}
/>
:::note Notes
- - Use type annotations for automatic schema discovery
- - Parameters with default values become optional in the schema
- - Return a JSON-serializable dictionary
+ - Use type annotations for automatic schema discovery.
+ - Parameters with default values become optional in the schema.
+ - Return a JSON-serializable dictionary.
:::
3. Create the Lambda Tool with the API.
+
+The `argument_override` field allows you to:
+- **Hardcode specific values** that the LLM cannot change (e.g., `"customer_tier": "enterprise"`)
+- **Use dynamic context references** with `$ref` to pull values from session or agent metadata (e.g., `{"$ref": "session.metadata.search_query"}`)
+
+### Reusable Lambda tool configuration
+
+You can also create a reusable `LambdaToolConfiguration` that can be referenced across multiple agents.
+This approach is useful for consistent, governed usage of Lambda Tools.
+
+
+
+Then reference this configuration in your agent:
+
+
+
diff --git a/www/docs/agents/create-agent-examples.md b/www/docs/agents/create-agent-examples.md
new file mode 100644
index 000000000..406db66d3
--- /dev/null
+++ b/www/docs/agents/create-agent-examples.md
@@ -0,0 +1,137 @@
+---
+id: create-agent-examples
+title: Create agent examples
+sidebar_label: Create agent examples
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+This section provides some examples of creating agents with the API.
+
+## Research assistant agent
+
+This agent completes the following tasks:
+
+* Search the web when users ask questions requiring current information.
+* SLimit search results to `20` for comprehensive responses.
+* SUse a lower temperature (`0.3`) for more consistent, factual responses.
+* SFollow instructions to cite sources and admit uncertainty when appropriate.
+* SConfigure retry logic to handle transient API failures gracefully.
+
+This example requires no corpus setup, making it perfect for immediate testing.
+
+
+
+
+## Test your agent with the console UI
+
+1. Navigate to **Agents** in the sidebar and find this **research assistant** agent.
+2. In the agent details page, click the **Chat** tab.
+3. Try asking quetsions like: `"What are the main benefits of solar energy for average Texas homes?"`
+4. You should see the agent search the web and provide a cited response.
+
+### Expected response
+
+The agent acts as follows:
+1. Uses web search to find current information.
+2. Provides a summary with key points.
+3. Includes source citations.
+4. Shows tool usage in the response events.
+
+## Response format
+
+The agent responds with events that include:
+- `input_message`: Your original message
+- `thinking`: The agent's reasoning process (optional)
+- `tool_input`/`tool_output`: Web search execution and results
+- `agent_output`: The final response with citations.
+
diff --git a/www/docs/agents/custom-tools.md b/www/docs/agents/custom-tools.md
new file mode 100644
index 000000000..7c60d46d3
--- /dev/null
+++ b/www/docs/agents/custom-tools.md
@@ -0,0 +1,101 @@
+---
+id: custom-tools
+title: Custom tools
+sidebar_label: Custom tools
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+Custom tools extend agent capabilities. You can create tools once and reuse
+them across multiple agents with consistent behavior and governance.
+
+## Lambda tools
+
+User-defined Python functions that execute in secure, sandboxed environments:
+
+- Run in isolated Python 3.12 environments.
+- Automatic schema generation from type annotations.
+- No network access.
+- Resource limits: 100MB memory, 30-second timeout.
+
+Use [Lambda tools](/docs/agents/lambda-tools) for custom business logic, data transformations, and
+calculations that don't require external connectivity.
+
+## MCP tools
+
+Tools from external MCP-compliant servers that enable enterprise integrations:
+
+- Standards-based protocol.
+- Dynamic tool discovery.
+- Register a tool server once, automatically discover all its tools.
+- Connect to CRM systems, databases, and enterprise APIs.
+
+Register an MCP tool server to make its tools available. Learn more about
+[MCP](/docs/agents/model-context-protocol) and
+[Tool Servers](/docs/agents/tool-servers).
+
+
+## Using custom tools with agents
+
+After creating a Lambda tool or registering an MCP server, reference the tool
+in your agent configuration:
+
+
+
+
+
+### Argument overrides
+
+Control tool behavior with hardcoded values or dynamic context references:
+
+
+
+Argument overrides:
+- **Hardcoded values** that the LLM cannot modify (e.g., `"customer_tier": "enterprise"`).
+- **Dynamic references** using `$ref` to pull values from:
+ - Session metadata: `{"$ref": "session.metadata.field_name"}`
+ - Agent metadata: `{"$ref": "agent.metadata.field_name"}`
+
+For complete API details, see [Tools API](/docs/rest-api/tools).
diff --git a/www/docs/agent-os/instructions.md b/www/docs/agents/instructions.md
similarity index 100%
rename from www/docs/agent-os/instructions.md
rename to www/docs/agents/instructions.md
diff --git a/www/docs/agents/lambda-tools.md b/www/docs/agents/lambda-tools.md
new file mode 100644
index 000000000..d6983a7f4
--- /dev/null
+++ b/www/docs/agents/lambda-tools.md
@@ -0,0 +1,69 @@
+---
+id: lambda-tools
+title: Lambda tools
+sidebar_label: Lambda tools
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+As your AI agents take on more complex workflows, they might need to perform
+actions that go beyond what built-in tools can handle. For example, applying
+custom business logic or transforming data.
+
+Lambda Tools enable you to create your own tools that your agents can
+run during conversations. Think of them as custom skills that teach your agent
+how to handle specialized tasks. These user-defined functions run in secure,
+sandboxed environments, allowing you to extend agent capabilities with custom
+business logic, data processing, or integrations. Check out our tutorial on
+[building a financial research agent](/docs/tutorials/build-a-financial-research-agent).
+
+Lambda Tools are user-defined functions that:
+
+- Execute in a **sandboxed Python 3.12 environment** with gVisor isolation.
+- Have **automatic schema discovery** from function type annotations.
+- Support a **curated set of libraries**: `json`, `math`, `datetime`, `collections`,
+ `itertools`, `functools`, `re`, `time`, `typing`.
+- Include **resource limits**: 100MB memory (up to 1GB), 30-second timeout
+ (up to 300 seconds).
+- Provide **complete audit trails** of execution history.
+
+:::tip Note
+Lambda Tools run **without** network access. You have secure sandboxed environment, and
+you **cannot** install custom packages. This ensures secure execution in multi-tenant
+environments.
+:::
+
+## Create a lambda tool (UI)
+
+In this example, we'll create a simple Python function that does the following:
+* Takes one string parameter called `name`.
+* Creates and returns a dictionary with a single key "result".
+* The value associated with that key is a greeting string `"Hello, " + name + "!"`
+
+1. Navigate to **Agents** in the [Vectara Console](https://console.vectara.com/console/agents/).
+2. Click **Add Agent**.
+ The General pane appears.
+3. Add a **Name** `Lambda Tool` and **Description** `A simple Python function.`
+4. Click **Next** and select a model like `gpt-4o`.
+ The Large Language Model (LLM) controls your agent's reasoning.
+5. Click **Next** to open the Instructions pane.
+ Instructions define your agent's behavior, personality, and how it should
+ approach queries.
+6. Click **Use our recommended instructions** and click **Next**.
+ .
+ The Tools configuration appears.
+7. Click **Add first tool**.
+ 
+8. Click **Lambda tool** and add this function to the **Code** field:
+ ```python
+ def process(name: str):
+ return {"result": "Hello, " + name + "!"}
+ ```
+ 
+9. Before you create this tool, you can click **Test function** to verify that
+ it works.
+ 
+10. If the tool works successfully, click **Create lambda tool**.
+
+To learn about creating this tool and using it with the API, see
+[Create a lambda tool](/docs/agents/create-a-lambda-tool).
diff --git a/www/docs/agent-os/model-context-protocol.md b/www/docs/agents/model-context-protocol.md
similarity index 96%
rename from www/docs/agent-os/model-context-protocol.md
rename to www/docs/agents/model-context-protocol.md
index 21910d186..ce088a463 100644
--- a/www/docs/agent-os/model-context-protocol.md
+++ b/www/docs/agents/model-context-protocol.md
@@ -1,6 +1,6 @@
---
-id: mcp
-title: What is Model Context Protocol (MCP)?
+id: model-context-protocol
+title: Model Context Protocol (MCP)
sidebar_label: Model Context Protocol (MCP)
---
@@ -40,4 +40,3 @@ and enterprise systems. MCP provides the following benefits:
| Enterprise integration | Tools can represent internal APIs, RAG systems, databases, or even other agents.
| Auditability and security | Permissions and access control can be managed per tool, enabling secure orchestration.
| Model-agnostic | MCP works across agent platforms (Vectara, Claude, OpenAI SDK, Google Gemini, and so on).
-
diff --git a/www/docs/agent-os/sessions.md b/www/docs/agents/sessions.md
similarity index 100%
rename from www/docs/agent-os/sessions.md
rename to www/docs/agents/sessions.md
diff --git a/www/docs/agent-os/structured-indexing.md b/www/docs/agents/structured-indexing.md
similarity index 100%
rename from www/docs/agent-os/structured-indexing.md
rename to www/docs/agents/structured-indexing.md
diff --git a/www/docs/agents/subagent-tool.md b/www/docs/agents/subagent-tool.md
new file mode 100644
index 000000000..1b3401774
--- /dev/null
+++ b/www/docs/agents/subagent-tool.md
@@ -0,0 +1,198 @@
+---
+id: subagents
+title: Sub-agents
+sidebar_label: Sub-agents
+---
+
+import CodePanel from '@site/src/theme/CodePanel';
+
+The sub-agent tool enables your agent to delegate specialized tasks to other
+agents that work independently and reduce the load and context bloat for the
+main agent. Think of them as isolated domain experts that your parent
+agent can use for specific tasks. Each sub-agent maintains its own tools,
+instructions, and conversation history that enables sub-agents to complete
+tasks independently before returning results to the parent agent.
+
+A sub-agent should have a clear purpose, such as code reviewer, researcher,
+content writer, or data analyst. The parent agent must tell the sub-agent
+exactly what to do with precise instructions.
+
+## How sub-agents work
+
+When a parent agent invokes a `sub_agent` tool:
+1. The sub-agent tool creates a new session, or resumes a previous one using a
+ `session_key`.
+2. The sub-agent tool calls the referenced agent (identified by `agent_key`) with the input message:
+ * The sub-agent processes this request using its own instructions, tools, and memory.
+ * The sub-agent can only access its own tools.
+ * The parent agent cannot access the sub-agent's tools.
+4. The sub-agent tool returns the `session_key` and `sub_agent_response` (the sub-agent's
+ final output) to the parent agent.
+
+:::tip Tips
+* The sub-agent tool always returns **only the final response** of the sub-agent. Activity
+inside the sub-agent is not returned to the parent agent. Ensure that you write
+sub-agent instructions so that the final message is self-contained.
+* Sub-agents operate in isolated workspaces. They do not share memory, history,
+or tool state with the parent unless configured with artifact sharing.
+:::
+
+## Configure a sub-agent tool
+
+You can configure the sub-agent tool inline when creating or updating an agent.
+The configuration defines which agent to invoke (`agent_key`), optional session
+behavior, and optional `argument_override`.
+
+`argument_override` lets you hardcode values for fields exposed to the LLM of the
+sub-agent tool (`message` and `session_tti_minutes`). The LLM cannot modify
+overridden fields or see the values that were supplied.
+
+You can also use dynamic references inside `argument_override`. These values are
+resolved at runtime using `$ref` syntax and can read from:
+
+- `session.metadata.*`
+- `agent.metadata.*`
+
+### Session modes
+
+The sub-agent tool supports three session modes that control whether sessions
+are resumed or created fresh each time:
+
+* `llm_controlled`: (Default) The model decides when to resume a previous session
+ or start a new one.
+ If the LLM provides a `session_key`, the session resumes. If not, a new session
+ starts.
+* `persistent`: The sub-agent tool always reuses the same session created on first
+ invocation.
+ Use this for agents that build knowledge across multiple invocations, such as
+ research or iterative drafting workflows.
+* `ephemeral`: The sub-agent tool always starts fresh. Each call creates a new session.
+ Use this when you want strict isolation and do not want state to carry across
+ invocations.
+
+## Invoke a sub-agent
+
+After configuring a sub-agent tool, the parent agent can invoke it by passing a
+task message. The sub-agent tool then calls the referenced sub-agent with this
+message. The `message` field is exposed to the LLM and defines the specific
+task the sub-agent must perform.
+
+## Session management
+
+The sub-agent tool maintains sessions for sub-agents across invocations using
+a `session_key`.
+
+* If the parent agent does not provide a `session_key`, the sub-agent tool
+ creates a new session.
+* If the parent agent retains the `session_key` of the sub-agent, the sub-agent
+ tool resumes that session.
+
+Sub-agent sessions are owned by the parent agent. No other agent can access
+them. If a parent attempts to resume a session it did not create, the request
+is rejected.
+
+## Artifact sharing
+
+Parent agents can share artifacts with sub-agents through the sub-agent tool.
+The sub-agent tool passes the artifact to the sub-agent's workspace using the
+`artifact_id`.
+
+:::note
+The parent must own the artifact before sharing it. If the artifact does not
+exist in the parent’s workspace, the system returns an error.
+:::
+
+## Sub-agent patterns
+
+**Single task:** Use when tasks do not require any context to carry over.
+
+
+
+**Persistent sub-agent sessions:** When when tasks have multiple steps, such as
+ iterative reviews or content generation.
+
+
+
+**Multiple specialized sub-agents:** Assign different sub-agents for a variety of tasks.
+
+
+
+### Example: Inline code review sub-agent
+
+
diff --git a/www/docs/agent-os/tool-servers.md b/www/docs/agents/tool-servers.md
similarity index 100%
rename from www/docs/agent-os/tool-servers.md
rename to www/docs/agents/tool-servers.md
diff --git a/www/docs/agent-os/tools.md b/www/docs/agents/tools.md
similarity index 100%
rename from www/docs/agent-os/tools.md
rename to www/docs/agents/tools.md
diff --git a/www/docs/build.md b/www/docs/build.md
index 8aaa942e3..af7de0f01 100644
--- a/www/docs/build.md
+++ b/www/docs/build.md
@@ -17,7 +17,7 @@ data flows into Vectara.
helps power both direct queries and agent responses.
Start here if you understand data ingestion and need to configure how queries work.
-- **[Agent operating system](/docs/agent-os/agent-platform-overview)**: Create agents with instructions,
+- **[Agent operating system](/docs/agents/agent-platform-overview)**: Create agents with instructions,
tools, and sessions. Orchestrate data ingestion and search into governed,
conversational AI and document workflow automation.
@@ -30,7 +30,7 @@ Agent OS layer.
- **[Developer Quickstart](/docs/developer-quickstart)** - See data ingestion and search work together
in 5 minutes.
-- **[Agents Quickstart](/docs/agent-os/agents-quickstart)** - Create your first AI agent with
+- **[Agents Quickstart](/docs/agents/agents-quickstart)** - Create your first AI agent with
working code examples.
- **[API Reference](/docs/rest-api)** - Complete endpoint documentation.
diff --git a/www/docs/console-ui/agents/create-an-agent.md b/www/docs/console-ui/agents/create-an-agent.md
index 7bd990cbb..821ed4552 100644
--- a/www/docs/console-ui/agents/create-an-agent.md
+++ b/www/docs/console-ui/agents/create-an-agent.md
@@ -70,5 +70,5 @@ instructions on testing and chatting with your agent, see [Use Agents](/docs/con
## Quick start example
-Check out our [Agent Quick Start](/docs/agent-os/agents-quickstart) for a walkthrough
+Check out our [Agent Quick Start](/docs/agents/agents-quickstart) for a walkthrough
including API equivalents.
diff --git a/www/docs/console-ui/agents/example-agents.md b/www/docs/console-ui/agents/example-agents.md
index e9d1b61cc..eb7c2b6af 100644
--- a/www/docs/console-ui/agents/example-agents.md
+++ b/www/docs/console-ui/agents/example-agents.md
@@ -15,7 +15,7 @@ knowledge base expert.
For a quick start, try creating a research assistant that can search the web.
This agent requires no corpus setup and demonstrates core agent capabilities.
-Follow the [Agent Quick Start](/docs/agent-os/agents-quickstart) guide to create an
+Follow the [Agent Quick Start](/docs/agents/agents-quickstart) guide to create an
agent in minutes using either the Console UI or API. This agent:
- Searches the web for current information
diff --git a/www/docs/developer-quickstart.md b/www/docs/developer-quickstart.md
index 04e55026e..5b30a2fb3 100644
--- a/www/docs/developer-quickstart.md
+++ b/www/docs/developer-quickstart.md
@@ -291,7 +291,7 @@ Transform your RAG application into an intelligent agent:
}'`}]} title="Create an agent" layout="stacked" />
**Learn more:**
-- [Agent quickstart](/docs/agent-os/agents-quickstart)
+- [Agent quickstart](/docs/agents/agents-quickstart)
- [Agent instructions](/docs/rest-api/instructions)
- [Agent tools](/docs/rest-api/tools)
diff --git a/www/docs/getting-started.md b/www/docs/getting-started.md
index 537dec944..ab6a6df70 100644
--- a/www/docs/getting-started.md
+++ b/www/docs/getting-started.md
@@ -23,7 +23,7 @@ application in minutes.
1. **[Get trial access](/docs/vectara-trial)** - Sign up if you haven't already.
2. **[Developer quickstart](/docs/developer-quickstart)** - Learn the basics of
corpora and queries.
-3. **[Create your first agent](/docs/agent-os/agents-quickstart)** - Create your
+3. **[Create your first agent](/docs/agents/agents-quickstart)** - Create your
first AI agent that can use tools, follow instructions, and maintain conversation
context.
4. **[Deploy to production](/docs/deploy-and-scale)** - Set up authentication and access
diff --git a/www/docs/learn/ai-agents.md b/www/docs/learn/ai-agents.md
index f0742964b..59aa5eb89 100644
--- a/www/docs/learn/ai-agents.md
+++ b/www/docs/learn/ai-agents.md
@@ -79,10 +79,10 @@ session management, and enterprise-grade security.
- **Enterprise security**: Row-level access control, tenant isolation, and
auditable tool permissions.
-[**Build your first Vectara Agent →**](/docs/agent-os/agent-platform-overview)
+[**Build your first Vectara Agent →**](/docs/agents/agent-platform-overview)
:::tip Conversational AI Platform
Agents are perfect for building conversational AI experiences like virtual
assistants and chatbots.
-[**Learn more about Vectara's Conversational AI →**](/docs/agent-os/conversational-ai)
+[**Learn more about Vectara's Conversational AI →**](/docs/agents/conversational-ai)
:::
diff --git a/www/docs/prompts/vectara_prompt_engine.md b/www/docs/prompts/vectara_prompt_engine.md
index e3ab16f4b..b442ceaa3 100644
--- a/www/docs/prompts/vectara_prompt_engine.md
+++ b/www/docs/prompts/vectara_prompt_engine.md
@@ -11,25 +11,30 @@ import {vars} from '@site/static/variables.json';
import CodePanel from '@site/src/theme/CodePanel';
-The Vectara Prompt Engine empowers our users to customize prompt templates
-that can reference the most relevant text and metadata for use cases that
-require Retrieval Augmented Generation (RAG). Vectara enables developers to
-directly add the retrieved documents and their metadata into the prompt
-generation. Vectara supports [Velocity Templates](https://velocity.apache.org/engine/1.7/user-guide.html) which offer
-developers a flexible way of customizing prompt templates and enhance the
-effectiveness of their generative AI applications.
-
-This capability unlocks more advanced workflows and customizations to answer
-questions about your business data. For example, answer questions based on
-previous answers, such as with RFI, RFP, and questionnaires. Draft support
-tickets from user feedback. You can even customize the formatting of results.
-
-:::tip
-Users can override the default prompt text with custom `prompt_template` in the
-`generation` object of a [**query**](/docs/rest-api/queries).
-:::
+The Vectara Prompt Engine empowers our users to customize templates using
+ [Velocity Templates](https://velocity.apache.org/engine/1.7/user-guide.html)
+ for two primary scenarios:
+ 1. **Query prompt templates** - Customize prompts for Retrieval Augmented Generation (RAG)
+ that reference retrieved documents and metadata
+ 2. **Agent tool templates** - Dynamically describe agent tools using session and agent context
+
+ This capability unlocks more advanced workflows and customizations to answer
+ questions about your business data. For example, answer questions based on
+ previous answers, such as with RFI, RFP, and questionnaires. Draft support
+ tickets from user feedback. You can even customize the formatting of results.
+
+ :::tip
+ Users can override the default prompt text with custom `prompt_template` in the
+ `generation` object of a [**query**](/docs/rest-api/queries).
+ :::
+
+## Query prompt templates
+
+ The following sections describe how to customize prompt templates for queries
+ that require Retrieval Augmented Generation (RAG). Vectara enables developers to
+ directly add the retrieved documents and their metadata into the prompt generation.
-## Effective prompts and templates
+### Effective prompts and templates
Effective prompt templates guide LLMs to generate responses that meet specific
user needs or objectives in generative AI applications. Define an objective
@@ -43,7 +48,7 @@ Reach out to support if you want to modify the default prompt that Vectara
uses.
:::
-## Prompt template design
+### Prompt template design
Prompt template design includes a specific a `role` and `content` about this role,
which provide context about how you want the role to behave and the kind of
information that you want to retrieve. These values can also specify [variables
@@ -189,3 +194,22 @@ user gets a response that `The returned results did not contain sufficient infor
}
]`}]} title="Code Example" layout="stacked" />
+## Agent tool velocity templates
+
+In addition to query prompts, Velocity templates can be used to dynamically
+describe agent tools at runtime. Unlike query templates which work with search
+results, agent tool templates reference agent and session context.
+
+Agent tools support the following Velocity variables:
+
+* `$agent.name` - Agent name
+* `$agent.metadata` - Agent metadata map
+* `$session.key` - Session key
+* `$session.metadata` - Session metadata map
+* `$currentDate` - Current date/time in ISO 8601 format (e.g., "2025-10-24T15:30:45Z")
+
+**Examples:**
+* `Search tool configured for agent $agent.name` on $currentDate`
+* `Search tool configured on $currentDate for agent $agent.name`
+* `#if($session.metadata.department) Search $session.metadata.department documents#else Search all documents#end for $agent.name`
+
diff --git a/www/docs/quick-starts.mdx b/www/docs/quick-starts.mdx
index 54b661175..6816968cb 100644
--- a/www/docs/quick-starts.mdx
+++ b/www/docs/quick-starts.mdx
@@ -24,7 +24,7 @@ Get started with Vectara in minutes. Choose the path that best fits your needs.
-
+
Build AI agents that can search your data, use tools, and have intelligent conversations with your users.
diff --git a/www/docs/release-notes.mdx b/www/docs/release-notes.mdx
index 44a9ae6cd..e3d37653a 100644
--- a/www/docs/release-notes.mdx
+++ b/www/docs/release-notes.mdx
@@ -20,6 +20,49 @@ and how these product and documentation changes can benefit your enterprise.
---
+## Sub-agents: Autonomous, Specialized Agents Inside Your Agents
+
+_November 18, 2025_
+
+Vectara introduces sub-agents, a powerful new capability that lets your agents
+initialize dedicated, autonomous agent instances to handle additional, multi-step
+tasks. They accomplish all of this while keeping their context isolated from the
+parent agent conversation. Invoke autonomous agents for focused tasks such as
+code review, research, or content transformation.
+
+**Why it matters:** Advanced sessions often overwhelm an agent and cause context
+bloat. Sub-agents solve this issue by providing a separation from the primary agent.
+Your parent agent stays focused while delegating work to highly specialized
+sub-agents that maintain an independent state, reasoning, and workflow.
+
+**More information:**
+
+* [Agent tools overview](/docs/agent-os/agent-tools-overview)
+* [Sub-agents](/docs/agent-os/subagents)
+
+---
+
+## Document Conversion Tool for Agents
+
+_November 16, 2025_
+
+Vectara introduces the Document Conversion Tool, a new standalone agent tool
+that extracts content from uploaded files and converts them into clean,
+structured Markdown format. These files include PDFs, Word documents,
+PowerPoint presentations, and images. Converted outputs persist across a
+session.
+
+**Why it matters:** Previously, converting uploaded files into readable text
+required external preprocessing. This tool brings document parsing directly into
+agent sessions, enabling agents to interpret file types and transform them
+into context-ready text for reasoning, summarization, or indexing.
+
+**More information:**
+[Agent tools overview](/docs/agent-os/agent-tools-overview)
+[Document upload and conversion](docs/agent-os/sessions#document-upload-and-conversion)
+
+---
+
## Web Search Tool Enhanced with Domain filtering
_November 14, 2025_
@@ -33,7 +76,7 @@ and relevance. You can now constrain web search behavior to trusted domains or r
undesirable, or low-value sources.
**More information:**
-[Agent tools overview](/docs/agent-os/agent-tools-overview)
+[Agent tools overview](/docs/agents/agent-tools-overview)
---
@@ -61,7 +104,7 @@ governance.
* [List Tools](/docs/rest-api/get-tool)
More information:
-* [Lambda Tools](/docs/agent-os/lambda-tools)
+* [Lambda Tools](/docs/agents/lambda-tools)
---
@@ -104,7 +147,7 @@ The Vectara Agent APIs introduce several new endpoints:
* [Session Management](/docs/rest-api/agent-sessions)
**More information:**
-* [Agents](/docs/agent-os/agent-platform-overview)
+* [Agents](/docs/agents/agent-platform-overview)
:::caution
diff --git a/www/docs/rest-api/create-agent-session.api.mdx b/www/docs/rest-api/create-agent-session.api.mdx
index 0cfef4ee0..58ee665b5 100644
--- a/www/docs/rest-api/create-agent-session.api.mdx
+++ b/www/docs/rest-api/create-agent-session.api.mdx
@@ -40,7 +40,7 @@ Create a new session for interacting with an agent. A session is the conversatio
This endpoint initializes the session and enables you to configure its initial properties, including optional metadata. Metadata can influence agent behavior, personalize responses, or apply access controls. Instructions and tools can also reference metadata using `${\session.metadata.field}` or `$\ref` syntax.
-A session also serves as the workspace for artifacts, enabling file uploads and multi-step workflows. For more information, see [Working with artifacts in sessions](https://docs.vectara.com/docs/agent-os/sessions#working-with-artifacts-in-sessions).
+A session also serves as the workspace for artifacts, enabling file uploads and multi-step workflows. For more information, see [Working with artifacts in sessions](https://docs.vectara.com/docs/agents/sessions#working-with-artifacts-in-sessions).
## Example request
diff --git a/www/docs/search-and-retrieval/fuzzy-metadata-search.md b/www/docs/search-and-retrieval/fuzzy-metadata-search.md
index f9423e335..6e0618f58 100644
--- a/www/docs/search-and-retrieval/fuzzy-metadata-search.md
+++ b/www/docs/search-and-retrieval/fuzzy-metadata-search.md
@@ -8,7 +8,8 @@ import CodePanel from '@site/src/theme/CodePanel';
The tech preview of Fuzzy Metadata Search combines exact filtering with
approximate matching. This approach is useful because metadata can have
-inconsistencies in typos in titles, categories, or keywords.
+inconsistencies in typos in titles, categories, or keywords. To try this
+fuzzy metadata search, see the [API Reference](/docs/rest-api/query-metadata).
Fuzzy search operates in two main steps:
1. **Exact filtering:** A `metadata_filter` is first applied to narrow results
@@ -19,7 +20,7 @@ Fuzzy search operates in two main steps:
weighting. This means you can give `title` a higher weight than `category`.
The final result is a ranked list that helps users find what they _mean_, even
-if they did not type the metadata value exactly.
+if they did not type the metadata value exactly.
:::tip
Use `document` level metadata when you want unique documents. Use `part` level
@@ -116,57 +117,3 @@ Adjust field weights to control search relevance:
}]} title="Document-Level Response" layout="stacked" />
-## Filter syntax
-
-`metadata_filter` uses Vectara’s metadata filter expression syntax. Prefix every field with its scope: `doc.` (document-level) or `part.` (part-level).
-
-
-## Supported operators
-
-* Arithmetic: `+ - * / %`
-* Comparisons: `< <= > >= = == != <>`
-* Null tests: `IS NULL`, `IS NOT NULL`
-* Membership: `IN (...)`
-* Logical: `NOT`, `AND`, `OR`
-
-
-## Examples
-
-* `doc.status = 'Active'`
-* `doc.pageCount > 10`
-* `doc.publish_date >= '2025-08-01'`
-* `doc.category IN ('contract', 'policy')`
-* `doc.status = 'Active' AND part.clause_type = 'Liability'`
-
-The filter language does **not** support SQL `LIKE`. Use fuzzy `queries` to handle approximate text.
-
-### Weighted multi‑field search
-
-
-
-### Exact filtering plus fuzzy ranking
-
-
-
-### Part‑level search
-
-
-
diff --git a/www/docs/use-case-exploration.md b/www/docs/use-case-exploration.md
index 52ebc305f..1dcb71176 100644
--- a/www/docs/use-case-exploration.md
+++ b/www/docs/use-case-exploration.md
@@ -17,7 +17,7 @@ maintains enterprise-grade security, and never trains on customer content.
## Conversational AI and virtual assistants
-Build intelligent [conversational experiences](/docs/agent-os/conversational-ai) that understand context and provide accurate responses:
+Build intelligent [conversational experiences](/docs/agents/conversational-ai) that understand context and provide accurate responses:
- **Customer service virtual assistants**: Deploy 24/7 self-service assistants,
chat bots, or help desk agents.
diff --git a/www/docs/welcome.mdx b/www/docs/welcome.mdx
index f95e7531d..f96992d0a 100644
--- a/www/docs/welcome.mdx
+++ b/www/docs/welcome.mdx
@@ -57,7 +57,7 @@ components.
- Complete the [**developer quickstart**](developer-quickstart) and use Vectara to
ground answers in your data in a few minutes.
-- Build your [first agent](/docs/agent-os/agents-quickstart).
+- Build your [first agent](/docs/agents/agents-quickstart).
- Try the [**Vectara REST APIs**](/docs/rest-api) directly in your
browser.
- View [**API quick start**](/docs/api-recipes) to upload a file and query
diff --git a/www/sidebars.ts b/www/sidebars.ts
index a7f18365c..0e04c76a0 100644
--- a/www/sidebars.ts
+++ b/www/sidebars.ts
@@ -63,23 +63,22 @@ const sidebars: SidebarsConfig = {
{
type: "category",
label: "Agents",
- link: {
- type: 'doc',
- id: 'agent-os/agent-platform-overview',
- },
collapsible: false,
items: [
- "agent-os/agents-quickstart",
- "agent-os/instructions",
- "agent-os/sessions",
+ "agents/agents-quickstart",
+ "agents/agent-platform-overview",
+ "agents/instructions",
+ "agents/sessions",
{
type: "category",
- label: "Agent tools",
+ label: "Tools",
items: [
- "agent-os/agent-tools-overview",
- "agent-os/lambda-tools",
- // "agent-os/structured-indexing-tool",
- // "agent-os/subagent-tool",
+ "agents/agent-tools",
+ "agents/subagents",
+ "agents/custom-tools",
+ "agents/lambda-tools",
+ "agents/model-context-protocol",
+ // "agents/structured-indexing-tool",
],
},
"search-and-retrieval/bring-your-own-llm",
@@ -231,8 +230,882 @@ const sidebars: SidebarsConfig = {
slug: "/rest-api",
},
items: [
- apiSidebar,
+ {
+ type: "doc",
+ id: "rest-api/vectara-rest-api-v-2",
+ },
"vectara-postman-collection",
+ {
+ type: "category",
+ label: "Agents",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "CRUD",
+ link: {
+ type: "doc",
+ id: "rest-api/agents",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-agent",
+ label: "Create agent",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-agents",
+ label: "List agents",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-agent",
+ label: "Get agent",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-agent",
+ label: "Update agent",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/replace-agent",
+ label: "Replace agent",
+ className: "api-method put",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-agent",
+ label: "Delete agent",
+ className: "api-method delete",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Agent sessions",
+ link: {
+ type: "doc",
+ id: "rest-api/agent-sessions",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-agent-session",
+ label: "Create agent session",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-agent-sessions",
+ label: "List agent sessions",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-agent-session",
+ label: "Get agent session",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-agent-session",
+ label: "Update agent session",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-agent-session",
+ label: "Delete agent session",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/create-agent-input",
+ label: "Interact with an agent",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-agent-events",
+ label: "List events in agent session",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-agent-event",
+ label: "Get event in agent session",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-session-artifacts",
+ label: "List session artifacts",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-session-artifact",
+ label: "Get session artifact",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Instructions",
+ link: {
+ type: "doc",
+ id: "rest-api/instructions",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-instruction",
+ label: "Create instruction",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-instructions",
+ label: "List instructions",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-instruction",
+ label: "Get instruction",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-instruction",
+ label: "Update instruction",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-instruction",
+ label: "Delete instruction",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/test-instruction",
+ label: "Test instruction",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-instruction-version",
+ label: "Delete instruction version",
+ className: "api-method delete",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Tools",
+ link: {
+ type: "doc",
+ id: "rest-api/tools",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-tool",
+ label: "Create tool",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-tools",
+ label: "List tools",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/test-lambda-tool-without-creation",
+ label: "Test Lambda tool without creation",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-tool",
+ label: "Get tool",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-tool",
+ label: "Update tool",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-tool",
+ label: "Delete tool",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/test-tool",
+ label: "Test Lambda tool",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Tool servers",
+ link: {
+ type: "doc",
+ id: "rest-api/tool-servers",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-tool-servers",
+ label: "List tool servers",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/create-tool-server",
+ label: "Create tool server",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-tool-server",
+ label: "Get tool Server",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-tool-server",
+ label: "Update tool server",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-tool-server",
+ label: "Delete tool server",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/sync-tool-server",
+ label: "Synchronize tool server",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ "type": "category",
+ "label": "Examples",
+ "items": [
+ "agents/create-agent-examples",
+ "agents/create-a-lambda-tool",
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Data",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Corpora",
+ link: {
+ type: "doc",
+ id: "rest-api/corpora",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-corpus",
+ label: "Create a corpus",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-corpora",
+ label: "List corpora",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-corpus",
+ label: "Delete a corpus and all its data",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-corpus",
+ label: "Update a corpus",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/reset-corpus",
+ label: "Remove all documents and data in a corpus",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/replace-filter-attributes",
+ label: "Replace the filter attributes of a corpus",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-corpus",
+ label: "Retrieve info about a corpus",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Metadata",
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/get-filter-attribute-stats",
+ label: "Get filter attribute statistics for corpus metadata",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Documents",
+ link: {
+ type: "doc",
+ id: "rest-api/documents",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-corpus-documents",
+ label: "List the documents in the corpus",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-corpus-document",
+ label: "Delete a document",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-corpus-document",
+ label: "Retrieve a document",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/summarize-corpus-document",
+ label: "Summarize a document",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-image",
+ label: "Retrieve an image from a document",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Upload",
+ link: {
+ type: "doc",
+ id: "rest-api/upload",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/upload-file",
+ label: "Upload a file to the corpus",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Index",
+ link: {
+ type: "doc",
+ id: "rest-api/index",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-corpus-document",
+ label: "Add a document to a corpus",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-corpus-document",
+ label: "Update document, merging the metadata.",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/replace-corpus-document-metadata",
+ label: "Replace the document metadata.",
+ className: "api-method put",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Search and retrieval",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Queries",
+ link: {
+ type: "doc",
+ id: "rest-api/queries",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/search-corpus",
+ label: "Simple Single Corpus Query",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/query-corpus",
+ label: "Advanced Single Corpus Query",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/query",
+ label: "Multiple Corpora Query",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Metadata query",
+ link: {
+ type: "doc",
+ id: "rest-api/metadata-query",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/query-metadata",
+ label: "Query across metadata fields in a corpus",
+ className: "api-method post",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Access control",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Users",
+ link: {
+ type: "doc",
+ id: "rest-api/users",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-user",
+ label: "Create a user in the current customer account",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-users",
+ label: "List users in the account",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-user",
+ label: "Get a user",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-user",
+ label: "Update a user",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-user",
+ label: "Delete a user",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "rest-api/reset-user-password",
+ label: "Reset the password for a user",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Authentication",
+ link: {
+ type: "doc",
+ id: "rest-api/authentication",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/get-o-auth-token",
+ label: "Request an access token",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "API keys",
+ link: {
+ type: "doc",
+ id: "rest-api/api-keys",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-api-key",
+ label: "Create an API key",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-api-keys",
+ label: "List API keys",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-api-key",
+ label: "Get an API key",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-api-key",
+ label: "Update an API key",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-api-key",
+ label: "Delete an API key",
+ className: "api-method delete",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Application clients",
+ link: {
+ type: "doc",
+ id: "rest-api/application-clients",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-app-client",
+ label: "Create an App Client",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-app-client",
+ label: "List App Clients",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-app-client",
+ label: "Get an App Client",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/update-app-client",
+ label: "Update an App Client",
+ className: "api-method patch",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-app-client",
+ label: "Delete an App Client",
+ className: "api-method delete",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Analytics",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Corpus statistics",
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/compute-corpus-size",
+ label: "Compute the current size of a corpus",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Query history",
+ link: {
+ type: "doc",
+ id: "rest-api/query-history",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/get-query-history",
+ label: "Get a query history",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-query-histories",
+ label: "List the history of previous queries",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Jobs",
+ link: {
+ type: "doc",
+ id: "rest-api/jobs",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-jobs",
+ label: "List jobs",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-job",
+ label: "Get a job by ID",
+ className: "api-method get",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Platform",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Large language models",
+ link: {
+ type: "doc",
+ id: "rest-api/large-language-models",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-llm",
+ label: "Create an LLM",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-ll-ms",
+ label: "List LLMs",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/get-llm",
+ label: "Get an LLM",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/delete-llm",
+ label: "Delete an LLM",
+ className: "api-method delete",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Encoders",
+ link: {
+ type: "doc",
+ id: "rest-api/encoders",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-encoder",
+ label: "Create an encoder",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "rest-api/list-encoders",
+ label: "List encoders",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Generation presets",
+ link: {
+ type: "doc",
+ id: "rest-api/generation-presets",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-generation-presets",
+ label: "List generation presets",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Rerankers",
+ link: {
+ type: "doc",
+ id: "rest-api/rerankers",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-rerankers",
+ label: "List rerankers",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Table extractors",
+ link: {
+ type: "doc",
+ id: "rest-api/table-extractors",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-table-extractors",
+ label: "List supported table extractors",
+ className: "api-method get",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Quality and evaluation",
+ collapsed: false,
+ items: [
+ {
+ type: "category",
+ label: "Factual consistency evaluation",
+ link: {
+ type: "doc",
+ id: "rest-api/factual-consistency-evaluation",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/evaluate-factual-consistency",
+ label: "Evaluate factual consistency",
+ className: "api-method post",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "Hallucination correctors",
+ link: {
+ type: "doc",
+ id: "rest-api/hallucination-correctors",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/list-hallucination-correctors",
+ label: "List hallucination correctors",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "rest-api/correct-hallucinations",
+ label: "Corrects hallucinations in generated text based on source documents",
+ className: "api-method post",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "LLM chat completions",
+ link: {
+ type: "doc",
+ id: "rest-api/llm-chat-completions",
+ },
+ items: [
+ {
+ type: "doc",
+ id: "rest-api/create-chat-completion",
+ label: "Creates a model response for the given chat conversation",
+ className: "api-method post",
+ },
+ ],
+ },
],
},
],
diff --git a/www/static/_redirects b/www/static/_redirects
index 0a69eef20..671c4777a 100644
--- a/www/static/_redirects
+++ b/www/static/_redirects
@@ -66,4 +66,5 @@
/docs/learn/query-observability /docs/hallucination-and-evaluation/query-observability
/docs/learn/hallucination-evaluation /docs/hallucination-and-evaluation/hallucination-evaluation
/docs/learn/vectara-hallucination-corrector /docs/hallucination-and-evaluation/vectara-hallucination-corrector
-/docs/build-apps/vectara-answer /docs/search-and-retrieval/vectara-answer
\ No newline at end of file
+/docs/build-apps/vectara-answer /docs/search-and-retrieval/vectara-answer
+/docs/agent-os/* /docs/agents/:splat
\ No newline at end of file
diff --git a/www/static/img/add-first-tool.png b/www/static/img/add-first-tool.png
new file mode 100644
index 0000000000000000000000000000000000000000..55de2d40d6c660b9ab2ce4b40618fb7024a8fb35
GIT binary patch
literal 60082
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