Skip to main content

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 the TWELVELABS_API_KEY environment 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 least 512 (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_seconds must be >= 4.
  • Each request uploads a clip and runs server-side analysis, so latency is higher than single-frame VLMs. Tune fps and clip_seconds for 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)

Source distribution for vision-agents-plugins-twelvelabs 0.6.9
File Size Uploaded
vision_agents_plugins_twelvelabs-0.6.9.tar.gz 9.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vision-agents-plugins-twelvelabs 0.6.9
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.6.9 This release

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page