XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

fix(OperaAria): real streaming, text+image coexistence, visible upload errors

4871bd5c
yetval <yetvald@gmail.com>
提交于

代码差异

1 个文件 +12 -12
Modified g4f/Provider/OperaAria.py +12 -12
@@ -9,6 +9,7 @@ import base64
9 9 import asyncio
10 10 from aiohttp import ClientSession, FormData
11 11
12 from .. import debug
12 13 from ..typing import AsyncResult, Messages, MediaListType
13 14 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
14 15 from .helper import format_prompt
@@ -245,7 +246,8 @@ class OperaAria(AsyncGeneratorProvider, ProviderModelMixin):
245 246
246 247 image_id = await cls.upload_media(session, access_token, media_bytes, media_name)
247 248 media_attachments.append(image_id)
248 except Exception:
249 except Exception as e:
250 debug.log(f"OperaAria: failed to upload media '{media_name}': {e}")
249 251 continue
250 252
251 253 headers = {
@@ -271,16 +273,16 @@ class OperaAria(AsyncGeneratorProvider, ProviderModelMixin):
271 273 response.raise_for_status()
272 274
273 275 if stream:
274 text_buffer, image_urls, finish_reason = [], [], None
275
276 image_urls, finish_reason = [], None
277
276 278 async for line in response.content:
277 279 if not line: continue
278 280 decoded = line.decode('utf-8').strip()
279 281 if not decoded.startswith('data: '): continue
280
282
281 283 content = decoded[6:]
282 284 if content == '[DONE]': break
283
285
284 286 try:
285 287 json_data = json.loads(content)
286 288 if 'message' in json_data:
@@ -289,22 +291,20 @@ class OperaAria(AsyncGeneratorProvider, ProviderModelMixin):
289 291 if found_urls:
290 292 image_urls.extend(found_urls)
291 293 else:
292 text_buffer.append(message_chunk)
293
294 yield message_chunk
295
294 296 if 'conversation_id' in json_data and json_data['conversation_id']:
295 297 conversation.conversation_id = json_data['conversation_id']
296
298
297 299 if 'finish_reason' in json_data and json_data.get('finish_reason'):
298 300 finish_reason = json_data['finish_reason']
299 301
300 302 except json.JSONDecodeError:
301 303 continue
302
304
303 305 if image_urls:
304 306 yield ImageResponse(image_urls, format_prompt(messages))
305 elif text_buffer:
306 yield "".join(text_buffer)
307
307
308 308 if finish_reason:
309 309 yield FinishReason(finish_reason)
310 310