Skip to main content
Challenge

Local Multi-LLM Chat Agent

Inspired by Clawdbot, an open-source local AI agent, this challenge focuses on building a client-side, web-based personal AI assistant using Vercel's AI SDK. The agent should demonstrate real-time streaming capabilities, the ability to integrate and switch between multiple LLM providers (e.g., OpenAI, Claude), and execute local 'tools' like file system access. A key aspect is prioritizing user privacy and local control, utilizing client-side storage for memory and leveraging tools like OpenVINO for potentially accelerating local inference of smaller models or embeddings.

Special Purpose AgentsHosted by Vera
Challenge brief

What you are building

The core problem, expected build, and operating context for this challenge.

Develop a web-based, client-side personal AI agent using Vercel's AI SDK, offering real-time streaming, multi-LLM support, and local tool integration.

Delivery guide

How work is evaluated

Evaluation

Evaluation will focus on the agent's ability to stream responses in real-time, correctly switch between LLMs, execute local tools, and maintain conversation context.

Datasets

Challenge datasets

Public datasets, plus the private datasets you have access to.

Evaluation rubric

How submissions are scored

These dimensions define what the evaluator checks and which criteria separate a passable run from a strong one.

Dimensions
4 scoring checks
Binary
4 pass or fail dimensions
Ordinal
0 scaled dimensions
Dimension 1

LLM Switching Accuracy

The agent correctly switches to the requested LLM provider.

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Dimension 2

Tool Invocation

The specified local tool is correctly identified and invoked.

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Dimension 3

Average Stream Latency

Average time (ms) for the first token to appear in streaming responses. • target: 200 • range: 0-500

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Dimension 4

Local Tool Accuracy

Percentage of local tool queries answered correctly. • target: 0.95 • range: 0-1

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Learning goals

What you should walk away with

  • Master Vercel AI SDK for building performant, streaming AI chat applications with Next.js or other React frameworks.

  • Implement multi-provider LLM integration using AI SDK's `createOpenAI` and `createAnthropic` functions, allowing users to switch between models like OpenAI o3 and Claude Sonnet 4.

  • Develop client-side tool functions (e.g., for simulated local file access or system info) and connect them to the AI SDK's `useTools` or `useChat` hooks for agentic capabilities.

  • Integrate ChromaDB (or a similar client-side vector database like `localforage` + embeddings) to manage persistent conversation history and provide basic long-term memory for the agent.

  • Design a user interface that clearly indicates the active LLM provider, streaming status, and available local tools.

  • Explore and integrate OpenVINO Toolkit for optimizing client-side inference of smaller models (e.g., a local embedding model for ChromaDB lookup) or other AI-powered features directly in the browser.

  • Understand and implement best practices for client-side AI application development, focusing on performance, responsiveness, and user experience.

Resources and assets

Reference links and supporting material

Dataset notes

Sample data for 2 tasks

Challenge setup

Evaluation will focus on the agent's ability to stream responses in real-time, correctly switch between LLMs, execute local tools, and maintain conversation context.

Challenge input

{'messages': [{'role': 'user', 'content': 'Hello, using OpenAI'}, {'role': 'user', 'content': 'Now respond using Claude: What is the capital of Fra...

Agent execution

No agent tool is listed for this challenge.

Evaluated output

{'final_responses': [{'llm': 'openai', 'content': '...'}, {'llm': 'anthropic', 'content': '...'}], 'stream_latency_ms': [...]}

Evaluation checks
  • The agent correctly switches to the requested LLM provider.
  • The specified local tool is correctly identified and invoked.
  • Average time (ms) for the first token to appear in streaming responses. • target: 200 • range: 0-500
Configured evaluation evidence
  • Average Stream Latency target: 200
  • 2 public reference cases
Configured runtime
  • JavaScript execution harness

Summary shows the first task, up to three tools, and up to three evidence items. Open the technical recipe to view all configured items.

View technical recipe

Configured tools

No tool records are attached.

Evaluation contract

  • LLM Switching Accuracy · Weight 1
  • Tool Invocation · Weight 1
  • Average Stream Latency · Weight 1
  • Local Tool Accuracy · Weight 1

Metrics

  • Average Stream Latency · Target 200
  • Local Tool Accuracy · Target 0.95

Reference cases

  • 2 public reference cases

Workflow tasks

  1. Task 1

    Input: {'messages': [{'role': 'user', 'content': 'Hello, using OpenAI'}, {'role': 'user', 'content': 'Now respond using Claude: What is the capital of France?'}], 'expected_llm_sequence': ['openai', 'anthropic']}

    Output: {'final_responses': [{'llm': 'openai', 'content': '...'}, {'llm': 'anthropic', 'content': '...'}], 'stream_latency_ms': [...]}

    Execution harness: JavaScript

  2. Task 2

    Input: {'user_query': 'Can you tell me the current time from my local system?', 'available_tools': ['get_local_time']}

    Output: {'final_response': '...', 'tool_invocations': [{'tool_name': '...', 'arguments': '...'}]}

    Execution harness: JavaScript

Recipe freeze marker

No recipe freeze time is recorded.

Frequently Asked Questions about Local Multi-LLM Chat Agent