Месяц назад решил добавить поддержку Gemini в Feeds Fun и под это дело изучал топовые LLM фреймворки — писать свой велосипед не хотелось.
В итоге нашёл стыдный баг в интеграции с Gemini в LLamaIndex. Судя по коду, он есть и в Haystack и в плагине для LangChain. А корень проблемы вообще в SDK Google для Python.
При инициализации нового клиента для Gemini код фреймворка перетирает/подменяет API ключи во всех клиентах, созданных до этого. Потому что API ключ, по-умолчанию, хранится в синглетоне.
Смерти подобно, если у вас multi-tenant приложение, и незаметно во всех остальных случаях. Multi-tenant — это когда ваше приложение работает с несколькими пользователями.
Например, в моём случае, в Feeds Fun пользователь может ввести свой API ключ, чтобы улучшить качество сервиса. Представьте какой забавный казус мог бы случиться: пользователь ввёл API ключ для обработки своих рассылок, а потратил токенов (заплатил) за всех пользователей сервиса.
Репортил только в LLamaIndex как security issue и уже 3 недели ноль реакции, для Haystack и LangChain лень воспроизводить. Так что это ваш шанс зарепортить багу в топовый репозиторий. Под катом будет вся инфа, воспроизвести не сложно.
Ошибка примечательна многим:
Оценка критичности ошибки очень зависит от вкусовщины, опыта и контекста. Для меня, в проектах в которых я работал, — это критическая ошибка безопасности. Но, похоже, для большинства актуальных проектов, которые используют LLM, это вообще не принципиально. Что навевает некоторые мысли о мейнстрим около-LLM разработках.
Это хороший индикатор низкого уровня контроля качества кода: код ревью, тестов — всех процессов. Всё-таки это интеграция с одним из топовых провайдеров API, найти проблему можно было кучей разных способов, но ни один не сработал.
Это хорошая иллюстрация порочного подхода к разработке: «копипастим из туториала и льём на прод». Чтобы допустить эту ошибку нужно было проигнорить одновременно и базовую архитектуру твоего проекта и логику вызова кода, который ты копипастишь.
В итоге я забил на эти фреймворки и впилил свой костыль, благо HTTP API для Gemini есть.
Мой вывод из этого безобразия такой: доверять коду, который под капотом у современных LLM фреймворков нельзя. Надо перепроверять, вычитывать. То, что у них написано «production ready», не значит, что они действительно production ready.
Неожиданно столкнулся с работающим правосудием в США, причём почти ничего не делал для этого.
Году в 2017-2018, когда был бум крипты, подписался в один майнерский стартап: купил их токенов, одну единицу оборудования.
Стартап пошёл в рост, начал строить мега ферму, но не фортануло — на пик их трат пришлось падение биткоина, деньги кончились, контора обанкротилась. Забавно, что через месяц-два после подачи на банкротство биткоин всё отыграл назад. Не повезло :-)
На потерянные деньги тогда уже забил, конечно. Действовал по правилу «вкладывай только 10% дохода, которые не жалко потерять».
Поскольку юридически всё происходило в США, народ там собрался и подал коллективный иск.
Мне прислали письмо, по которому я автоматически среди истцов, если не откажусь. Я не отказался, интересно же.
Всё затихло до этого (2024) года.
Весной пришло ещё одно письмо: «подтвердите владение токенами и укажите их количество, мы победили и поделим оставшееся на всех владельцев пропорционально, за вычитом здоровой комиссии юристам».
А как я подтвержу? Больше 5 лет прошло. Счёт в банке РБ закрыт, админка конторы недоступна, прямой транзакции в блокчейне нет — отправлял прямо с какой-то биржи (хотя так делать не рекомендуется).
Нашёл на почте письмо от конторы о том, что я купил токены (без указания количества), распечатал в pdf. Прикрепил к заявке его и скриншоты транзакции с биржи за тот период. Дал адрес своего текущего кошелька, где эти токены лежат мёртвым грузом. Отправил.
Сегодня на банковский счёт прислали 700$. Это, конечно, не всё потерянное, но процентов 25% будет, может даже больше.
Какие выводы можно из этого сделать:
Иногда вашему бизнесу может просто не фортануть.
Сохраняйте всю электронную почту, никогда не узнаете что и когда пригодится.
Коллективные иски работают и делают это интересным образом.
Правосудие в США работает долго, но, видимо, неотвратимо и неожиданно лояльно к левым минорным участникам конфликта. По крайней мере иногда.
Продолжаю развивать свою читалку новостей: feeds.fun. Чтобы собирать информацию и людей вместе, завёл несколько ресурсов, где можно обсудить проект и найти полезную информацию:
Когда выкладывал отчётную презентацию (слайды) по World Builders 2023 (мои посты, сайт), обещал рассказать как делал roadmap и финансовую модель для игры. Выполняю обещание.
К концу поста у нас на руках будут:
Краткая стратегия нашей компании: что мы делаем, как, зачем и почему.
Табличка наших маяков — успешных игр, которые примерно похожи на то, что мы хотим сделать. Похожи как по геймплею, так и по размеру команды, бюджету, etc.
Состав команды, которую нам надо собрать.
Roadmap — план разработки нашей игры.
Зачатки маркетинговой стратегии.
Финансовая модель — сколько мы будем тратить, сколько зарабатывать.
В свой отпуск Юля решила показать мне красивые немецкие горы и отвезла на пару дней в Grainau — это такой кусочек Баварии, который почти как Швейцария. В Швейцарии я не был, но, судя по картинкам, похоже.
Если кратко, то очень красивое место с размеренным темпом жизни. Если надо выдохнуть, подлечить нервишки и насладиться природой, то вам сюда. Но если вы без движа не можете, то быстро заскучаете.