mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-08 17:50:16 +08:00
Add HuggingFaceMedia provider with Video Generation
Add Support for Video Response in UI Improve Support for Audio Response in UI Fix ModelNotSupported errors in HuggingSpace providers
This commit is contained in:
@@ -14,9 +14,8 @@ from typing import Generator
|
||||
from pathlib import Path
|
||||
from urllib.parse import quote_plus
|
||||
from hashlib import sha256
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
from ...image import is_allowed_extension, to_image
|
||||
from ...image import is_allowed_extension
|
||||
from ...client.service import convert_to_provider
|
||||
from ...providers.asyncio import to_sync_generator
|
||||
from ...client.helper import filter_markdown
|
||||
@@ -25,6 +24,7 @@ from ...tools.run_tools import iter_run_tools
|
||||
from ...errors import ProviderNotFoundError
|
||||
from ...image import is_allowed_extension
|
||||
from ...cookies import get_cookies_dir
|
||||
from ...image.copy_images import secure_filename
|
||||
from ... import ChatCompletion
|
||||
from ... import models
|
||||
from .api import Api
|
||||
@@ -130,16 +130,14 @@ class Backend_Api(Api):
|
||||
if model != "default" and model in models.demo_models:
|
||||
json_data["provider"] = random.choice(models.demo_models[model][1])
|
||||
else:
|
||||
if not model or model == "default":
|
||||
json_data["model"] = models.demo_models["default"][0].name
|
||||
json_data["provider"] = random.choice(models.demo_models["default"][1])
|
||||
json_data["provider"] = models.HuggingFace
|
||||
kwargs = self._prepare_conversation_kwargs(json_data)
|
||||
return self.app.response_class(
|
||||
self._create_response_stream(
|
||||
kwargs,
|
||||
json_data.get("conversation_id"),
|
||||
json_data.get("provider"),
|
||||
json_data.get("download_images", True),
|
||||
json_data.get("download_media", True),
|
||||
),
|
||||
mimetype='text/event-stream'
|
||||
)
|
||||
@@ -331,21 +329,26 @@ class Backend_Api(Api):
|
||||
[f.write(f"{filename}\n") for filename in filenames]
|
||||
return {"bucket_id": bucket_id, "files": filenames, "media": media}
|
||||
|
||||
@app.route('/backend-api/v2/files/<bucket_id>/media/<filename>', methods=['GET'])
|
||||
def get_media(bucket_id, filename):
|
||||
bucket_id = secure_filename(bucket_id)
|
||||
bucket_dir = get_bucket_dir(bucket_id)
|
||||
@app.route('/files/<bucket_id>/media/<filename>', methods=['GET'])
|
||||
def get_media(bucket_id, filename, dirname: str = None):
|
||||
bucket_dir = get_bucket_dir(secure_filename(bucket_id), secure_filename(dirname))
|
||||
media_dir = os.path.join(bucket_dir, "media")
|
||||
if os.path.exists(media_dir):
|
||||
return send_from_directory(os.path.abspath(media_dir), filename)
|
||||
return "File not found", 404
|
||||
return "Not found", 404
|
||||
|
||||
@app.route('/files/<dirname>/<bucket_id>/media/<filename>', methods=['GET'])
|
||||
def get_media_sub(dirname, bucket_id, filename):
|
||||
return get_media(bucket_id, filename, dirname)
|
||||
|
||||
@app.route('/backend-api/v2/files/<bucket_id>/<filename>', methods=['PUT'])
|
||||
def upload_file(bucket_id, filename):
|
||||
bucket_id = secure_filename(bucket_id)
|
||||
bucket_dir = get_bucket_dir(bucket_id)
|
||||
def upload_file(bucket_id, filename, dirname: str = None):
|
||||
bucket_dir = secure_filename(bucket_id if dirname is None else dirname)
|
||||
bucket_dir = get_bucket_dir(bucket_dir)
|
||||
filename = secure_filename(filename)
|
||||
bucket_path = Path(bucket_dir)
|
||||
if dirname is not None:
|
||||
bucket_path = bucket_path / secure_filename(bucket_id)
|
||||
|
||||
if not supports_filename(filename):
|
||||
return jsonify({"error": {"message": f"File type not allowed"}}), 400
|
||||
@@ -365,6 +368,10 @@ class Backend_Api(Api):
|
||||
return jsonify({"message": f"File '{filename}' uploaded successfully to bucket '{bucket_id}'"}), 201
|
||||
except Exception as e:
|
||||
return jsonify({"error": {"message": f"Error uploading file: {str(e)}"}}), 500
|
||||
|
||||
@app.route('/backend-api/v2/files/<bucket_id>/<dirname>/<filename>', methods=['PUT'])
|
||||
def upload_file_sub(bucket_id, filename, dirname):
|
||||
return upload_file(bucket_id, filename, dirname)
|
||||
|
||||
@app.route('/backend-api/v2/upload_cookies', methods=['POST'])
|
||||
def upload_cookies():
|
||||
|
Reference in New Issue
Block a user