TwelveLabs Plugin
This plugin brings TwelveLabs Pegasus video
understanding to Vision Agents as a first-class VideoLLM.
Unlike frame-by-frame VLMs, Pegasus analyzes a short video clip, so it can reason about motion and events over time ("what just happened?") rather than a single still frame. Recent frames from the watched track are buffered, encoded into a short MP4 clip on demand, uploaded to the TwelveLabs Assets API, and analyzed with your prompt. The streamed answer is vocalized by the agent's TTS service.
Installation
uv add "vision-agents[twelvelabs]"
# or directly
uv add vision-agents-plugins-twelvelabs
You can grab a free API key at https://twelvelabs.io — there's a generous free tier.
Quick Start
import asyncio
import os
from dotenv import load_dotenv
from vision_agents.core import User, Agent, Runner
from vision_agents.core.agents import AgentLauncher
from vision_agents.plugins import deepgram, getstream, elevenlabs, twelvelabs
from vision_agents.plugins.getstream import CallSessionParticipantJoinedEvent
load_dotenv()
async def create_agent(**kwargs) -> Agent:
llm = twelvelabs.PegasusVLM(
api_key=os.getenv("TWELVELABS_API_KEY"), # or set TWELVELABS_API_KEY
)
agent = Agent(
edge=getstream.Edge(),
agent_user=User(name="My happy AI friend", id="agent"),
llm=llm,
tts=elevenlabs.TTS(),
stt=deepgram.STT(),
)
return agent
async def join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None:
call = await agent.create_call(call_type, call_id)
@agent.events.subscribe
async def on_participant_joined(event: CallSessionParticipantJoinedEvent):
if event.participant.user.id != "agent":
await asyncio.sleep(5) # let a few seconds of video buffer
await agent.simple_response("Describe what just happened in the video")
async with agent.join(call):
await agent.finish()
if __name__ == "__main__":
Runner(AgentLauncher(create_agent=create_agent, join_call=join_call)).cli()
Configuration
PegasusVLM Parameters
api_key: str - TwelveLabs API key. If not provided, read from theTWELVELABS_API_KEYenvironment variable.model_name: str - Pegasus model identifier (default:"pegasus1.5").fps: float - Frame sampling rate for the buffered clip (default:1.0).clip_seconds: int - Length of the clip analyzed per request. Pegasus requires at least 4 seconds of video (default:5).max_tokens: int - Maximum tokens in the response. Pegasus requires at least512(default:512).
Notes
- Pegasus requires a minimum resolution of 360x360; lower-resolution frames are scaled up to that floor on encode.
- Pegasus requires the analyzed clip to be at least 4 seconds long, so
clip_secondsmust be>= 4. - Each request uploads a clip and runs server-side analysis, so latency is
higher than single-frame VLMs. Tune
fpsandclip_secondsfor your use case.
Testing
# Unit tests (no API key needed)
uv run pytest plugins/twelvelabs/tests -m "not integration"
# Integration tests (needs TWELVELABS_API_KEY)
export TWELVELABS_API_KEY="your-key-here"
uv run pytest plugins/twelvelabs/tests -m integration
Links
Metadata
Release files for vision-agents-plugins-twelvelabs 0.6.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vision_agents_plugins_twelvelabs-0.6.9.tar.gz | 9.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vision_agents_plugins_twelvelabs-0.6.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.4 kB
Release files / vision_agents_plugins_twelvelabs-0.6.9.tar.gz
| Download URL | vision_agents_plugins_twelvelabs-0.6.9.tar.gz |
|---|---|
| Size | 9.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e4817610f55e7927c8c492314b4968522b56e8f97922df8fb788e2820cca90d
|
|
BLAKE2b-256 checksum How to use checksums |
d65da3bf3b12166e29c841f0584aaab3020f1c4ac2dd8e1bca74f19a2e386ae4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / vision_agents_plugins_twelvelabs-0.6.9-py3-none-any.whl
| Download URL | vision_agents_plugins_twelvelabs-0.6.9-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9ab4680a58297d23894b2c88c504ff10e0e864fb371ec897f04c3975c4dcd28
|
|
BLAKE2b-256 checksum How to use checksums |
6c06576d7cc7d685c34f74567ba1597b4a5e13bde01cbf2ff2da121c58509e87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|