-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-skit-demo.toml
More file actions
139 lines (111 loc) · 4.95 KB
/
docker-skit-demo.toml
File metadata and controls
139 lines (111 loc) · 4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# SPDX-FileCopyrightText: © 2025 StreamKit Contributors
#
# SPDX-License-Identifier: MPL-2.0
# Demo configuration with pre-warming and script support for OpenAI/weather pipelines.
#
# Usage:
# docker run -e OPENAI_API_KEY=sk-... \
# -p 127.0.0.1:4545:4545/tcp \
# -p 127.0.0.1:4545:4545/udp \
# ghcr.io/streamer45/streamkit:latest-demo
[server]
address = "0.0.0.0:4545"
samples_dir = "/opt/streamkit/samples/pipelines"
max_body_size = 104857600
# MoQ Gateway URL for the frontend to connect via WebTransport
# Default assumes Docker is running locally with ports mapped to localhost
# Override with SK_SERVER__MOQ_GATEWAY_URL env var for remote deployments
moq_gateway_url = "http://127.0.0.1:4545/moq"
[auth]
# Built-in authentication is enabled by default when binding non-loopback addresses (auth.mode=auto).
mode = "auto"
# Keep auth state under /opt/streamkit so it's easy to persist via a single volume mount.
state_dir = "/opt/streamkit/.streamkit/auth"
[plugins]
directory = "/opt/streamkit/plugins"
[log]
console_enable = true
file_enable = false
console_level = "info"
[telemetry]
enable = true
tokio_console = false
[engine]
packet_batch_size = 8
node_input_capacity = 8
pin_distributor_capacity = 4
[resources]
keep_models_loaded = true
# Pre-warming: Load models at startup to eliminate first-use latency
[resources.prewarm]
enabled = true
# Whisper STT - demo image uses a single tiny multilingual model
[[resources.prewarm.plugins]]
kind = "plugin::native::whisper"
params = { model_path = "models/ggml-tiny-q5_1.bin", use_gpu = false, gpu_device = 0, n_threads = 2, vad_model_path = "models/silero_vad.onnx" }
# VAD (Voice Activity Detection)
[[resources.prewarm.plugins]]
kind = "plugin::native::vad"
params = { model_path = "models/ten-vad.onnx", output_mode = "events", num_threads = 1, provider = "cpu" }
# Helsinki OPUS-MT Translation (EN<->ES)
[[resources.prewarm.plugins]]
kind = "plugin::native::helsinki"
params = { model_dir = "models/opus-mt-en-es", source_language = "en", target_language = "es", device = "cpu", max_length = 512, warmup = true }
[[resources.prewarm.plugins]]
kind = "plugin::native::helsinki"
params = { model_dir = "models/opus-mt-es-en", source_language = "es", target_language = "en", device = "cpu", max_length = 512, warmup = true }
# Kokoro TTS (default voice)
[[resources.prewarm.plugins]]
kind = "plugin::native::kokoro"
params = { model_dir = "models/kokoro-multi-lang-v1_1", speaker_id = 0, speed = 1.0, num_threads = 4, execution_provider = "cpu" }
# Piper TTS (English + Spanish voices)
[[resources.prewarm.plugins]]
kind = "plugin::native::piper"
params = { model_dir = "models/vits-piper-en_US-libritts_r-medium", speaker_id = 0, speed = 1.0, num_threads = 4 }
[[resources.prewarm.plugins]]
kind = "plugin::native::piper"
params = { model_dir = "models/vits-piper-es_MX-claude-high", speaker_id = 0, speed = 1.0, num_threads = 4 }
# Matcha TTS
[[resources.prewarm.plugins]]
kind = "plugin::native::matcha"
params = { model_dir = "models/matcha-icefall-en_US-ljspeech", speaker_id = 0, speed = 1.0, num_threads = 4, execution_provider = "cpu" }
# SenseVoice STT
[[resources.prewarm.plugins]]
kind = "plugin::native::sensevoice"
params = { model_dir = "models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09", language = "auto", num_threads = 4, execution_provider = "cpu", use_vad = true, vad_model_path = "models/silero_vad.onnx" }
# Pocket TTS
[[resources.prewarm.plugins]]
kind = "plugin::native::pocket-tts"
params = { weights_path = "models/pocket-tts/tts_b6369a24.safetensors", tokenizer_path = "models/pocket-tts/tokenizer.model", voice_embeddings_dir = "models/pocket-tts/embeddings", voice = "alba", temperature = 0.7 }
# Supertonic TTS
[[resources.prewarm.plugins]]
kind = "plugin::native::supertonic"
params = { model_dir = "models/supertonic-v2-onnx", lang = "en", voice_style = "M1", total_step = 5, speed = 1.05 }
# Script node configuration for OpenAI/weather pipelines
[script]
# OpenAI API Key for LLM integration (voice-agent-openai.yaml)
[script.secrets.openai_key]
env = "OPENAI_API_KEY"
type = "apikey"
description = "OpenAI API key for GPT-4 integration in voice agent pipelines"
allowed_fetch_urls = ["https://api.openai.com/*"]
# Allow fetch() calls to OpenAI API
[[script.global_fetch_allowlist]]
url = "https://api.openai.com/v1/chat/completions"
methods = ["POST"]
# Allow Open-Meteo (voice-weather-open-meteo.yaml)
[[script.global_fetch_allowlist]]
url = "https://geocoding-api.open-meteo.com/*"
methods = ["GET"]
[[script.global_fetch_allowlist]]
url = "https://api.open-meteo.com/*"
methods = ["GET"]
# Allow useless-facts API (useless-facts-tts.yml)
[[script.global_fetch_allowlist]]
url = "https://uselessfacts.jsph.pl/*"
methods = ["GET"]
[permissions]
# NOTE: When built-in auth is enabled, unauthenticated requests are rejected and `default_role`
# is not used. This only applies when auth is disabled.
default_role = "user"
# allow_insecure_no_auth = true # Unsafe: only enable if you intentionally disable auth on 0.0.0.0