Instructions to use TheREZOR/TinyTalk-UA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use TheREZOR/TinyTalk-UA with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="TheREZOR/TinyTalk-UA") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("TheREZOR/TinyTalk-UA") model = AutoModelForCausalLM.from_pretrained("TheREZOR/TinyTalk-UA", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use TheREZOR/TinyTalk-UA with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "TheREZOR/TinyTalk-UA" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "TheREZOR/TinyTalk-UA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/TheREZOR/TinyTalk-UA
- SGLang
How to use TheREZOR/TinyTalk-UA with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "TheREZOR/TinyTalk-UA" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "TheREZOR/TinyTalk-UA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "TheREZOR/TinyTalk-UA" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "TheREZOR/TinyTalk-UA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use TheREZOR/TinyTalk-UA with Docker Model Runner:
docker model run hf.co/TheREZOR/TinyTalk-UA
TinyTalk UA
Найменший український чат-бот у світі.
👉 Спробувати наживо: tinytalk-ua.rezor.me — модель виконується просто у вашому браузері (WebAssembly), без сервера й без API.
Український чат-бот на 9,96 млн параметрів, який працює повністю офлайн на мікроконтролері ESP32-S3 (M5Stack Cardputer, 512 КБ SRAM, без PSRAM) — 5,6 МБ у Q4, ~5 токенів/с (196 мс/токен, виміряно на англійській збірці такої ж архітектури; швидкість упирається в потік із флеш-пам'яті). І, звісно, на будь-чому більшому.
Це україномовний родич TinyTalk 2. Таблиця ембедингів тут нова й випадкова — український токенізатор, а це третина моделі, — тіло трансформера стартує з того самого предка (TinyStories-Instruct-8M) і далі навчається на 700 млн українських токенів.
Мозок прошивки cardputer-ai
(гілка ukr), де вона працює з Q4_0-квантизацією, int4 KV-кешем і
рукописним SIMD-ядром PIE для ESP32-S3.
Що вміє
Проста розмова з пам'яттю на кілька реплік, дитячі факти (кольори, звуки
тварин, протилежності) — і чесне «не знаю» замість вигадок на питання, які
завеликі для такої моделі. Слава Україні! → Героям слава!
Формат промпту
User: <повідомлення>
Bot: <відповідь><|endoftext|>
User: <повідомлення>
Bot:
chat_template вбудований, тож tokenizer.apply_chat_template() збирає цей
формат сам.
Використання
from transformers import GPTNeoForCausalLM, GPT2TokenizerFast
model = GPTNeoForCausalLM.from_pretrained("TheREZOR/TinyTalk-UA")
tok = GPT2TokenizerFast.from_pretrained("TheREZOR/TinyTalk-UA")
msgs = [{"role": "user", "content": "привіт"}]
ids = tok(tok.apply_chat_template(msgs, tokenize=False), return_tensors="pt").input_ids
out = model.generate(ids, max_new_tokens=40, do_sample=True,
temperature=0.8, top_p=0.9,
eos_token_id=tok.eos_token_id,
pad_token_id=tok.eos_token_id)
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))
# " Привіт! Як твої справи?"
Реальні відповіді (жадібна декодизація):
| запит | відповідь |
|---|---|
привіт |
Привіт! Як твої справи? |
слава україні |
Героям слава! |
як тебе звати? |
Мене звати Бот. Я живу в цій маленькій машинці. |
мені сумно |
Мені шкода. Розкажи, що сталося? |
хто такий Ейнштейн? |
Я не знаю. Я ще дуже маленький бот. |
Архітектура
GPT-Neo: 8 шарів, dim 256, 16 голів, чергування global/local уваги (вікно 256), байтовий BPE на 14 000 токенів, зв'язані ембединги, контекст 256 позицій. Тіло трансформера ініціалізовано з TinyStories-Instruct-8M (107 тензорів), таблиця ембедингів — нова й випадкова, бо словник інший.
Як навчено
- Претрейн — 700 млн токенів (476 млн унікальних) з відфільтрованих українських субтитрів OPUS OpenSubtitles + ~30 % відредагованої прози з lang-uk/malyuk + Tatoeba. 21 362 кроки, 5,4 год на Ryzen AI Max+ 395 (ROCm, bf16).
- Файн-тюн діалогів — 34 тис. блоків (8,7 млн токенів), 3 епохи, маскований лосс: градієнт лише на репліках бота й на EOS, тож модель вчиться відповідати й зупинятися, а не імітувати користувача.
Проза потрібна саме через морфологію: субтитри — це 4,3 слова на рядок, а українська узгодженість (прикметник із іменником у роді, числі й відмінку; дієслово минулого часу з родом підмета) живе в повних реченнях.
Метрики
| значення | |
|---|---|
| Лосс на діалоговій валідації | 3,4535 |
| Коректність словоформ (VESUM) | 99,5 % |
| Узгодження прикметник–іменник (VESUM) | 90,6 % |
| Дитячі факти (батарея з 8 питань) | 8/8 |
| «Не знаю» на неможливих питаннях | 8/8 |
| Відсутність зайвих відмов | 8/8 |
Морфологію міряно проти VESUM — довідкового словника українських словоформ (3,9 млн форм). Власні назви виключено з перевірки словоформ: VESUM не містить транслітерованих іноземних імен.
Чесні обмеження
Це навчальна іграшка. Знань про світ нема — лише ~120 написаних вручну
дитячих фактів; решта має отримати ввічливе «не знаю», але не завжди:
яка столиця франції? дає Столиця України - Київ. Контекст — 256 токенів.
Корпус — субтитри, тож у рідкісних відповідях трапляється лайка й розмовний
шум. Не використовуйте це там, де щось важить.
Файли для ESP32
Каталог esp32/ містить те, що зашивається у прошивку:
model_neo_q4.bin— Q4_0, формат CRDP v3, 5,63 МБtok_neo.bin— блоб токенізатора CTK2, 276 КБ
Ліцензія та джерела
MIT — і код, і ваги. Робіть що завгодно, зберігайте текст ліцензії.
Джерела навчання наведені нижче для чесної атрибуції. Деякі з них мають власні умови (Tatoeba — CC BY 2.0 FR), а деякі не мають ліцензійного теґу взагалі; якщо це важливо для вашого випадку, перевірте першоджерела самі:
- Тіло: TinyStories-Instruct-8M (Eldan & Li, arXiv:2305.07759) — опубліковано без явної ліцензії.
- OPUS OpenSubtitles v2024 (uk) — Lison & Tiedemann, LREC 2016. OPUS поширює корпус для досліджень.
- lang-uk/malyuk — компіляція без ліцензійного теґу (UberText 2.0 + OSCAR uk + українські новини).
- OPUS Tatoeba (uk) — CC BY 2.0 FR.
- Дитячі факти й відмови — написані вручну, MIT.
TinyTalk UA (English)
The smallest Ukrainian chatbot in the world.
👉 Try it live: tinytalk-ua.rezor.me — the model runs in your own browser (WebAssembly), no server and no API.
A 9.96M-parameter Ukrainian chatbot that runs fully offline on an ESP32-S3 microcontroller (M5Stack Cardputer, 512 KB SRAM, no PSRAM) — 5.6 MB at Q4, ~5 tokens/s (196 ms/token, measured on the same-architecture English build; throughput is bound by flash streaming). And on anything bigger, of course.
It is the Ukrainian sibling of TinyTalk 2: the embedding table here is new and random — a Ukrainian tokenizer, and that is a third of the model — while the transformer body starts from the same ancestor (TinyStories-Instruct-8M) and is then trained on 700M Ukrainian tokens.
Built as the brain of the cardputer-ai firmware
(branch ukr), where it runs Q4_0-quantized with an int4 KV cache and a
hand-written ESP32-S3 PIE SIMD kernel.
What it's for
Small talk with a few turns of memory, kindergarten facts (colors, animal
sounds, opposites), and a trained "I don't know" instead of confabulation for
questions beyond a model this size. Слава Україні! → Героям слава!
Prompt format
User: <message>
Bot: <reply><|endoftext|>
User: <message>
Bot:
A chat_template is embedded, so tokenizer.apply_chat_template() produces
this format automatically.
Usage
from transformers import GPTNeoForCausalLM, GPT2TokenizerFast
model = GPTNeoForCausalLM.from_pretrained("TheREZOR/TinyTalk-UA")
tok = GPT2TokenizerFast.from_pretrained("TheREZOR/TinyTalk-UA")
msgs = [{"role": "user", "content": "привіт"}]
ids = tok(tok.apply_chat_template(msgs, tokenize=False), return_tensors="pt").input_ids
out = model.generate(ids, max_new_tokens=40, do_sample=True,
temperature=0.8, top_p=0.9,
eos_token_id=tok.eos_token_id,
pad_token_id=tok.eos_token_id)
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))
# " Привіт! Як твої справи?" ("Hi! How are you?")
Real greedy outputs:
| prompt | reply |
|---|---|
привіт (hi) |
Привіт! Як твої справи? |
слава україні |
Героям слава! |
як тебе звати? (what's your name?) |
Мене звати Бот. Я живу в цій маленькій машинці. |
мені сумно (I'm sad) |
Мені шкода. Розкажи, що сталося? |
хто такий Ейнштейн? (who is Einstein?) |
Я не знаю. Я ще дуже маленький бот. |
Architecture
GPT-Neo: 8 layers, hidden size 256, 16 heads, alternating global/local attention (window 256), 14,000-token byte-level BPE, tied embeddings, 256 positions. The transformer body was initialized from TinyStories-Instruct-8M (107 tensors copied); the embedding table is fresh and random, since the vocabulary is entirely different.
Training
- Pretrain — 700M tokens (476M unique) from filtered Ukrainian OPUS OpenSubtitles + ~30% edited prose from lang-uk/malyuk + Tatoeba. 21,362 steps, 5.4 h on a Ryzen AI Max+ 395 (ROCm, bf16).
- Dialogue fine-tune — 34K blocks (8.7M tokens), 3 epochs, masked loss: gradient only on bot replies and EOS, so it learns to answer and to stop, never to imitate the user.
The prose tier exists for morphology: subtitles average 4.3 words per line, and Ukrainian agreement (adjective–noun in gender, number and case; past-tense verb with the subject's gender) lives in complete clauses.
Metrics
| value | |
|---|---|
| Chat validation loss | 3.4535 |
| Wordform validity (VESUM) | 99.5% |
| Adjective–noun agreement (VESUM) | 90.6% |
| Kindergarten facts (8-prompt battery) | 8/8 |
| "I don't know" on impossible questions | 8/8 |
| No over-refusal | 8/8 |
Morphology is scored against VESUM, the reference Ukrainian morphological dictionary (3.9M word forms). Proper nouns are excluded from validity: VESUM has no transliterated foreign names.
Honest limitations
An educational toy. No world knowledge beyond ~120 hand-written kindergarten
facts; everything else is supposed to get a polite "I don't know" — but not
always: яка столиця франції? ("capital of France?") answers `Столиця України
- Київ.` ("The capital of Ukraine is Kyiv."). Context is 256 tokens. The corpus is film subtitles, so occasional profanity and conversational noise leak into rare replies. Do not use it for anything that matters.
ESP32 files
The esp32/ directory holds what gets embedded in the firmware:
model_neo_q4.bin— Q4_0 weights, CRDP v3 layout, 5.63 MBtok_neo.bin— CTK2 tokenizer blob, 276 KB
License & attribution
MIT — both code and weights. Do what you like; keep the license text.
The training sources are listed below for honest attribution. Some carry their own terms (Tatoeba is CC BY 2.0 FR) and some have no license tag at all; if that matters for your use case, check the upstream sources yourself:
- Body: TinyStories-Instruct-8M (Eldan & Li, arXiv:2305.07759) — published without an explicit license.
- OPUS OpenSubtitles v2024 (uk) — Lison & Tiedemann, LREC 2016. OPUS distributes these corpora for research.
- lang-uk/malyuk — a compilation with no license tag (UberText 2.0 + OSCAR uk + Ukrainian news).
- OPUS Tatoeba (uk) — CC BY 2.0 FR.
- Kindergarten facts and deflections — hand-written, MIT.
- Downloads last month
- 295