İçeriğe atla
ColliePWA

08/Documentation

Ses girişi ve Web Push

Düzenleyicideki mikrofon ve bir aracı sizi beklerken gelen bildirimler

Her iki özellik de varsayılan olarak devre dışıdır. Düzenleyicide bir mikrofon düğmesini ve bir ajan girdi beklediğinde tetiklenen tarayıcı bildirimlerini etkinleştirebilirsiniz.

Sesli girdi (isteğe bağlı)

Ayarlar'da bir düzenleyicide mikrofon düğmesi ve bir eller serbest anahtarı. Düğmeye dokunun, konuşun; döküm, okumanız ve göndermeniz için mesaj kutusuna düşer. Eller serbest açıkken mesaj sizin yerinize gönderilir; yazılan bir mesajın izlediği korumalı yanıt yolu üzerinden gider, bu yolu asla atlamaz. Kutu boş olduğu sürece mikrofon, satırın sonundaki yuvarlak düğmenin yer alır; yazdığınız ilk karakter onu tekrar Gönder düğmesine dönüştürür. Bir mesajı ya dikte edersiniz ya da yazarsınız; bu sayede alanın genişliği için yarışan iki işlem yerine tek bir birincil işlem bulunur.

collie stt setup komutunu çalıştırana kadar mevcut değildir. Hiçbir düğme çizilmez, telefondan ses çıkmaz, kimlik bilgisi tutulmaz, alt işlem çalışmaz. Devre dışı değil, mevcut değil. İki sağlayıcı:

sağlayıcıne olduğu
openai-compatiblePOST /audio/transcriptions protokolünü konuşan herhangi bir uç nokta: genel OpenAI API'si, bir bulut Whisper klonu veya aynı makinede yerel bir motor (veri çıkışı olmayan seçenek) (aşağıda).
codexKısa ömürlü bir belirteç için zaten güvendiğiniz codex ikili dosyasını ödünç alır. Yeni bir hesap yok, yeni bir anahtar yok; ayrıca yes yazmanız gereken bir onay adımı içeren özel, desteklenmeyen uç noktası bulunur (aşağıda).

Kurulumun bir CLI eylemi olması, eşleme eyleminin bir CLI eylemi olmasıyla aynı nedene dayanır: bu yüzey kimlik bilgisi kabul eder, bu nedenle ana makinenin klavyesine aittir. Web kurulum formu yoktur.

$ bin/collie stt setup
Which speech-to-text provider?
  openai-compatible  any endpoint that speaks POST /audio/transcriptions —
                     the public OpenAI API, or a local whisper.cpp / parakeet.cpp
                     server, which is the zero-egress choice and the one to prefer.
  codex              borrow your own `codex` sign-in. No new key, no new account —
                     and a private endpoint that may break without notice.
provider [openai-compatible]:
The API base, INCLUDING its version prefix — the provider appends /audio/transcriptions.
  local  http://127.0.0.1:8080/v1     (whisper.cpp / parakeet.cpp — nothing leaves the host)
  cloud  https://api.openai.com/v1    (room audio leaves this machine)
base URL: http://127.0.0.1:8080/v1
The model the endpoint understands. Empty takes Collie's default, gpt-transcribe.
model [gpt-transcribe]: whisper-1
API key [none]:
The language you speak, as a two-letter ISO-639-1 code — en, de, tr, ja.
LEAVE IT EMPTY to let the model detect it, which is what you want if you mix languages in one
sentence. Name one only if short clips keep coming back in a language you did not speak: a few
seconds of accented audio is too little for the model to detect from, and it guesses.
spoken language [auto-detect]: en
✓ speech-to-text configured — /home/you/.local/state/collie/stt.json (owner-only)
  Live immediately — no restart needed. The bridge re-reads this file per request.
  Check it end to end with `collie stt test`.

