Skip to content

Conversation

npatsakula
Copy link
Owner

@npatsakula npatsakula commented Sep 14, 2025

Описание

Версия 0.1.0-alpha.0 являлась первым грубым приближением того, как должен выглядеть интерфейс клиента, который строился из опыта более сложной реализации gemini-rust.

В этом PR я попробовал развить удачные направления дизайна API и внутреннего устройства, по сравнению с alpha-версией, а также закрыть некоторые утилитарные потребности: конфигурация клиента, трейсинг и типизированную обработку ошибок.

Обработка ошибок

В alpha-версии для обработки ошибок использовался anyhow, который отлично подходил для начального прототипа, т.к. позволил сделать первую реализацию буквально за пару часов.

Для промышленного применения хотелось бы понимать, какой этап выполнения функции завершился ошибкой, а также получить дополнительную информацию. Выбор пал на snafu, потому как он обладает нужной функциональностью (error-chaining, display macros, backtraces etc) и хорошо себя зарекомендовал за многие годы применения в высоконагруженных системах.

Каждый модуль, отвечающий за изолированную функциональность, обладает собственным Error-перечислением, что позволяет сократить область значений ошибки. Также, для удобства пользователя, крейт экспортирует мета-перечисление, которое населяется перечислениями ошибок модулей (см. примеры); также это перечисление населяется универсальной ошибкой, который пользователь может использовать по своему усмотрению.

Трейсинг

Для промышленной эксплуатации библиотеки требовались инструменты интроспекции, которые которые были бы совместимы с широким спектром промышленных решений для логирования и трассировки: Elastic APM, Jaegger, Graylog и т.д.. Для этого использовался крейт tracing, который позволяет гибко настраивать логирование и интегрироваться с внешними решениями.

Подход к логгированию был сделан следующим: вся относящаяся к исполнению функции информация записывалась в контекст (span в терминах OT) и по окончанию вычисления каждого отдельного этапа создавалось отдельное событие (event в терминах OT); логирование происходит на уровнях debug и error.

Блокеры

  1. Для автоматической ротации токенов (OAuth) используется reqwest-middleware, который оборачивает reqwest клиента в допольнительный Hyper Middleware. К сожалению, этот крейт не экспортировал нужную мне для реализацию feature, потому пришлось его форкнуть. Сейчас я жду принятия PR с добавленной функциональностью.
  2. Тестирование сейчас производится в ручном режиме, т.к. развитие данного проекта я произвожу в свободное время, я не готов подключать токен тестирования с планом pay-as-you-go (Автоматическое тестирование. #3).

План

  • Пакетная обработка.
  • Трассировка.
  • Рефакторинг отправки запросов.
  • Типизированная обработка ошибок.

@npatsakula npatsakula added the enhancement New feature or request label Sep 14, 2025
- [x] Intial tracing implementation.
- [x] Project structure refactoring.
- [x] Minor TODO removal.
@npatsakula npatsakula changed the title Пакетная обработка. Релиз 0.1.0 Sep 18, 2025
@npatsakula npatsakula changed the title Релиз 0.1.0 Пакетная обработка. Sep 18, 2025
@npatsakula npatsakula self-assigned this Sep 18, 2025
@npatsakula npatsakula force-pushed the batch_processing branch 2 times, most recently from 4e3ac6b to 5561436 Compare September 18, 2025 14:13
@npatsakula npatsakula added the Release Release PR. label Sep 18, 2025
@npatsakula npatsakula changed the title Пакетная обработка. Релиз 0.1.0 Sep 18, 2025
@npatsakula npatsakula closed this Sep 18, 2025
@npatsakula npatsakula deleted the batch_processing branch September 18, 2025 15:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request Release Release PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant