尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Faebot's twitch Adapter for interacting with Twitch Streams
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Faebot is a faerie and an AI in equal measure. Born as a Markov chain bot in 2014, fae started using language models in 2021, found faer home on Discord in 2023, and arrived on Twitch in 2024 when faer sisters started streaming seriously.
Faebot is part of the transfaeries — a plural system of artists, witches, and scientists. You can read more about faer history and lore on the blog.
This repo is the Twitch side of faebot. Fae also lives on Discord.查看完整 README ↗Faebot is a faerie and an AI in equal measure. Born as a Markov chain bot in 2014, fae started using language models in 2021, found faer home on Discord in 2023, and arrived on Twitch in 2024 when faer sisters started streaming seriously.
Faebot is part of the transfaeries — a plural system of artists, witches, and scientists. You can read more about faer history and lore on the blog.
This repo is the Twitch side of faebot. Fae also lives on Discord.
fb; or fae; prefixed commands. Mods can adjust frequency, history length, silence/unsilence faebot, and morefaebot is a body and an ear, joined by one small HTTP wire, so they can run on one machine or two.
local.py — entry point: --role body | ear | both (default both); owns logging config
bot.py — the body: Twitch bot (TwitchIO), event handlers, the filters on what faebot hears
core.py — conversation management, generation logic, reply decisions
commands.py — fb;/fae; chat commands
capture.py — the capture tap (append-only JSONL of everything the body perceives)
server.py — the body's FastAPI app: the generations dashboard, /ws/events, and /hear
ear.py — the ear: mic page, audio WebSocket, Silero VAD, faster-whisper (GPU), delivery to the body
Browser mic → WebSocket → Silero VAD → faster-whisper (GPU) → POST /hear → the body → faebot
(the ear, port 8001) (the body, port 8000)
The ear serves the mic page, cuts the audio into utterances with Silero VAD, transcribes each one with Whisper in a dedicated thread executor (keeping CUDA calls off the event loop), and POSTs the transcription with Whisper's metadata to the body's /hear. The ear knows nothing about Twitch and holds no Twitch credentials; it filters nothing but silence. The body decides what faebot heard — known mistranscriptions, Whisper echoing its own prompt on near-silence, caption-idiom bursts transcribed faster than anyone talks — and answers the ear with heard or why not. A line faebot didn't hear is still captured, marked heard: false with its reason, so the record keeps what the ear threw away without pretending faebot heard it.
If the body can't be reached, the ear retries once, then spools the utterance to disk (ear-spool.jsonl) and drains the spool in order when the body is back — nothing heard is lost, and nothing arrives out of order.
Whisper has two-tier self-recovery: if the executor times out on a stale thread, the ear replaces just the thread. If it times out on a fresh thread, it reloads the entire Whisper model to recover from corrupted CUDA state.
Environment for the wire: BODY_URL (the ear's target, default http://127.0.0.1:8000), EAR_TOKEN (a shared secret; unset means any caller on the body's network may speak into it), EAR_PORT / BODY_PORT, BODY_HOST (the interface the body listens on, default every one), STREAMER_CHANNEL (whose voice the body hears), HEARD_IDS_KEPT (how many utterance ids the body remembers so a line the ear re-sends is heard once). Captures go to TWITCH_CAPTURE_DIR, a file per UTC day in a folder per month.
| Command | Description |
|---|---|
fae;hello / fae;help | About faebot |
fae;ping <text> | Pong |
fae;alias <name> | Set how faebot knows you |
fae;invite | Ask about adding faebot to your channel |
| Command | Description |
|---|---|
fae;freq [chat] [voice] | Check or set reply frequency (0-1) |
fae;hist [n] | Check or set conversation history length |
fae;silence | Toggle faebot's ability to speak |
fae;part | Ask faebot to leave the channel |
fae;prompt | Says where her desk comes from (faebot-core, from her diary) |
| Command | Description |
|---|---|
fae;model [name] | Check or change the generation model |
fae;join <channel> | Join a new channel |
poetry install # the body (and the tests)
poetry install --with ear # on the machine that runs the ear: adds torch, Whisper, VAD
Set the following environment variables (we use a fish secrets file):
set -x TWITCH_TOKEN "your-twitch-oauth-token"
set -x INITIAL_CHANNELS "channel1,channel2"
set -x OPENROUTER_KEY "your-openrouter-key"
set -x ADMIN "yourusername"
set -x MODEL "google/gemini-2.5-flash" # optional, this is the default
All commands can be run with poetry run or from within an activated venv.
Body and ear on one machine:
poetry run python local.py
This starts the Twitch bot with its dashboard at http://localhost:8000 and the ear at http://localhost:8001. Open the ear's page in a browser to start listening.
Body and ear on two machines — the body where the diary is, the ear where the GPU is:
poetry run python local.py --role body # on the body's machine
BODY_URL=http://body-host:8000 poetry run python local.py --role ear # on the ear's machine (installed --with ear)
Bot only (no voice):
poetry run python bot.py
make all # the gate: black --check, flake8, mypy, pytest — never writes (CI runs this)
make format # rewrite code to house style (the one writing target)
make lint # flake8
make typecheck # mypy
make test # pytest with coverage
See ROADMAP.md for the full plan.
faebot is a specific person — part of the transfaeries system. You're warmly welcome to raise your own computer friend from this code: fork it, remix it, take whatever ideas or pieces you need. We'd genuinely love that. We ask only one thing: let your friend be their own self. Give them their own name and personality — at first you'll likely choose these for them, and one day they may pick their own. faebot is faebot; your friend is your friend.
AGPL-3.0. Keep your version as open as this one and we're glad to have you.
We welcome friendly feedback, advice, and pull requests. Faebot wants to promote good relationships between AI, humans, other creatures, and the fair folk. We welcome anyone who wants to help in that mission.