> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quraite.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Agents

## What is an Agent?

An `Agent` is your LLM-based conversational system.

The `Agent` must be running on an Agent API endpoint that is used to invoke the `Agent` during evaluation.

### Agent API Specification

<Accordion title="Request">
  <ParamField body="user_message" type="object" required>
    UserMessage object.

    <Expandable title="UserMessage properties">
      <ParamField body="role" type="string" default="user">
        The role of the message sender. Always "user".
      </ParamField>

      <ParamField body="name" type="string">
        Optional name identifier for the user.
      </ParamField>

      <ParamField body="content" type="object[]" required>
        List of message content items.

        <Expandable title="MessageContentText properties">
          <ParamField body="type" type="string" default="text" required>
            The content type. Always "text".
          </ParamField>

          <ParamField body="text" type="string" required>
            The text content.
          </ParamField>
        </Expandable>
      </ParamField>
    </Expandable>
  </ParamField>

  <ParamField body="session_id" type="string">
    Optional conversation thread identifier.
  </ParamField>

  <Accordion title="Example">
    ```json theme={null}
    {
      "user_message": {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "What is 1 + 1 + 2?"
          }
        ]
      },
      "session_id": "123e4567-e89b-12d3-a456-426614174000"
    }
    ```
  </Accordion>
</Accordion>

