TGViewer
partially unsupervised partially unsupervised @partially_unsupervised · 10.3K subscribers
Post #254 12K
Как недооценить на порядок тривиальную задачу

Есть небольшая кодовая база; в ней много вызовов LLM. Хочется гонять интеграционные тесты быстро, не ждать ответа от медленной (да и не самой дешевой) апишки. Решение напрашивается: давайте закэшируем ответы (VCR testing)! Это же должно делаться буквально одним кэширующим декоратором поверх уже существующего LLM клиента, не так ли?

Оказывается, не совсем, ведь:
- клиент инициализируется в куче мест, нужно сделать синглтон;
- клиент инициализируется со слегка разными параметрами, нужно привести к общему знаменателю и проверить, что нет регрессий;
- два одинаковых запроса к LLM могут вернуть разные ответы, в т.ч., например, один валидный и один невалидный примерно в одно и то же время.
- клиент вызывается конкурентно и асинхронно, нужен лок;
- запрос содержит сложные иерархические слаботипизированные структуры, вычисление ключа кэширования нетривиально;
- эквивалентные запросы могут осуществляться по-разному (например, через именованные и неименованные параметры);
- часть запроса формируется из логов, а потому может содержать случайные элементы (например, айдишки или таймстемпы), которые нужно подчищать;
- такой VCR кэш устаревает с каждым минимальным изменением в логике того, как мы работаем с контекстом - нужно обеспечить простой и понятный developer experience, как этим пользоваться, как обновить, и в каких случаях это уместно.
- разрастается логика: оказывается трех режимов (не использовать / обновить кэш / проиграть из кэша), не хватает - например, в дебаге полезно иметь гибрид, который и переиспользует старые записи, и может сходить в апишку. А вот для тестов это харам, cache miss должен явно ронять тест.

Но разве кого-то волнует, насколько я недооценил сложность изначально, когда тесты такие быстрые?.. 🚀
  • 👍 34
  • 🔥 13
  • 🗿 9
  • ❤ 3
More from @partially_unsupervised
  1. Sep 21, 2026Jev, про который говорят на каждом углу - это может и не революция технически, но чертовск…
  2. Sep 17, 2026Минутка рекламы. Если вы ненавидите двигать квадратики в джире так же люто, как и я, но ещ…
  3. Sep 8, 2026Не люблю комментировать релизы, но Astra (и, внезапно, gemini 3.8) вернули забытое чувство…
  4. Aug 24, 2026Мой соавтор по первой книжке не удержался и недавно заспойлерил вторую. А если шило в мешк…
  5. Aug 9, 2026Когда я учился в школе, на каком-то этапе мои учителя математики и информатики объявили, ч…
  6. Jul 28, 2026Четыре недели плотно работал над нечетко поставленной задачей на грани агентов и informati…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →