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

XFEstudio/gpt4free

Fix unittests on Github

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

代码差异

2 个文件 +28 -8
Modified g4f/Provider/hf/__init__.py +3 -0
@@ -9,6 +9,7 @@ from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
9 9 from .HuggingChat import HuggingChat
10 10 from .HuggingFaceAPI import HuggingFaceAPI
11 11 from .HuggingFaceInference import HuggingFaceInference
12 from .models import model_aliases
12 13 from ... import debug
13 14
14 15 class HuggingFace(AsyncGeneratorProvider, ProviderModelMixin):
@@ -24,6 +25,8 @@ class HuggingFace(AsyncGeneratorProvider, ProviderModelMixin):
24 25 cls.image_models = HuggingFaceInference.image_models
25 26 return cls.models
26 27
28 model_aliases = model_aliases
29
27 30 @classmethod
28 31 async def create_async_generator(
29 32 cls,
Modified g4f/api/__init__.py +25 -8
@@ -6,7 +6,6 @@ import uvicorn
6 6 import secrets
7 7 import os
8 8 import shutil
9 import time
10 9 from email.utils import formatdate
11 10 import os.path
12 11 import hashlib
@@ -38,7 +37,7 @@ import g4f.debug
38 37 from g4f.client import AsyncClient, ChatCompletion, ImagesResponse, convert_to_provider
39 38 from g4f.providers.response import BaseConversation, JsonConversation
40 39 from g4f.client.helper import filter_none
41 from g4f.image import is_data_uri_an_image, images_dir
40 from g4f.image import is_data_uri_an_image, images_dir, copy_images
42 41 from g4f.errors import ProviderNotFoundError, ModelNotFoundError, MissingAuthError, NoValidHarFileError
43 42 from g4f.cookies import read_cookie_files, get_cookies_dir
44 43 from g4f.Provider import ProviderType, ProviderUtils, __providers__
@@ -50,6 +49,7 @@ from .stubs import (
50 49 ErrorResponseModel, ProviderResponseDetailModel,
51 50 FileResponseModel, UploadResponseModel, Annotated
52 51 )
52 from g4f import debug
53 53
54 54 logger = logging.getLogger(__name__)
55 55
@@ -72,7 +72,7 @@ def create_app():
72 72 api.register_routes()
73 73 api.register_authorization()
74 74 api.register_validation_exception_handler()
75
75
76 76 if AppConfig.gui:
77 77 gui_app = WSGIMiddleware(get_gui_app(AppConfig.demo))
78 78 app.mount("/", gui_app)
@@ -539,12 +539,12 @@ class Api:
539 539 response_data = provider_handler.synthesize({**request.query_params})
540 540 content_type = getattr(provider_handler, "synthesize_content_type", "application/octet-stream")
541 541 return StreamingResponse(response_data, media_type=content_type)
542
542
543 543 @self.app.get("/json/{filename}")
544 544 async def get_json(filename, request: Request):
545 545 return ""
546 546
547 @self.app.get("/images/{filename}", response_class=FileResponse, responses={
547 @self.app.get("/images/{filename}", responses={
548 548 HTTP_200_OK: {"content": {"image/*": {}}},
549 549 HTTP_404_NOT_FOUND: {}
550 550 })
@@ -558,7 +558,7 @@ class Api:
558 558 stat_result.st_mtime = int(f"{filename.split('_')[0]}") if filename.startswith("1") else 0
559 559 headers = {
560 560 "cache-control": "public, max-age=31536000",
561 "content-type": f"image/{ext.replace('jpg', 'jepg')}",
561 "content-type": f"image/{ext.replace('jpg', 'jpeg')[1:] or 'jpeg'}",
562 562 "content-length": str(stat_result.st_size),
563 563 "last-modified": formatdate(stat_result.st_mtime, usegmt=True),
564 564 "etag": f'"{hashlib.md5(filename.encode()).hexdigest()}"',
@@ -576,8 +576,25 @@ class Api:
576 576 except KeyError:
577 577 pass
578 578 if not os.path.isfile(target):
579 return Response(status_code=HTTP_404_NOT_FOUND)
580 return response
579 source_url = str(request.query_params).split("url=", 1)
580 if len(source_url) > 1:
581 source_url = source_url[1]
582 source_url = source_url.replace("%2F", "/").replace("%3A", ":").replace("%3F", "?")
583 if source_url.startswith("http"):
584 await copy_images(
585 [source_url],
586 target=target)
587 debug.log(f"Image copied from {source_url}")
588 if not os.path.isfile(target):
589 return ErrorResponse.from_message("File not found", HTTP_404_NOT_FOUND)
590 async def stream():
591 with open(target, "rb") as file:
592 while True:
593 chunk = file.read(65536)
594 if not chunk:
595 break
596 yield chunk
597 return StreamingResponse(stream(), headers=headers)
581 598
582 599 def format_exception(e: Union[Exception, str], config: Union[ChatCompletionsConfig, ImageGenerationConfig] = None, image: bool = False) -> str:
583 600 last_provider = {} if not image else g4f.get_last_provider(True)