Build multi-modal AI applications using our new open-source Vision AI SDK.

Kimi K2.5: Build a Video & Vision Agent in Python

2 min read
Amos G.
Amos G.
Published February 11, 2026

The Kimi K2.5 vision model can see the environment around you and asnwers questions about what it sees. This capability is similar to the Gemini Live Android or iOS app. Let's implement the model in Vision Agents for integrated video, vision, and voice experience.

Overview of the Demo

  • A real-time voice agent that analyzes your live camera feed, answers questions about what it sees, and helps with vision tasks.
  • Leverages Kimi K2.5's native multimodal understanding for accurate visual descriptions and reasoning.
  • Low-latency conversations with seamless turn-taking using Smart Turn.
  • A swappable voice pipeline using OpenAI-compatible API access to Kimi K2.5 via Vision Agents.

Voice Architecture

The demo uses the peech-to-text -> LLM -> text-to-speech pipeline approach, where each component is replaceable.

Required Credentials

bash
1
2
3
4
5
6
MOONSHOT_API_KEY=... ELEVENLABS_API_KEY=... DEEPGRAM_API_KEY=... STREAM_API_KEY=... STREAM_API_SECRET=... EXAMPLE_BASE_URL=https://demo.visionagents.ai

Initialize and Install Project Dependencies

shell
1
2
3
4
5
uv init kimi-k25-agent cd kimi-k25-agent uv add vision-agents uv add "vision-agents[getstream, elevenlabs, deepgram, smart-turn, openai]"

Run the Complete Python Script

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os from dotenv import load_dotenv from vision_agents.core import Agent, AgentLauncher, Runner, User from vision_agents.plugins import openai, getstream, deepgram, elevenlabs, smart_turn load_dotenv() async def create_agent(**kwargs) -> Agent: llm = openai.ChatCompletionsLLM( model="kimi-k2.5", base_url="https://api.moonshot.ai/v1", api_key=os.getenv("MOONSHOT_API_KEY"), ) # Create an agent with video understanding capabilities agent = Agent( edge=getstream.Edge(), agent_user=User(name="Video Assistant", id="agent"), instructions="You are a voice/video/vision agent powered by Kimi K2.5. You can answer questions about the users' video camera feed and help them perform coding tasks via screen sharing.", llm=llm, stt=deepgram.STT(), tts=elevenlabs.TTS(), turn_detection=smart_turn.TurnDetection(), processors=[], ) return agent async def join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None: await agent.create_user() call = await agent.create_call(call_type, call_id) async with agent.join(call): # The agent will automatically process video frames and respond to user input await agent.finish() if __name__ == "__main__": Runner(AgentLauncher(create_agent=create_agent, join_call=join_call)).cli()

This script launches a realtime video in your browser, where you can enable your camera/mic, and ask what the agent sees or share your screen for vision help.

Resources

Scaling WebRTC Video to 100,000 Participants
View Stream's latest Video API benchmark and the architecture that powers performance at scale.