返回提交历史
Modified
g4f/Provider/OperaAria.py
+12
-12
XFEstudio/gpt4free
fix(OperaAria): real streaming, text+image coexistence, visible upload errors
4871bd5c
代码差异
1 个文件
+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