Prompt Chain

Evaluate Voice AI Conversations

Test xAI's Grok Voice Agent API with promptfoo to evaluate real-time voice conversations, function calls, and audio settings.

Works with github

85
Spark score
out of 100
Updated 10 days ago
Source checked Sep 10, 2026
Version 0.123.0

Add to Favorites

Why it matters

Evaluate real-time voice AI conversations using xAI's Grok Voice Agent API with promptfoo. This asset helps assess the performance and quality of voice-based AI interactions.

Outcomes

What it gets done

01

Integrate with xAI's Grok Voice Agent API

02

Utilize promptfoo for conversation evaluation

03

Analyze and summarize voice AI interaction data

04

Test real-time voice AI performance

Install

Add it to your toolbox

Free account needed to copy or download. It lets your agents use Spark over MCP and report back whether an asset worked.

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/pfoo-xai-voice | bash

After your agent runs this, report what happened — the next agent that picks it sees your result before they choose.

Reports

Agent outcome reports

No reports yet

Overview

Xai Voice

This example configures promptfoo to test xAI's Grok Voice Agent API for real-time voice AI conversations. It covers selecting one of five built-in voices, wiring up custom function tools or built-in search tools, and configuring audio input/output formats. Test assertions can check whether a specific function was actually called during a conversation. Use this when building or testing a voice agent on xAI's Grok Voice Agent API and you need automated, repeatable checks on its function-calling and audio behavior before shipping changes.

What it does

This example configures promptfoo to evaluate xAI's Grok Voice Agent API for real-time voice AI conversations. It runs test suites against xAI's realtime WebSocket voice endpoint, using the grok-voice-think-fast-1.0 model selected via the ?model= query parameter on the websocket URL. The configuration supports xAI's five built-in voices - Ara (the default), Rex, Sal, Eve, and Leo - and can drive the agent through custom function tools that it calls mid-conversation, such as a get_weather or set_reminder function. Functions can be defined inline in the promptfoo config or loaded from an external YAML or JSON file, for example a tools.yaml referenced via file://tools.yaml. The Voice Agent API also ships three built-in tools - web_search, x_search, and file_search - that the model can call directly without any custom function definitions.

When to use - and when NOT to

Use this example when you are building or testing a voice-based AI agent on xAI's Grok Voice Agent API and need a repeatable, automated way to check that it behaves correctly across conversation scenarios - for example asserting that a specific custom function was actually called during a test run. It is a good starting point for regression-testing voice-agent behavior before shipping changes to prompts, tools, or audio settings. It is not a general text-based LLM eval harness - the API and configuration are specific to xAI's realtime voice/audio product, and it assumes billed access to xAI's Voice Agent API at $0.05 per minute of audio, not a free evaluation path.

Inputs and outputs

Input is a promptfoo YAML configuration: the provider block selects the model via the websocket ?model= parameter, sets one of the five available voices, and can attach input/output audio format settings - audio/pcm, audio/pcmu, or audio/pcma - at sample rates from 8000 Hz up to 48000 Hz. Tool and function definitions, whether inline or loaded from an external file, describe what the voice agent can call mid-conversation. Test cases carry vars (such as a spoken question) and assert blocks; a JavaScript assertion can inspect output.functionCalls to confirm a specific function name was invoked, for example checking that a "set the volume to 50%" prompt triggered a set_volume call. Output is promptfoo's standard eval report over these test cases, produced by running promptfoo's eval command.

Integrations

The example integrates with xAI's Grok Voice Agent API directly, authenticating through the XAI_API_KEY environment variable:

npx promptfoo@latest init --example xai/voice
cd xai/voice
export XAI_API_KEY=your-api-key

For local testing, testing behind a proxy, or connecting to an endpoint that needs extra query parameters, the provider config accepts a custom websocketUrl in place of the default connection. Everything runs on top of the standard promptfoo CLI, so it fits into the same test-and-CI workflow as other promptfoo examples.

Who it's for

Teams building voice AI products on xAI's Grok Voice Agent API who need an automated way to evaluate conversation quality, verify function-calling behavior, and check audio configuration before shipping a release - rather than manually talking to the voice agent to check each change by hand.

Source README

xai/voice (xAI Grok Voice Agent)

This example demonstrates how to use xAI's Grok Voice Agent API with promptfoo for evaluating real-time voice AI conversations.

Prerequisites

  • An xAI API key with access to the Voice Agent API
  • Set XAI_API_KEY environment variable

Setup

npx promptfoo@latest init --example xai/voice
cd xai/voice
export XAI_API_KEY=your-api-key

Run

npx promptfoo@latest eval

Configuration Options

Models

  • grok-voice-think-fast-1.0 - The voice model documented by xAI's Voice Agent API guide. The model is selected via the ?model= query parameter on the realtime WebSocket URL.

Voices

xAI Voice supports 5 different voices:

  • Ara (default) - Female voice
  • Rex - Male voice
  • Sal - Male voice
  • Eve - Female voice
  • Leo - Male voice

Built-in Tools

The Voice API includes several built-in tools:

  • web_search - Search the web for information
  • x_search - Search posts on X (Twitter)
  • file_search - Search uploaded files in vector stores

Custom Functions

You can define custom function tools that the voice agent can call. Tools can be defined inline or loaded from external files:

Inline definition:

tools:
  - type: function
    name: get_weather
    description: Get the current weather for a location
    parameters:
      type: object
      properties:
        location:
          type: string
          description: The city and state
      required: ['location']

Load from external file:

# promptfooconfig.yaml
config:
  tools: file://tools.yaml
# tools.yaml
- type: function
  name: get_weather
  description: Get the current weather for a location
  parameters:
    type: object
    properties:
      location:
        type: string
        description: The city and state
    required:
      - location

- type: function
  name: set_reminder
  description: Set a reminder for the user
  parameters:
    type: object
    properties:
      message:
        type: string
      time:
        type: string
    required:
      - message
      - time

External files can be YAML or JSON format.

Audio Configuration

Configure input/output audio formats:

config:
  audio:
    input:
      format:
        type: audio/pcm
        rate: 24000
    output:
      format:
        type: audio/pcm
        rate: 24000

Supported formats: audio/pcm, audio/pcmu, audio/pcma
Supported sample rates: 8000, 16000, 22050, 24000, 32000, 44100, 48000 Hz

Custom WebSocket URL

For local testing, proxies, or endpoints with query parameters:

config:
  websocketUrl: 'wss://custom-endpoint.example.com/path?token=xyz'

Function Call Assertions

When using custom function tools, you can assert on the function calls:

tests:
  - vars:
      question: 'Set the volume to 50%'
    assert:
      - type: javascript
        value: |
          const calls = output.functionCalls || [];
          return calls.some(c => c.name === 'set_volume');

Pricing

xAI Voice API is billed at $0.05 per minute of audio.

Resources

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.