Что-то поменялось, не стал разбираться, что именно, но проблема происходила от метода typing. Поменял в статье на новый код. См start_typing, stop_typing.
Сегодня утром столкнулась с интересным эффектом. Как я поняла ситуацию:
Накопилась история переписки
Задала боту сложный вопрос
функция получила от gpt слишком длинный ответ и не смогла его перекинуть в tg: {«errorMessage»: «A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message is too long», «errorType»: «ApiTelegramException», «stackTrace»:
бот не получает ответ и делает ретраи: {«errorMessage»: «HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url
тем не менее, история продолжает увеличиваться, proxyAPI продолжает дергаться
и все это привело к опустошению счета proxyAPI минут за 10
Решили, что ошибок может быть много разных, все не учесть и обернули вызов к bot.process_new_updates([update]) в try/catch. Таким образом, webhook будет получать положительный ответ в любом случае и не будет слать один и тот же запрос. А ошибку мы все равно увидим в логах функции.
Предлагаю отблагодарить @mbelyakova за отличный разбор проблемы поднятием кармы!
Запрос не включает в себя файл, потому что он не передается модели в виде текста. Code Interpreter берет файл напрямую из файлового хранилища.
К тому же у моделей есть ограничения контекстного окна. Для gpt-4o это 128 тысяч токенов. В такое окно не влезет даже мой файл, так-то загружать и анализировать можно очень большие файлы.
Токены из файла точно не тарифицируются, ведь они не отправляются в модель, ими только пользуется code interpreter. Учитывается обмен информацией между всеми участниками (модель, пользователь, code interpreter), а это уже от сценария зависит.
Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались: YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта
1) Переходим на Python 3.12 и последнии версии библиотек
2) Вместо chat id для ограничения тез, кто может бользоваться ботом, будем использовать имена пользователей. Уж слишком сложно добавлять новых пользователей старым методом.
Видимо ТГ шлет какие-то еще обновления, не вникал, но это с текущим кодом облачной функции может вызвать "затор", так что новые сообщения не будут обрабатываться из-за ошибки.
Решается заменой строчки:
if str(update.message.chat.id) in TG_BOT_CHATS:
на
if update.message is not None and str(update.message.chat.id) in TG_BOT_CHATS:
Что-то поменялось, не стал разбираться, что именно, но проблема происходила от метода typing. Поменял в статье на новый код. См
start_typing,stop_typing.Получил вопрос на хабре:
Решили, что ошибок может быть много разных, все не учесть и обернули вызов к
bot.process_new_updates([update])вtry/catch. Таким образом, webhook будет получать положительный ответ в любом случае и не будет слать один и тот же запрос. А ошибку мы все равно увидим в логах функции.Предлагаю отблагодарить @mbelyakova за отличный разбор проблемы поднятием кармы!
В статье код тоже поправил.
Я проверил - файлы не считаются. Мой файл весит 500кб, но каждый запрос стоил 1-2 тысячи токенов. Если бы файл учитывался - было бы больше 500 тыс.
Запрос не включает в себя файл, потому что он не передается модели в виде текста. Code Interpreter берет файл напрямую из файлового хранилища.
К тому же у моделей есть ограничения контекстного окна. Для gpt-4o это 128 тысяч токенов. В такое окно не влезет даже мой файл, так-то загружать и анализировать можно очень большие файлы.
Статья уже не молодая, часто получаю вопрос: как использовать более новые модели. Ответ: в этом месте меняем на нужную модель.
Например:
Токены из файла точно не тарифицируются, ведь они не отправляются в модель, ими только пользуется code interpreter. Учитывается обмен информацией между всеми участниками (модель, пользователь, code interpreter), а это уже от сценария зависит.
Спасибо!
Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались:
YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта
Поменял
InvalidRequestErrorнаBadRequestErrorВ новой версии библиотеки название класса, видимо, поменялось. Из-за этого бот не очищал историю самостоятельно, когда она переполнялась.
Попробуйте имя пользователя телеграм прописать в нижнем регистре, если это сейчас не так
Продолжение статьи: Добавляем зрение, слух и голос в свой ChatGPT бот в Telegram
Продолжение статьи: Добавляем зрение, слух и голос в свой ChatGPT бот в Telegram
Хорошее предложение, спасибо! Обновил оригинальную статью, решил использовать имена пользователей, вместе chat id.
Обновление статьи:
1) Переходим на Python 3.12 и последнии версии библиотек
2) Вместо chat id для ограничения тез, кто может бользоваться ботом, будем использовать имена пользователей. Уж слишком сложно добавлять новых пользователей старым методом.
По моему опыту - приводит. Лучше спрашивать на английском
Может это и так, на данный момент, может GPT-5,6,7 будут "умнее". Важно, что даже в таком виде ИИ помогает автоматизировать массу "тупых" задач
Я жду момента, когда работать можно будет в виртуальной реальности, и клава там будет такая, какая захочешь, хоть из трех частей
Это тот же Whisper, что и в API OpenAI? Или предыдущая модель?
В самой статье тоже поменял
Видимо ТГ шлет какие-то еще обновления, не вникал, но это с текущим кодом облачной функции может вызвать "затор", так что новые сообщения не будут обрабатываться из-за ошибки.
Решается заменой строчки:
на
Так после удаления его и назначить надо заново. setWebHook - смотрите шан Telegram WebHook в статье