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

XFEstudio/gpt4free

Remove unused import and update sse_stream function signature for consistency

4e5c26fd
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

3 个文件 +25 -26
Modified g4f/Provider/Blackbox.py +0 -1
@@ -8,7 +8,6 @@ import random
8 8 import string
9 9 from pathlib import Path
10 10 from typing import Optional
11 from datetime import datetime, timedelta
12 11
13 12 from ..typing import AsyncResult, Messages, MediaListType
14 13 from ..requests.raise_for_status import raise_for_status
Modified g4f/Provider/Qwen.py +24 -23
@@ -12,6 +12,7 @@ from ..errors import RateLimitError
12 12 from ..typing import AsyncResult, Messages, MediaListType
13 13 from ..providers.response import JsonConversation, Reasoning, Usage, ImageResponse, FinishReason
14 14 from ..requests import sse_stream
15 from ..tools.media import merge_media
15 16 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
16 17 from .helper import get_last_user_message
17 18 from .. import debug
@@ -60,7 +61,6 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
60 61 supports_message_history = False
61 62
62 63 _models_loaded = True
63 # Complete list of models, extracted from the API
64 64 image_models = image_models
65 65 text_models = text_models
66 66 vision_models = vision_models
@@ -88,6 +88,8 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
88 88 cls.models = [model["id"] for model in models]
89 89 cls.default_model = cls.models[0]
90 90 cls._models_loaded = True
91 cls.live += 1
92 debug.log(f"Loaded {len(cls.models)} models from {cls.url}")
91 93
92 94 else:
93 95 debug.log(f"Failed to load models from {cls.url}: {response.status_code} {response.reason}")
@@ -95,20 +97,20 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
95 97
96 98 @classmethod
97 99 async def create_async_generator(
98 cls,
99 model: str,
100 messages: Messages,
101 media: MediaListType = None,
102 conversation: JsonConversation = None,
103 proxy: str = None,
104 timeout: int = 120,
105 stream: bool = True,
106 enable_thinking: bool = True,
107 chat_type: Literal[
108 "t2t", "search", "artifacts", "web_dev", "deep_research", "t2i", "image_edit", "t2v"
109 ] = "t2t",
110 image_size: Optional[Literal["1:1", "4:3", "3:4", "16:9", "9:16"]] = None,
111 **kwargs
100 cls,
101 model: str,
102 messages: Messages,
103 media: MediaListType = None,
104 conversation: JsonConversation = None,
105 proxy: str = None,
106 timeout: int = 120,
107 stream: bool = True,
108 enable_thinking: bool = True,
109 chat_type: Literal[
110 "t2t", "search", "artifacts", "web_dev", "deep_research", "t2i", "image_edit", "t2v"
111 ] = "t2t",
112 aspect_ratio: Optional[Literal["1:1", "4:3", "3:4", "16:9", "9:16"]] = None,
113 **kwargs
112 114 ) -> AsyncResult:
113 115 """
114 116 chat_type:
@@ -164,7 +166,6 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
164 166 req_headers['bx-umidtoken'] = cls._midtoken
165 167 req_headers['bx-v'] = '2.5.31'
166 168 message_id = str(uuid.uuid4())
167 parent_id = None
168 169 if conversation is None:
169 170 chat_payload = {
170 171 "title": "New Chat",
@@ -186,8 +187,9 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
186 187 parent_id=None
187 188 )
188 189 files = []
190 media = list(merge_media(media))
189 191 if media:
190 for index, (_file, file_name) in enumerate(media):
192 for _file, file_name in media:
191 193 file_class: Literal["default", "vision", "video", "audio", "document"] = "vision"
192 194 _type: Literal["file", "image", "video", "audio"] = "image"
193 195 file_type = "image/jpeg"
@@ -206,7 +208,7 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
206 208 "name": file_name,
207 209 "file_type": file_type,
208 210 "showType": showType,
209 "file_class": file_class, # "document"
211 "file_class": file_class,
210 212 "url": _file
211 213 }
212 214 )
@@ -243,8 +245,8 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
243 245 }
244 246 ]
245 247 }
246 if image_size:
247 msg_payload["size"] = image_size
248 if aspect_ratio:
249 msg_payload["size"] = aspect_ratio
248 250
249 251 async with session.post(
250 252 f'{cls.url}/api/v2/chat/completions?chat_id={conversation.chat_id}', json=msg_payload,
@@ -276,11 +278,10 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
276 278 elif phase == "answer" and thinking_started:
277 279 thinking_started = False
278 280 elif phase == "image_gen" and status == "typing":
279 yield ImageResponse([content], "", extra)
281 yield ImageResponse(content, prompt, extra)
280 282 continue
281 283 elif phase == "image_gen" and status == "finished":
282 yield FinishReason(status)
283
284 yield FinishReason("stop")
284 285 if content:
285 286 yield Reasoning(content) if thinking_started else content
286 287 except (json.JSONDecodeError, KeyError, IndexError):
Modified g4f/requests/__init__.py +1 -2
@@ -113,7 +113,6 @@ async def get_args_from_nodriver(
113 113 await callback(page)
114 114 for c in await page.send(nodriver.cdp.network.get_cookies([url])):
115 115 cookies[c.name] = c.value
116 await page.close()
117 116 stop_browser()
118 117 return {
119 118 "impersonate": "chrome",
@@ -219,7 +218,7 @@ async def get_nodriver(
219 218 BrowserConfig.stop_browser = on_stop
220 219 return browser, on_stop
221 220
222 async def sse_stream(iter_lines: Iterator[bytes]) -> AsyncIterator[dict]:
221 async def sse_stream(iter_lines: AsyncIterator[bytes]) -> AsyncIterator[dict]:
223 222 if hasattr(iter_lines, "content"):
224 223 iter_lines = iter_lines.content
225 224 elif hasattr(iter_lines, "iter_lines"):