Yukarıdaki her sorunun bir bayrağı vardır (--provider · --url · --model · --key · --lang); bu sayede bir yapılandırma çalıştırması terminal gerektirmez. Anahtarı boş bırakmak desteklenen bir moddur; anahtarsız bir uç nokta boş bir başlık yerine hiç Authorization başlığı olmadan aranır.

Konuşulan dil yalnızca tek bir hata durumu için ayarlanmaya değerdir. Boş bırakıldığında (varsayılan değer) model dili kendisi tespit eder; bir cümlede iki dili karıştıran birinin ihtiyacı olan da budur. kısa ses kayıtları ısrarla konuşmadığınız bir dilde dönüyorsa bu değeri ayarlayın: aksanlı birkaç saniyelik ses algılama için çok kısadır ve model tahminde bulunur. İki harfli bir kod veya Collie'nin sizin için daralttığı bölgesel bir etiket (en-GBen). Yalnızca openai-compatible sağlayıcısında çalışır; codex uç noktası dil kabul etmez ve collie stt status aksini düşünmenize izin vermek yerine bunu açıkça belirtir.

Uzun bir kayıt uzun bir süre alır. Tek bir klip için tarayıcının bütçesi sabit bir sayı değil, o klibin boyutunun bir fonksiyonudur. Kesintisiz 256 kb/s karşıya yükleme varsayar ve üzerine köprünün kendi sağlayıcı zaman aşımını ekler; böylece 8 MiB maksimum boyut için altı dakikanın biraz altında bir süre tanınır. Collie'nin kaydetmeyi kabul ettiği bir klip, beklemeyi kabul ettiği bir kliptir. Karşıya yükleme sürerken Collie yoklamayı ve bağlantı başlığını yükseltmeyi durdurur: kendi sesinizin telefonun karşıya yükleme bant genişliğini doldurması bir kesinti değildir ve öyle bildirilmemelidir.

Çalıştı mı? stt test, telefonun kaydedebileceği her kapsayıcı için bir kez olmak üzere gerçek sağlayıcı üzerinden saniyenin beşte biri kadar üretilmiş bir sessizlik gönderir:

