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

XFEstudio/gpt4free

Add support for .py file type in MIME type mapping and refactor provider handling in Backend_Api

3c2662eb
hlohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

4 个文件 +20 -34
Modified g4f/api/__init__.py +1 -0
@@ -1023,6 +1023,7 @@ class Api:
1023 1023 "woff2": "font/woff2",
1024 1024 "ttf": "font/ttf",
1025 1025 "otf": "font/otf",
1026 "py": "text/plain; charset=utf-8",
1026 1027 }
1027 1028
1028 1029 @self.app.get("/pa/files/{file_path:path}", responses={
Modified g4f/client/factory.py +2 -0
@@ -126,6 +126,8 @@ class AbstractClientFactory:
126 126 from g4f.mcp.pa_provider import get_pa_registry
127 127 registry = get_pa_registry()
128 128 if provider:
129 if provider.startswith("pa:"):
130 provider = provider[3:]
129 131 provider_cls = registry.get_provider_class(provider)
130 132 if provider_cls:
131 133 return provider_cls
Modified g4f/gui/server/api.py +2 -6
@@ -178,10 +178,8 @@ class Api:
178 178 debug.log = decorated_log
179 179 proxy = os.environ.get("G4F_PROXY")
180 180 try:
181 model, provider_handler = get_model_and_provider(
182 kwargs.get("model"), provider or AnyProvider,
183 has_images="media" in kwargs,
184 )
181 provider_handler = provider or AnyProvider
182 provider = provider_handler.__name__ if provider_handler else provider
185 183 if "user" in kwargs:
186 184 debug.error("User:", kwargs.get("user", "Unknown"))
187 185 debug.error("Referrer:", kwargs.get("referer", ""))
@@ -191,8 +189,6 @@ class Api:
191 189 yield self._format_json('error', type(e).__name__, message=get_error_message(e))
192 190 return
193 191 if not isinstance(provider_handler, BaseRetryProvider):
194 if not provider:
195 provider = provider_handler.__name__
196 192 yield self.handle_provider(provider_handler, model)
197 193 if hasattr(provider_handler, "get_parameters"):
198 194 yield self._format_json("parameters", provider_handler.get_parameters(as_json=True))
Modified g4f/gui/server/backend_api.py +15 -28
@@ -38,7 +38,6 @@ except ImportError:
38 38 has_crypto = False
39 39
40 40 from ...client import Client
41 from ...client.service import convert_to_provider
42 41 from ...providers.asyncio import to_sync_generator
43 42 from ...providers.response import FinishReason, AudioResponse, MediaResponse, Reasoning, HiddenResponse, JsonResponse
44 43 from ...client.helper import filter_markdown
@@ -49,10 +48,7 @@ from ...image import is_allowed_extension, process_image, MEDIA_TYPE_MAP, is_saf
49 48 from ...cookies import get_cookies_dir
50 49 from ...image.copy_images import secure_filename, get_source_url, get_media_dir, copy_media
51 50 from ...client.service import get_model_and_provider
52 from ...providers.any_model_map import model_map
53 from ... import Provider
54 from ... import models
55 from ...Provider import ProviderUtils
51 from ...client.factory import AbstractClientFactory
56 52 from .api import Api
57 53
58 54 logger = logging.getLogger(__name__)
@@ -260,8 +256,8 @@ class Backend_Api(Api):
260 256
261 257 # Resolve provider class
262 258 try:
263 provider_class = ProviderUtils.get_by_label(provider)
264 except ValueError as e:
259 provider_class = AbstractClientFactory.create_provider(None, provider)
260 except ProviderNotFoundError as e:
265 261 return jsonify({"error": {"message": str(e)}}), 404
266 262
267 263 if request.method == 'GET':
@@ -345,25 +341,16 @@ class Backend_Api(Api):
345 341 json_data['timeout'] = app.timeout
346 342 if app.stream_timeout:
347 343 json_data['stream_timeout'] = app.stream_timeout
348 if app.demo and not json_data.get("provider"):
349 model = json_data.get("model")
350 if model != "default" and model in models.demo_models:
351 json_data["provider"] = random.choice(models.demo_models[model][1])
352 else:
353 json_data["provider"] = models.HuggingFace
354 344 if app.demo:
355 345 json_data["user"] = request.headers.get("x-user", "error")
356 346 json_data["referer"] = request.headers.get("referer", "")
357 347 json_data["user-agent"] = request.headers.get("user-agent", "")
358 348
359 349 kwargs = self._prepare_conversation_kwargs(json_data)
360 provider = kwargs.pop("provider", None)
361 if provider and provider not in Provider.__map__:
362 if provider in model_map:
363 kwargs['model'] = provider
364 provider = None
365 else:
366 return jsonify({"error": {"message": "Provider not found"}}), 404
350 try:
351 provider = AbstractClientFactory.create_provider(None, kwargs.pop("provider", None))
352 except ProviderNotFoundError as e:
353 return jsonify({"error": {"message": str(e)}}), 404
367 354 return self.app.response_class(
368 355 safe_iter_generator(self._create_response_stream(
369 356 kwargs,
@@ -406,11 +393,11 @@ class Backend_Api(Api):
406 393 @app.route('/backend-api/v2/quota/<provider>', methods=['GET'])
407 394 async def get_quota(provider: str):
408 395 try:
409 provider_handler = convert_to_provider(provider)
410 except ProviderNotFoundError:
411 return "Provider not found", 404
396 provider_handler = AbstractClientFactory.create_provider(None, provider)
397 except ProviderNotFoundError as e:
398 return jsonify({"error": {"message": str(e)}}), 404
412 399 if not hasattr(provider_handler, "get_quota"):
413 return "Provider doesn't support get_quota", 500
400 return jsonify({"error": {"message": "Provider doesn't support get_quota"}}), 500
414 401 request_api_key = request.headers.get("x-api-key")
415 402 try:
416 403 return jsonify(await provider_handler.get_quota(api_key=request_api_key))
@@ -751,11 +738,11 @@ class Backend_Api(Api):
751 738
752 739 def handle_synthesize(self, provider: str):
753 740 try:
754 provider_handler = convert_to_provider(provider)
755 except ProviderNotFoundError:
756 return "Provider not found", 404
741 provider_handler = AbstractClientFactory.create_provider(None, provider)
742 except ProviderNotFoundError as e:
743 return jsonify({"error": {"message": str(e)}}), 404
757 744 if not hasattr(provider_handler, "synthesize"):
758 return "Provider doesn't support synthesize", 500
745 return jsonify({"error": {"message": "Provider doesn't support synthesize"}}), 500
759 746 response_data = provider_handler.synthesize({**request.args})
760 747 if asyncio.iscoroutinefunction(provider_handler.synthesize):
761 748 response_data = asyncio.run(response_data)