yk.camelcase.work

Нещодавні роботи

Нещодавні продукти, створені від початку до кінця. Кожен запис називає інженерне рішення, яке його сформувало, а не перелік функцій.

Кожен проєкт нижче почався з реальної проблеми. Далі роль та сама: продуктова концепція, системна архітектура, реалізація, інфраструктура, розгортання та безперервна доставка - кожен продукт продовжує розвиватися далеко за межами першого релізу.

Plaud - Приватна платформа знань на основі ШІ

Документи й медіа будь-якого типу - PDF, відео, аудіо, зображення тощо - стають доступними для пошуку, отримують стислі підсумки, і до них можна ставити запитання; інференс при цьому ніколи не виходить за межі моєї власної інфраструктури.

Проблема

Корисні знання накопичуються у форматах, у яких ніхто не може шукати: години записаних дзвінків і лекцій, скановані PDF, відео, фото в телефоні. Хмарні асистенти вміють їх підсумувати й відповідати на запитання за ними, але лише після того, як кожен файл завантажено на чужі сервери - а це виключає їх для особистих нотаток, клієнтських матеріалів чи будь-чого під NDA.

RAGLocal inferenceMultimodal ingestionDevice syncDurable processing queueMulti-user isolation

Архітектура

  • Один інтерфейс для кожної моделі. Генерація, ембединги, транскрипція та комп'ютерний зір - усе за єдиним контрактом, незалежним від провайдера. Який рушій відповідає і де він працює - це рішення про розгортання, а не залежність у коді.
  • Будь-який пристрій - канал надходження даних. Пристрій підключається з власними обліковими даними, які можна ротувати, і бачить віртуальний простір імен лише зі своїми файлами. Транспорт - змінний канал, а не архітектура: підключити телефон означає додати рядок у таблицю, нічого не налаштовуючи на хості.
  • Нічого не підтверджується, доки не збережено надійно. Клієнт резервного копіювання позначає фото синхронізованим, щойно передача закривається, тож закриття вдається лише після того, як байти й запис зафіксовано. Дублікати розпізнаються за вмістом, а не за тим, що клієнт пам'ятає про вже надіслане.
  • Обробка - це черга, а не запит. Атомарне захоплення завдання з орендою (lease): воркери масштабуються горизонтально, збій посеред файлу можна відновити, а reconciler виправляє те, що лишилося після збою. Важкі медіа обробляються поза основним потоком і повідомляють про результат через callback, тож API ніколи не блокується на транскрипції.
  • Retrieval - це контракт, а не виклик top-k. Фрагменти з оцінкою релевантності нижче порога ніколи не потрапляють до моделі - слабке запитання не повертає нічого замість упевненої відповіді, зібраної з шуму. Текстова й візуальна схожість оцінюються за окремими шкалами; один спільний поріг для двох просторів ембедингів - це баг, а не спрощення.
  • Побудовано так, щоб витримувати поганий вхід. Багатоступеневий ланцюжок видобування тексту з OCR як запасним варіантом, а непідтримувані формати переходять у явний стан замість того, щоб зривати всю партію.
  • Структура пропонується, а не нав'язується. Пов'язані записи розпізнаються й пропонуються як серія; підтверджує людина. Автотегування спершу використовує вже вживану лексику, перш ніж вигадувати нові слова, а ручні правки переживають повторну обробку.

Editron

Сервіс трансформації тексту за принципом API-first. Власний вебредактор - це клієнт того самого публічного API, якому заборонено його обходити, - саме це тримає інтеграційну поверхню чесною; рушій обробки можна замінити за одним внутрішнім контрактом, мультитенантність, API-ключі, квоти й облік використання закладено з самого початку, а також є опублікований TypeScript SDK.

Lernklang

Платформа з обмеженим доступом для вивчення мов через аудіювання, з аналітичною панеллю для шкіл. Один образ, три ролі: заплановані завдання виконуються в окремому контейнері, тож перезапуск чи масштабування вебзастосунку ніколи не пропускає завдання й не запускає його двічі - а конфігурація перевіряється під час старту: процес відмовляється запускатися з некоректною змінною, замість тихо ламатися в продакшені.

Herald

Збирання, обробка й доставка новин за темами. Дедуплікація відбувається на етапі доставки: для кожного каналу за хешем вмісту, з URL як запасним ключем, у ковзному вікні, тож синдиковані статті й статті, що оновлюються наживо, ніколи не надсилаються двічі; кожна стаття дає три незалежно створені формати, і кожен позначено точною версією конвеєра, яка його створила, - для відтворюваності та обліку витрат.

Менші продукти й цілеспрямовані експерименти - частина тієї самої практики: вони дають змогу швидко перевірити ідею, патерн взаємодії чи новий робочий процес, перш ніж братися за більшу систему.