Gpt vision телеграм бот
пишу телеграмм бота который совместно с ghat gpt и наткнулся на проблему когда начал внедрять gpt vision, т.е. бот должен принимать картинку и отправлять в текстовом формате описание картинки
вот сама функция
async def encode_image(image_path):
async with aiofiles.open(image_path, "rb") as image_file:
return base64.b64encode(await image_file.read()).decode('utf-8')
async def gpt_vision(req, model, file):
base64_image = await encode_image(file)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {AITOKEN}"
}
payload = {
"model": model,
"messages": [
{
"role": "user",
"content": req # Передаем только текст в "content"
},
{
"role": "user",
"content": f"data:image/jpeg;base64,{base64_image}" # Изображение передаем отдельно
}
],
"max_tokens": 300
}
async with aiohttp.ClientSession() as session:
async with session.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload) as response:
completion = await response.json()
return {
'response': completion['choices'][0]['message']['content'],
'usage': completion['usage']['total_tokens']
}
вот обработчик
#GPT Vision
@user.message(Chat.text, F.photo)
async def chat_response(message: Message, state: FSMContext):
user = await get_user(message.from_user.id)
if Decimal(user.balance)>0:
await state.set_state(Chat.wait)
file = await message.bot.get_file(message.photo[-1].file_id)
file_path = file.file_path
file_name = uuid.uuid4()
await message.bot.download_file(file_path, f'{file_name}.jpeg')
response = await gpt_vision(message.text, 'gpt-4o', f'{file_name}.jpeg')
await calculate(message.from_user.id, response['usage'], 'gpt-4o', user)
await message.answer(response['response'])
os.remove(f'{file_name}.jpeg')
else:
await message.answer('Недостаточно средств на балансе.')
а вот ошибка в терминале
Cause exception while process update id=962171664 by bot id=7505301851
BadRequestError: Error code: 400 - {'error': {'message': "Invalid value for 'content': expected a string, got null.", 'type': 'invalid_request_error', 'param': 'messages.[0].content', 'code': None}}
Traceback (most recent call last):
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\middlewares\error.py", line 25, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\middlewares\user_context.py", line 56, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\fsm\middleware.py", line 42, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 146, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 141, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 174, in _propagate_event
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 146, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 141, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\router.py", line 166, in _propagate_event
response = await observer.trigger(event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\app\user.py", line 36, in chat_response
response = await gpt_text(message.text, 'gpt-4o')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\app\generators.py", line 11, in gpt_text
completion = await client.chat.completions.create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\openai\resources\chat\completions.py", line 1633, in create
return await self._post(
^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\openai\_base_client.py", line 1838, in post
return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\openai\_base_client.py", line 1532, in request
return await self._request(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\PC\Desktop\project\Sudo tech\AiBot\.venv\Lib\site-packages\openai\_base_client.py", line 1633, in _request
raise self._make_status_error_from_response(err.response) from None
openai.BadRequestError: Error code: 400 - {'error': {'message': "Invalid value for 'content': expected a string, got null.", 'type': 'invalid_request_error', 'param': 'messages.[0].content', 'code': None}}