{"id":51500151,"url":"https://github.com/diabhey/first-byte","last_synced_at":"2026-07-07T17:30:55.522Z","repository":{"id":369473279,"uuid":"1231966294","full_name":"diabhey/first-byte","owner":"diabhey","description":"Course repo for Production Voice AI Agents with LiveKit. The name comes from TTS first-byte latency, the metric every choice in the course is in service of.","archived":false,"fork":false,"pushed_at":"2026-07-05T13:18:32.000Z","size":2258,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-05T15:08:10.870Z","etag":null,"topics":["livekit","livekit-agents","voice-agent","voice-ai","voice-assistant"],"latest_commit_sha":null,"homepage":"https://learning.oreilly.com/live-events/production-voice-ai-agents-with-livekit/0642572366988/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diabhey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-07T13:08:57.000Z","updated_at":"2026-07-05T13:47:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/diabhey/first-byte","commit_stats":null,"previous_names":["diabhey/first-byte"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/diabhey/first-byte","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diabhey%2Ffirst-byte","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diabhey%2Ffirst-byte/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diabhey%2Ffirst-byte/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diabhey%2Ffirst-byte/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diabhey","download_url":"https://codeload.github.com/diabhey/first-byte/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diabhey%2Ffirst-byte/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35237753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["livekit","livekit-agents","voice-agent","voice-ai","voice-assistant"],"created_at":"2026-07-07T17:30:55.435Z","updated_at":"2026-07-07T17:30:55.511Z","avatar_url":"https://github.com/diabhey.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# first-byte\n\nCourse repo for **Production Voice AI Agents with LiveKit** by Abhimanyu Selvan.\n\nThe name comes from the metric that decides whether voice AI feels real: TTS first-byte latency. Every choice in this course is in service of staying under 800 ms first audio out.\n\n## Layout\n\n```\nfirst-byte/\n├── pyproject.toml          # uv-managed deps for every section\n├── .env.example            # Template for credentials\n├── preflight.py            # Verifies your setup before class\n├── sections/\n│   ├── 01-hello-voice/     # First voice agent on LiveKit Inference\n│   ├── 02-production-ux/   # Semantic turn detection\n│   ├── 03-grounding-moss/  # RAG via on_user_turn_completed\n│   └── 04-ship-it/         # Observability + lk agent create deploy\n└── orb/                    # Visitor-facing webpage (Three.js orb, LiveKit JS SDK).\n                            # Run locally to talk to your deployed agent.\n```\n\nEach `sections/` directory is a self-contained `agent.py` you run with `uv run python sections/\u003csection\u003e/agent.py dev`. They build on each other, but each is also runnable standalone.\n\nThe `orb/` directory is the front-end half — a single HTML page using the LiveKit JS SDK and a Three.js sphere. After you've deployed your agent on LiveKit Cloud in Section 5, you'll serve this page locally (`python3 -m http.server`) and tap the orb to talk to your cloud agent. See `orb/README.md` for the three-step setup.\n\n## Pre-class setup\n\nComplete this **before** the live session. Budget 30 to 40 minutes.\n\n### 1. Tools\n\nInstall:\n- Python 3.11 or newer\n- [uv](https://docs.astral.sh/uv/): `curl -LsSf https://astral.sh/uv/install.sh | sh`\n- LiveKit CLI:\n  - macOS: `brew install livekit-cli`\n  - Linux: `curl -sSL https://get.livekit.io/cli | bash`\n  - Windows: `winget install LiveKit.LiveKitCLI`\n\n### 2. Accounts\n\n- **LiveKit Cloud free tier**: sign up at [cloud.livekit.io](https://cloud.livekit.io). After signup, run `lk cloud auth` once to link the CLI.\n- **Moss**: sign up at [docs.moss.dev](https://docs.moss.dev), create a project, copy the project ID and project key. Pick an index name like `firstbyte-{your-handle}`.\n\n### 3. Repo\n\n```bash\ngit clone https://github.com/diabhey/first-byte\ncd first-byte\ncp .env.example .env\n# paste your LIVEKIT_* and MOSS_* values into .env\nuv sync\n```\n\n### 4. Pre-flight check\n\n```bash\nuv run python preflight.py\n```\n\nThis script verifies LiveKit Cloud auth, Moss credentials, dependency install, and Python version. Every check should be green before class. If anything fails, post in the course Discord at least 24 hours before the live session.\n\n## Running an agent\n\n```bash\n# Section 1\nuv run python sections/01-hello-voice/agent.py dev\n\n# Section 2\nuv run python sections/02-production-ux/agent.py dev\n\n# (etc.)\n```\n\nThen open [agents-playground.livekit.io](https://agents-playground.livekit.io) in your browser and connect to your local agent. Talk to it.\n\n## Deploying\n\nIn Section 4 you'll deploy the final agent to LiveKit Cloud Agents:\n\n```bash\ncd sections/04-ship-it\nlk agent create\n```\n\nThat single command builds, ships, and registers your agent worker on LiveKit's global network and infrastructure. Set your secrets in the LiveKit Cloud dashboard, then connect the Playground to the deployed agent's public endpoint.\n\n## Resources\n\n- [LiveKit Agents docs](https://docs.livekit.io/agents/)\n- [LiveKit Inference catalog](https://docs.livekit.io/agents/models/inference/)\n- [LiveKit Voice AI Quickstart](https://docs.livekit.io/agents/start/voice-ai-quickstart/)\n- [Agents Playground](https://agents-playground.livekit.io/)\n- [Moss docs](https://docs.moss.dev)\n- [Course proposal](https://diabhey.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiabhey%2Ffirst-byte","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiabhey%2Ffirst-byte","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiabhey%2Ffirst-byte/lists"}