jargo README

The project's README from github.com/gojargo/jargo. As one markdown file: README.md.

jargo

A WebRTC-native, audio-first conversational-AI framework for Go.

CI Coverage Go Reference OpenSSF Scorecard Go version Release License: BSD-2-Clause


jargo is a framework for real-time voice agents in Go: audio in over WebRTC, a streaming transcription → reasoning → speech pipeline with turn-taking and barge-in, and audio back out.

Why?

Pipecat is great, and jargo is a port of it. The architecture and many design decisions are Pipecat's.

Python might not be the way

This port exists for one reason: I'd rather not run a voice agent on Python.

Python is the right tool when you need the AI/data-science ecosystem. A real-time voice server doesn't: the models run as services or as ONNX, and what's left is plumbing: audio framing, WebRTC, concurrency, and shipping a binary. For that, Go is a better fit: one static binary to deploy, low and predictable memory, fast startup, and real concurrency for many simultaneous sessions without a GIL. The heavy numerics stay where they belong (the ONNX Runtime, the remote services), so giving up Python costs little here. See the benchmarks for the honest performance picture.

Features

Providers

Pick any per category; each is a small Config + constructor.

Usage

go get github.com/gojargo/jargo

A bot is an STT → LLM → TTS pipeline over a WebRTC transport. The heart of it:

stt := chat.NewSTT(chat.STTConfig{APIKey: key, SampleRate: opus.SampleRate})
llm := chat.NewLLM(chat.LLMConfig{APIKey: key})
tts := chat.NewTTS(chat.TTSConfig{APIKey: key})

t := rtc.NewTransport(conn, transport.DefaultParams())
agg := aggregators.New(frames.NewLLMContext("You are a helpful voice assistant."))

task := pipeline.NewWorker(pipeline.New(
	t.Input(), stt, agg.User(), llm, tts, t.Output(), agg.Assistant(),
), pipeline.WorkerConfig{})
task.Run(ctx)

examples/voice/openai is that pipeline as a complete server (WebRTC signaling, VAD/turn-taking, barge-in).

Run it in Docker: build on the gojargo/jargo-build base and ship on the distroless gojargo/jargo runtime (it bundles the ONNX Runtime), then:

docker run --rm -p 8080:8080 -e OPENAI_API_KEY=$OPENAI_API_KEY my-bot

See Deploy with Docker for the Dockerfile and the Quickstart for the full setup.

Examples

Runnable bots live in examples/:

The fastest way to try them (locally or with Docker) is the Quickstart.

go run ./examples/echo                 # then open http://localhost:8080

Documentation

gojargo.github.io/jargo is the full documentation. The same pages live in docs/ and read fine on GitHub.

Start with Architecture for the model, or Frames and Processors for the engine. Writing a processor covers extending it. The API reference is the Go reference.

What you need to install

Nothing, to build: the default build is cgo-free, so CGO_ENABLED=0 go build ./... works with no C toolchain and no system packages.

To run a voice bot you need one shared library, and only for turn-taking:

What When you need it How to get it
ONNX Runtime VAD and end-of-turn detection. Without it the bot still runs, on STT endpointing, and loses barge-in. make deps-onnx, or a release
RNNoise Optional input noise reduction. make deps-rnnoise

Both libraries are loaded at run time through purego, so they are never needed at build time. Point jargo at them with JARGO_ONNXRUNTIME_LIB and JARGO_RNNOISE_LIB, or leave them on the loader's default search path. The base images bundle all of them.

License & attribution

jargo is a Go port of Pipecat, distributed under the same BSD 2-Clause License. The upstream copyright (Copyright (c) 2024–2026, Daily) is preserved verbatim in LICENSE; see NOTICE for details. jargo is an independent project, not affiliated with or endorsed by Daily.

jargo (gojargo/jargo)

Searching Database…

102 ·GitHub
Что это такое?Jargo — это WebRTC-ориентированный аудио-фреймворк для создания разговорного ИИ на Go. С его помощью строят голосовых агентов реального времени по конвейеру потоковый STT → LLM → TTS, с определением очередности реплик и перебиванием (barge-in).
Это фреймворк, который я импортирую, или отдельный сервер, который я запускаю?Это Go-фреймворк/библиотека из подключаемых процессоров (транспорты, сервисы STT, LLM, TTS), которые вы соединяете в бота; каталог examples показывает готовые к запуску серверы, построенные поверх него.
Как запустить голосового бота?Воспользуйтесь документацией Quickstart, запустите один из примеров вроде 'go run ./examples/voice/openai' и подключитесь из браузерного клиента, либо соберите Docker-образы (базовый gojargo/jargo-build, runtime — gojargo/jargo-build) и разверните их.
Нужен ли мне C-компилятор или какие-то системные пакеты для сборки?Нет, сборка по умолчанию идёт без cgo, так что 'CGOENABLED=0 go build ./...' работает без C-компилятора; но чтобы реально работало определение очередности реплик, нужна разделяемая библиотека ONNX Runtime (ставится через 'make deps-onnx') и, по желанию, RNNoise для шумоподавления — обе подгружаются во время работы через purego.
Что будет, если я пропущу настройку ONNX Runtime?Бот продолжит работать, но вернётся к завершению фраз по паузам в STT и потеряет перебивание (barge-in), потому что именно ONNX Runtime обеспечивает VAD и определение конца реплики (Smart Turn v3).
Какие транспорты и провайдеры он реально поддерживает?Среди транспортов WebRTC (Pion), WebSockets, LiveKit, локальное аудио и Twilio Media Streams для телефонии; почти любого провайдера STT, LLM или TTS (Deepgram, OpenAI, Anthropic, Gemini, ElevenLabs, Cartesia и многие другие) можно подключить за небольшим интерфейсом.
Зачем это написано на Go, а не просто на Pipecat в Python?Автор хотел не держать сервер реального времени для голоса на Python: голосовой агент — это в основном «обвязка» (кадрирование аудио, WebRTC, конкурентность), а Go даёт один статический бинарник, низкое потребление памяти, быстрый старт и настоящую конкурентность без GIL, при этом тяжёлые ML-модели всё равно работают как внешние сервисы или через ONNX.
Можно ли попробовать без API-ключей?Да, пример 'echo' позволяет услышать себя через весь конвейер без каких-либо API-ключей — удобно проверить транспорт и аудиотракт до подключения настоящих провайдеров STT/LLM/TTS.
Поддерживаются ли модели speech-to-speech вместо цепочки STT/LLM/TTS?Да, поддерживаются голосовые агенты на одной модели, такие как OpenAI Realtime, Gemini Live и AWS Nova Sonic, как альтернатива отдельному конвейеру STT → LLM → TTS.
А настоящие телефонные звонки он выдержит?Да, есть опциональная поддержка телефонии для входящих и исходящих звонков через Twilio Media Streams, включая watchdog на случай молчания пользователя, который может снова вовлечь его в разговор или положить трубку.
Creator
gojargo
Size
43.4 MB
Stars
102
Age
3mo
Commits · 90 Days