mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-11 03:00:23 +08:00
feat: add EdgeTTS audio provider and global image→media refactor
- **Docs** - `docs/file.md`: update upload instructions to use inline `bucket` content parts instead of `tool_calls/bucket_tool`. - `docs/media.md`: add asynchronous audio transcription example, detailed explanation, and notes. - **New audio provider** - Add `g4f/Provider/audio/EdgeTTS.py` implementing Edge Text‑to‑Speech (`EdgeTTS`). - Create `g4f/Provider/audio/__init__.py` for provider export. - Register provider in `g4f/Provider/__init__.py`. - **Refactor image → media** - Introduce `generated_media/` directory and `get_media_dir()` helper in `g4f/image/copy_images.py`; add `ensure_media_dir()`; keep back‑compat with legacy `generated_images/`. - Replace `images_dir` references with `get_media_dir()` across: - `g4f/api/__init__.py` - `g4f/client/stubs.py` - `g4f/gui/server/api.py` - `g4f/gui/server/backend_api.py` - `g4f/image/copy_images.py` - Rename CLI/API config field/flag from `image_provider` to `media_provider` (`g4f/cli.py`, `g4f/api/__init__.py`, `g4f/client/__init__.py`). - Extend `g4f/image/__init__.py` - add `MEDIA_TYPE_MAP`, `get_extension()` - revise `is_allowed_extension()`, `to_input_audio()` to support wider media types. - **Provider adjustments** - `g4f/Provider/ARTA.py`: swap `raise_error()` parameter order. - `g4f/Provider/Cloudflare.py`: drop unused `MissingRequirementsError` import; move `get_args_from_nodriver()` inside try; handle `FileNotFoundError`. - **Core enhancements** - `g4f/providers/any_provider.py`: use `default_model` instead of literal `"default"`; broaden model/provider matching; update model list cleanup. - `g4f/models.py`: safeguard provider count logic when model name is falsy. - `g4f/providers/base_provider.py`: catch `json.JSONDecodeError` when reading auth cache, delete corrupted file. - `g4f/providers/response.py`: allow `AudioResponse` to accept extra kwargs. - **Misc** - Remove obsolete `g4f/image.py`. - `g4f/Provider/Cloudflare.py`, `g4f/client/types.py`: minor whitespace and import tidy‑ups.
This commit is contained in:
@@ -25,7 +25,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, get_source_url, images_dir
|
||||
from ...image.copy_images import secure_filename, get_source_url, get_media_dir
|
||||
from ... import ChatCompletion
|
||||
from ... import models
|
||||
from .api import Api
|
||||
@@ -346,11 +346,12 @@ class Backend_Api(Api):
|
||||
@app.route('/search/<search>', methods=['GET'])
|
||||
def find_media(search: str):
|
||||
safe_search = [secure_filename(chunk.lower()) for chunk in search.split("+")]
|
||||
if not os.access(images_dir, os.R_OK):
|
||||
media_dir = get_media_dir()
|
||||
if not os.access(media_dir, os.R_OK):
|
||||
return jsonify({"error": {"message": "Not found"}}), 404
|
||||
if search not in self.match_files:
|
||||
self.match_files[search] = {}
|
||||
for root, _, files in os.walk(images_dir):
|
||||
for root, _, files in os.walk(media_dir):
|
||||
for file in files:
|
||||
mime_type = is_allowed_extension(file)
|
||||
if mime_type is not None:
|
||||
@@ -438,7 +439,7 @@ class Backend_Api(Api):
|
||||
def get_provider_models(self, provider: str):
|
||||
api_key = request.headers.get("x_api_key")
|
||||
api_base = request.headers.get("x_api_base")
|
||||
ignored = request.headers.get("x_ignored").split()
|
||||
ignored = request.headers.get("x_ignored", "").split()
|
||||
models = super().get_provider_models(provider, api_key, api_base, ignored)
|
||||
if models is None:
|
||||
return "Provider not found", 404
|
||||
|
Reference in New Issue
Block a user