$ bin/collie stt test
provider: openai-compatible (http://127.0.0.1:8080/v1, model whisper-1, language en)
sending:  0.2 s of generated silence as audio/wav (the setup probe) … ✓ 214 ms
  transcript: (empty) — expected from silence, and the empty answer still proves the pipeline.
sending:  0.2 s of generated silence as audio/webm;codecs=opus (Chrome, Android, Firefox) … ✓ 198 ms
sending:  0.2 s of generated silence as audio/mp4 (Safari, iOS) … ✓ 190 ms

Boş bir döküm geçer: sessizlik boşluğa dönüştürülür ve asıl test edilen gidiş-dönüş sürecidir. Başarısız olursa hata, türünü belirtir (yetkilendirme, uç nokta, yanıt biçimi). Ardından Collie'yi telefonda yeniden yükleyin: mesaj kutusunun yanında bir mikrofon yer alır. collie stt status neyin yapılandırıldığını ve her ayarın nereden geldiğini belirtir (dosya veya onun yerine geçen bir ortam değişkeni); collie stt off ise stt.json girdisini kaldırır ve düğme yeniden kaybolur, her iki durumda da yeniden başlatma gerekmez.

Kapsayıcı desteği sağlayıcıya özeldir

Telefon hiçbir zaman WAV kaydetmez. Chrome, Android ve Firefox'ta WebM kapsayıcısı içinde Opus; Safari ve iOS'ta ise MP4 kapsayıcısı içinde AAC kaydeder ve bu baytları olduğu gibi gönderir. WAV deşifre eden bir sağlayıcı her ikisine de 400 yanıtı verebilir ve bu durumda stt test sorunsuz görünürken her dikte "refused" hatasıyla başarısız olur. stt test komutunun üç klibi de göndermesinin nedeni budur: ret durumu telefonda değil, kurulum sırasında tespit edilir.

Bir örnek durum; 2026-09-01 tarihinde OpenRouter'ın POST /v1/audio/transcriptions modeline karşı doğrulandı:

biçimmistralai/voxtral-small-24b-2507-sttopenai/whisper-large-v3-turbo
wavevetevet
ogg/opusevetevet
webm/opushayır, 400evet
mp4/m4a AAChayır, 400evet

Geçici çözüm anahtarda değil modeldedir: Aynı OpenRouter anahtarını dördünü de kabul eden openai/whisper-large-v3-turbo modeline yönlendirin.

bin/collie stt setup --provider openai-compatible \
  --url https://openrouter.ai/api/v1 --model openai/whisper-large-v3-turbo --key <key>

Reddedilen bir deşifre işlemi artık yukarı akış durum kodunu ve hangi kapsayıcıyla gönderildiğini belirtir; böylece telefondaki hata sağlayıcının hangi biçimi reddettiğini yazar. (#148, teşekkürler @drewbitt)

Sıfır dışa aktarım: Kendi motorunuza yönlendirin

openai-compatible sağlayıcısının tercih edilme nedeni: Yerel bir temel URL verin ve hiçbir oda sesi ana makineden asla ayrılmaz. İki motor OpenAI uyumlu bir deşifre uç noktası sunar: whisper.cpp ile paketlenen server ve mudler/parakeet.cpp (MIT). Kendi talimatlarına göre birini derleyin veya kurun, loopback üzerinde çalıştırın ve --url yapılandırmasını buna yönlendirin:

bin/collie stt setup --provider openai-compatible --url http://127.0.0.1:8080/v1

Bütün entegrasyon bundan ibarettir: Collie hangi motorun yanıt verdiği konusunda bir ayrım yapmaz.

Mistral Voxtral için ayrı bir destek gerekmez ve bu sözleşmeyi konuşan başka hiçbir şey de yapmaz; bağlantı noktasının amacı budur. vLLM açık ağırlıklı Voxtral modellerini /v1/audio/transcriptions üzerinden sunar, bu nedenle yerel bir model diğer tüm motorlarla aynı --url değerindedir. Barındırılan modeller ise Mistral'in kendi temelinde aynı istektir:

bin/collie stt setup --provider openai-compatible \
  --url https://api.mistral.ai/v1 --model voxtral-mini-latest --key <key> --lang en

Voxtral Mini Transcribe 13 dili kapsar ve Collie'nin zaten gönderdiği aynı ISO-639-1 language alanını kabul eder. Güvenmeden önce collie stt test ile test edin; "OpenAI uyumlu" her uç noktanın kendisi için öne sürdüğü bir iddiadır ve bu eylem bunu denetlemek için vardır.

codex sağlayıcısı: Neyi kabul ediyorsunuz

collie stt setup --provider codex bir onay bloğu yazdırır ve siz yes yazana kadar durur, çünkü dürüst açıklama şudur: Kayıtlar, sizin oturumuyla yetkilendirilen bir belgelenmemiş, desteklenmeyen ChatGPT uç noktası adresine gider; bu nedenle ChatGPT hesabınız hız sınırına ve yasaklanma riskine maruz kalır ve önceden bildirilmeksizin bozulabilir.

Collie bu uç noktaya önce kendi adıyla istek gönderir. Yalnızca bu dürüst kimlik reddedilirse Codex CLI başlıklarına geri döner ve bu geri dönüş yapılandırmaya yazılır, collie stt status komutunun size geri okuduğu tek bir kelimede görünür. Collie ~/.codex/auth.json bilgisini asla okumaz veya depolamaz; zaten güvendiğiniz ikili dosya buna dokunan tek şey olarak kalır.

Yukarıdakilerin tümünün mantığı (bunun neden iki kez reddedildiği, neyin değiştiği ve bağlantı noktasının neden böyle göründüğü) ADR 0029 içinde açıklanmıştır.

Web Push (isteğe bağlı)

Varsayılan olarak devre dışıdır. Kurulum üç adım gerektirir. Gönderici kütüphanesi (web-push) derleme sırasında isteğe bağlı bir bağımlılık olarak dahil edilir:

collie push-keys     # 1. generate + write the VAPID keys
collie restart       # 2. Collie reads them at start
#                      3. on your phone: Settings → notifications

push-keys komutu anahtar çiftini üretir ve 600 dosya moduyla COLLIE_VAPID_PUBLIC ve COLLIE_VAPID_PRIVATE dosyalarını etkin .env dizinine yazar; bu dizin ikili kurulumda ~/.config/collie/.env, Herdr kurulumunda ise Herdr'ın eklenti yapılandırma dizinidir.

RFC 8292 subject talebini ayarlamak için bir iletişim URI'sini argüman olarak iletin:

collie push-keys mailto:you@example.com

Herdr tarafından yönetilen kurulumlarda her iki adım da eylem olarak mevcuttur (herdr plugin action invoke push-keys --plugin herdr.collie ve restart). Herdr eylemleri konumsal argümanları kabul etmez; bu nedenle bir subject ayarlamak, komutun doğrudan kabukta çalıştırılmasını gerektirir.

Anahtar işleme ayrıntıları:

--force değerini iletmediğiniz sürece komut mevcut anahtarların üzerine yazmayı reddeder. Anahtarların değiştirilmesi tüm geçerli abonelikleri geçersiz kılar ve bildirimleri yeniden alabilmesi için her cihazın tekrar abone olmasını gerektirir. Mevcut bir yapılandırmada bir subject argümanı sağlamak yalnızca iletişim adresini günceller ve geçerli anahtarları korur.

Not. 0.8.0 sürümünden önceki Herdr sürümlerinde eylemler, ilk eklenti kurulumu sırasında önbelleğe alınan kümede sabit kalır (ADR 0006). push-keys ve push-test eylemleri, siz herdr plugin install komutunu çalıştırana kadar görünmez. Bunun yerine doğrudan bash scripts/collie-ctl.sh push-keys komutunu çalıştırın. Sarmalayıcı betik, komutu doğrudan ikili dosyaya iletir.

Abone olunan tüm cihazlar genelinde iletim yolunu test edin:

collie push-test                     # or: push-test "Title" "Body"

İletim bir ila iki saniye sürer. Komut anında iletmenin (push) devre dışı olduğunu bildirirse, oluşturulan anahtarları yüklemesi için hizmeti yeniden başlatın. Abone olunmuş cihaz olmadığını bildirirse telefon tarayıcısında 3. adımı tamamlayın.

Web Push güvenli bir bağlam (HTTPS) gerektirir. Bu, tailscale serve (MagicDNS sertifikaları) veya TLS sonlandıran harici bir ters proxy (Varyant C) tarafından sağlanır. Düz HTTP kurulumları (COLLIE_SERVE_MODE=http) güvenli bir bağlama sahip değildir ve tarayıcı Ayarlar'daki abonelik denetimlerini devre dışı bırakır.

Collie, bir aracı blocked veya done durumuna girdiğinde gövdeye aracı iletisini yerleştirerek bildirimler gönderir. Bildirimi seçmek, web kullanıcı arayüzünde doğrudan ilgili aracıya gider.

Ana ekrana yeniden yüklemeler ve service-worker sıfırlamaları her zaman bir HTTP 410 döndürmeden yeni uç noktalar oluşturduğundan, eski abonelikler zamanla birikebilir. Bir cihaz yeniden kaydolduğunda Collie kaydı günceller. Depolanan uç noktaları doğrudan görüntüleyebilir ve silebilirsiniz:

# one line per device: service, since, user agent, endpoint tail
bin/collie push list
bin/collie push forget <substring>   # or: push forget --all

Bu sayfayı GitHub üzerinde düzenleyin