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:
hlohaus
2025-03-23 05:27:52 +01:00
parent 97f1964bb6
commit 8eaaf5db95
21 changed files with 356 additions and 128 deletions

View File

@@ -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():