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

XFEstudio/gpt4free

Update Qwen provider models and thinking mode

Refresh static model lists and improve dynamic model discovery/parsing. get_models now accepts an optional token, sends headers, and uses safe dict access (model.get(...)) to build text/image/vision/models lists and set default_model. Adjust generation logic so thinking_mode defaults to "Auto" when reasoning is enabled (otherwise "Fast"), introduce an auto_thinking variable, and propagate token headers into the StreamSession.

ccb5c070
Ammar <ammar.alkotb@gmail.com>
提交于

代码差异

1 个文件 +28 -23
Modified g4f/Provider/Qwen.py +28 -23
@@ -88,28 +88,26 @@ def get_oss_headers(method: str, date_str: str, sts_data: dict, content_type: st
88 88
89 89
90 90 text_models = [
91 'qwen3-max-preview', 'qwen-plus-2025-09-11', 'qwen3-235b-a22b', 'qwen3-coder-plus', 'qwen3-30b-a3b',
92 'qwen3-coder-30b-a3b-instruct', 'qwen-max-latest', 'qwen-plus-2025-01-25', 'qwq-32b', 'qwen-turbo-2025-02-11',
93 'qwen2.5-omni-7b', 'qvq-72b-preview-0310', 'qwen2.5-vl-32b-instruct', 'qwen2.5-14b-instruct-1m',
94 'qwen2.5-coder-32b-instruct', 'qwen2.5-72b-instruct']
91 'qwen3.6-plus', 'qwen3.6-max-preview', 'qwen3.5-plus', 'qwen3.5-omni-plus', 'qwen3.6-35b-a3b', 'qwen3.5-flash',
92 'qwen3.5-max-2026-03-08', 'qwen3.6-plus-preview', 'qwen3.5-397b-a17b', 'qwen3.5-122b-a10b', 'qwen3.5-omni-flash',
93 'qwen3.5-27b', 'qwen3.5-35b-a3b', 'qwen3-max-2026-01-23', 'qwen-plus-2025-07-28', 'qwen3-coder-plus',
94 'qwen3-vl-plus', 'qwen3-omni-flash-2025-12-01', 'qwen-max-latest']
95 95
96 96 image_models = [
97 'qwen3-max-preview', 'qwen-plus-2025-09-11', 'qwen3-235b-a22b', 'qwen3-coder-plus', 'qwen3-30b-a3b',
98 'qwen3-coder-30b-a3b-instruct', 'qwen-max-latest', 'qwen-plus-2025-01-25', 'qwen-turbo-2025-02-11',
99 'qwen2.5-omni-7b', 'qwen2.5-vl-32b-instruct', 'qwen2.5-14b-instruct-1m', 'qwen2.5-coder-32b-instruct',
100 'qwen2.5-72b-instruct']
97 'qwen3.6-plus', 'qwen3.5-plus', 'qwen3.5-omni-plus', 'qwen3.6-35b-a3b', 'qwen3.5-flash', 'qwen3.5-397b-a17b',
98 'qwen3.5-122b-a10b', 'qwen3.5-omni-flash', 'qwen3.5-27b', 'qwen3.5-35b-a3b', 'qwen3-max-2026-01-23',
99 'qwen-plus-2025-07-28', 'qwen3-coder-plus', 'qwen3-vl-plus', 'qwen3-omni-flash-2025-12-01', 'qwen-max-latest']
101 100
102 101 vision_models = [
103 'qwen3-max-preview', 'qwen-plus-2025-09-11', 'qwen3-235b-a22b', 'qwen3-coder-plus', 'qwen3-30b-a3b',
104 'qwen3-coder-30b-a3b-instruct', 'qwen-max-latest', 'qwen-plus-2025-01-25', 'qwen-turbo-2025-02-11',
105 'qwen2.5-omni-7b', 'qvq-72b-preview-0310', 'qwen2.5-vl-32b-instruct', 'qwen2.5-14b-instruct-1m',
106 'qwen2.5-coder-32b-instruct', 'qwen2.5-72b-instruct']
102 'qwen3.6-plus', 'qwen3.5-plus', 'qwen3.5-omni-plus', 'qwen3.6-35b-a3b', 'qwen3.5-flash', 'qwen3.5-397b-a17b',
103 'qwen3.5-122b-a10b', 'qwen3.5-omni-flash', 'qwen3.5-27b', 'qwen3.5-35b-a3b', 'qwen3-max-2026-01-23',
104 'qwen-plus-2025-07-28', 'qwen3-coder-plus', 'qwen3-vl-plus', 'qwen3-omni-flash-2025-12-01', 'qwen-max-latest']
107 105
108 106 models = [
109 'qwen3-max-preview', 'qwen-plus-2025-09-11', 'qwen3-235b-a22b', 'qwen3-coder-plus', 'qwen3-30b-a3b',
110 'qwen3-coder-30b-a3b-instruct', 'qwen-max-latest', 'qwen-plus-2025-01-25', 'qwq-32b', 'qwen-turbo-2025-02-11',
111 'qwen2.5-omni-7b', 'qvq-72b-preview-0310', 'qwen2.5-vl-32b-instruct', 'qwen2.5-14b-instruct-1m',
112 'qwen2.5-coder-32b-instruct', 'qwen2.5-72b-instruct']
107 'qwen3.6-plus', 'qwen3.6-max-preview', 'qwen3.5-plus', 'qwen3.5-omni-plus', 'qwen3.6-35b-a3b', 'qwen3.5-flash',
108 'qwen3.5-max-2026-03-08', 'qwen3.6-plus-preview', 'qwen3.5-397b-a17b', 'qwen3.5-122b-a10b', 'qwen3.5-omni-flash',
109 'qwen3.5-27b', 'qwen3.5-35b-a3b', 'qwen3-max-2026-01-23', 'qwen-plus-2025-07-28', 'qwen3-coder-plus',
110 'qwen3-vl-plus', 'qwen3-omni-flash-2025-12-01', 'qwen-max-latest']
113 111
114 112
115 113 class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
@@ -136,17 +134,22 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
136 134 @classmethod
137 135 def get_models(cls, **kwargs) -> list[str]:
138 136 if not cls._models_loaded and has_curl_cffi:
139 response = curl_cffi.get(f"{cls.url}/api/models")
137 _token = kwargs.get("token")
138 headers = cls._get_headers(_token) if _token else {}
139 response = curl_cffi.get(f"{cls.url}/api/models", headers=headers)
140 140 if response.ok:
141 141 models = response.json().get("data", [])
142 cls.text_models = [model["id"] for model in models if "t2t" in model["info"]["meta"]["chat_type"]]
142 cls.text_models = [model["id"] for model in models
143 if "t2t" in model.get("info", {}).get("meta", {}).get("chat_type")]
143 144
144 145 cls.image_models = [
145 model["id"] for model in models if
146 "image_edit" in model["info"]["meta"]["chat_type"] or "t2i" in model["info"]["meta"]["chat_type"]
146 model["id"] for model in models
147 if "image_edit" in model.get("info", {}).get("meta", {}).get("chat_type") or
148 "t2i" in model.get("info", {}).get("meta", {}).get("chat_type")
147 149 ]
148 150
149 cls.vision_models = [model["id"] for model in models if model["info"]["meta"]["capabilities"]["vision"]]
151 cls.vision_models = [model["id"] for model in models
152 if model.get("info", {}).get("meta", {}).get("capabilities", {}).get("vision")]
150 153
151 154 cls.models = [model["id"] for model in models]
152 155 cls.default_model = cls.models[0]
@@ -384,7 +387,9 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
384 387 model_name = cls.get_model(model)
385 388 prompt = get_last_user_message(messages)
386 389 enable_thinking = reasoning_effort in ("medium", "high")
387 thinking_mode: Literal["Auto", "Thinking", "Fast"] = kwargs.get("thinking_mode", "Auto")
390 thinking_mode: Literal["Auto", "Thinking", "Fast"] = kwargs.get("thinking_mode",
391 "Auto" if enable_thinking else "Fast")
392 auto_thinking = thinking_mode == "Auto"
388 393 timeout = kwargs.get("timeout") or 5 * 60
389 394 token = kwargs.get("token")
390 395 async with StreamSession(headers=cls._get_headers(token)) as session:
@@ -427,7 +432,7 @@ class Qwen(AsyncGeneratorProvider, ProviderModelMixin):
427 432 headers=req_headers)
428 433
429 434 feature_config = {
430 "auto_thinking": "Auto" == thinking_mode,
435 "auto_thinking": auto_thinking,
431 436 "thinking_mode": thinking_mode,
432 437 # "thinking_format": "summary",
433 438 "thinking_enabled": enable_thinking,