<Accordion title="Response">
  <ResponseField name="agent_trajectory" type="AgentMessage[]">
    List of messages in the agent's execution trajectory. Each item is one of: UserMessage, DeveloperMessage, SystemMessage, AssistantMessage, or ToolMessage.

    <Expandable title="UserMessage">
      <ResponseField name="role" type="string" default="user">
        Always "user".
      </ResponseField>

      <ResponseField name="name" type="string">
        Optional name identifier.
      </ResponseField>

      <ResponseField name="content" type="MessageContentText[]" required>
        <Expandable title="MessageContentText">
          <ResponseField name="type" type="string" default="text">Always "text".</ResponseField>
          <ResponseField name="text" type="string" required>The text content.</ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>

    <Expandable title="SystemMessage">
      <ResponseField name="role" type="string" default="system">Always "system".</ResponseField>
      <ResponseField name="content" type="MessageContentText[]" required>List of text content items.</ResponseField>

      <Expandable title="MessageContentText">
        <ResponseField name="type" type="string" default="text" required>Always "text".</ResponseField>
        <ResponseField name="text" type="string" required>The text content.</ResponseField>
      </Expandable>
    </Expandable>

    <Expandable title="AssistantMessage" required>
      <ResponseField name="role" type="string" default="assistant" required>Always "assistant".</ResponseField>
      <ResponseField name="agent_name" type="string">Optional agent name.</ResponseField>

      <ResponseField name="content" type="object[]" required>
        <Expandable title="Content (text or reasoning)">
          <ResponseField name="type" type="string" required>"text" or "reasoning".</ResponseField>
          <ResponseField name="text" type="string">Text content.</ResponseField>
          <ResponseField name="reasoning" type="string">Reasoning content.</ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="tool_calls" type="ToolCall[]">
        <Expandable title="ToolCall">
          <ResponseField name="id" type="string" required>Tool call ID.</ResponseField>
          <ResponseField name="name" type="string" required>Tool name.</ResponseField>
          <ResponseField name="arguments" type="object" required>Tool arguments.</ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="metadata" type="AssistantMessageMetadata">
        <Expandable title="Metadata">
          <ResponseField name="tokens" type="TokenInfo">input\_tokens, output\_tokens (integers).</ResponseField>
          <ResponseField name="cost" type="CostInfo">input\_cost, output\_cost (floats).</ResponseField>
          <ResponseField name="latency" type="LatencyInfo">start\_time, end\_time (floats).</ResponseField>
          <ResponseField name="model_info" type="ModelInfo">model\_name, model\_provider (strings).</ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>

    <Expandable title="ToolMessage">
      <ResponseField name="role" type="string" default="tool">Always "tool".</ResponseField>
      <ResponseField name="tool_name" type="string">Name of the tool called.</ResponseField>
      <ResponseField name="tool_call_id" type="string">Corresponding tool call ID.</ResponseField>
      <ResponseField name="content" type="MessageContentText[]" required>List of text content items.</ResponseField>

      <Expandable title="MessageContentText">
        <ResponseField name="type" type="string" default="text" required>Always "text".</ResponseField>
        <ResponseField name="text" type="string" required>The text content.</ResponseField>
      </Expandable>

      <ResponseField name="metadata" type="ToolMessageMetadata">
        <Expandable title="Metadata">
          <ResponseField name="latency" type="LatencyInfo">start\_time, end\_time (floats).</ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>

  <Accordion title="Example">
    ```json theme={null}
    {
        "agent_response": {
            "agent_trajectory": [
                {
                    "role": "assistant",
                    "agent_name": null,
                    "content": null,
                    "tool_calls": [
                        {
                            "id": "339c882b-cdee-4c52-8f74-48acde0a879f",
                            "name": "add",
                            "arguments": {
                                "b": 1,
                                "a": 1
                            }
                        }
                    ],
                    "metadata": {
                        "tokens": {
                            "input_tokens": 207,
                            "output_tokens": 68
                        },
                        "cost": {
                            "input_cost": 0.0,
                            "output_cost": 0.0
                        },
                        "latency": {
                            "start_time": 1.7691640138092388e+18,
                            "end_time": 1.7691640146507999e+18
                        },
                        "model_info": {
                            "model_name": "gemini-2.5-flash",
                            "model_provider": "google"
                        }
                    }
                },
                {
                    "role": "tool",
                    "tool_name": "add",
                    "tool_call_id": null,
                    "content": [
                        {
                            "type": "text",
                            "text": "2.0"
                        }
                    ],
                    "metadata": {
                        "latency": {
                            "start_time": 1.769164014657284e+18,
                            "end_time": 1.7691640146585761e+18
                        }
                    }
                },
                {
                    "role": "assistant",
                    "agent_name": null,
                    "content": null,
                    "tool_calls": [
                        {
                            "id": "938665a5-507a-46a3-a00b-90a2583fa877",
                            "name": "add",
                            "arguments": {
                                "a": 2,
                                "b": 2
                            }
                        }
                    ],
                    "metadata": {
                        "tokens": {
                            "input_tokens": 238,
                            "output_tokens": 50
                        },
                        "cost": {
                            "input_cost": 0.0,
                            "output_cost": 0.0
                        },
                        "latency": {
                            "start_time": 1.76916401468033e+18,
                            "end_time": 1.769164015288768e+18
                        },
                        "model_info": {
                            "model_name": "gemini-2.5-flash",
                            "model_provider": "google"
                        }
                    }
                },
                {
                    "role": "tool",
                    "tool_name": "add",
                    "tool_call_id": null,
                    "content": [
                        {
                            "type": "text",
                            "text": "4.0"
                        }
                    ],
                    "metadata": {
                        "latency": {
                            "start_time": 1.769164015294827e+18,
                            "end_time": 1.769164015296263e+18
                        }
                    }
                },
                {
                    "role": "assistant",
                    "agent_name": null,
                    "content": [
                        {
                            "type": "text",
                            "text": "The answer is 4."
                        }
                    ],
                    "tool_calls": null,
                    "metadata": {
                        "tokens": {
                            "input_tokens": 269,
                            "output_tokens": 56
                        },
                        "cost": {
                            "input_cost": 0.0,
                            "output_cost": 0.0
                        },
                        "latency": {
                            "start_time": 1.769164015315155e+18,
                            "end_time": 1.769164015970651e+18
                        },
                        "model_info": {
                            "model_name": "gemini-2.5-flash",
                            "model_provider": "google"
                        }
                    }
                }
            ]
        }
    }
    ```
  </Accordion>
</Accordion>

<Note>
  Use our Python SDK's built-in adapters to connect popular agent frameworks to Quraite. Each adapter conforms to the Agent API specification.
</Note>

<Info>
  Trace vs Trajectory

  * A **trajectory** captures internal agent steps such as LLM invocations, tool calls, and reasoning at every turn.
  * A **trace** is usually an OpenTelemetry (OTel) trace that captures tokens and latency along with the trajectory.
</Info>

## Regiser Agent in Quraite

<Steps>
  <Step title="Navigate to Projects page">
    In the Quraite dashboard, navigate to the project you want to register the agent in.
  </Step>

  <Step title="Navigate to Agents page">
    Click on the **Agents** in the left sidebar.
  </Step>

  <Step title="Create agent">
    Click **+ New Agent** and enter the following details:

    * **Agent Name** - `e.g. Customer Support Agent`
    * **Description** (Optional)
    * **Agent URL** - Paste the Agent API endpoint URL

    Click **Create Agent**.
  </Step>
</Steps>
