mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-05 18:20:35 -08:00
- **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.
100 lines
3.6 KiB
Python
100 lines
3.6 KiB
Python
from __future__ import annotations
|
|
|
|
from ..providers.types import BaseProvider, ProviderType
|
|
from ..providers.retry_provider import RetryProvider, IterListProvider
|
|
from ..providers.base_provider import AsyncProvider, AsyncGeneratorProvider
|
|
from ..providers.create_images import CreateImagesProvider
|
|
from .. import debug
|
|
try:
|
|
from .deprecated import *
|
|
except ImportError as e:
|
|
debug.error("Deprecated providers not loaded:", e)
|
|
from .needs_auth import *
|
|
from .template import OpenaiTemplate, BackendApi
|
|
from .hf import HuggingFace, HuggingChat, HuggingFaceAPI, HuggingFaceInference, HuggingFaceMedia
|
|
try:
|
|
from .not_working import *
|
|
except ImportError as e:
|
|
debug.error("Not working providers not loaded:", e)
|
|
try:
|
|
from .local import *
|
|
except ImportError as e:
|
|
debug.error("Local providers not loaded:", e)
|
|
try:
|
|
from .hf_space import *
|
|
except ImportError as e:
|
|
debug.error("HuggingFace Space providers not loaded:", e)
|
|
try:
|
|
from .mini_max import HailuoAI, MiniMax
|
|
except ImportError as e:
|
|
debug.error("MiniMax providers not loaded:", e)
|
|
try:
|
|
from .audio import EdgeTTS
|
|
except ImportError as e:
|
|
debug.error("Audio providers not loaded:", e)
|
|
|
|
try:
|
|
from .AllenAI import AllenAI
|
|
from .ARTA import ARTA
|
|
from .Blackbox import Blackbox
|
|
from .Chatai import Chatai
|
|
from .ChatGLM import ChatGLM
|
|
from .ChatGpt import ChatGpt
|
|
from .ChatGptEs import ChatGptEs
|
|
from .Cloudflare import Cloudflare
|
|
from .Copilot import Copilot
|
|
from .DDG import DDG
|
|
from .DeepInfraChat import DeepInfraChat
|
|
from .DuckDuckGo import DuckDuckGo
|
|
from .Dynaspark import Dynaspark
|
|
except ImportError as e:
|
|
debug.error("Providers not loaded (A-D):", e)
|
|
try:
|
|
from .Free2GPT import Free2GPT
|
|
from .FreeGpt import FreeGpt
|
|
from .FreeRouter import FreeRouter
|
|
from .GizAI import GizAI
|
|
from .Glider import Glider
|
|
from .Goabror import Goabror
|
|
from .ImageLabs import ImageLabs
|
|
from .Jmuz import Jmuz
|
|
from .LambdaChat import LambdaChat
|
|
from .Liaobots import Liaobots
|
|
from .LMArenaProvider import LMArenaProvider
|
|
from .OIVSCode import OIVSCode
|
|
except ImportError as e:
|
|
debug.error("Providers not loaded (F-L):", e)
|
|
try:
|
|
from .PerplexityLabs import PerplexityLabs
|
|
from .Pi import Pi
|
|
from .Pizzagpt import Pizzagpt
|
|
from .PollinationsAI import PollinationsAI
|
|
from .PollinationsImage import PollinationsImage
|
|
from .TeachAnything import TeachAnything
|
|
from .TypeGPT import TypeGPT
|
|
from .You import You
|
|
from .Websim import Websim
|
|
from .Yqcloud import Yqcloud
|
|
except ImportError as e:
|
|
debug.error("Providers not loaded (M-Z):", e)
|
|
|
|
import sys
|
|
|
|
__modules__: list = [
|
|
getattr(sys.modules[__name__], provider) for provider in dir()
|
|
if not provider.startswith("__")
|
|
]
|
|
__providers__: list[ProviderType] = [
|
|
provider for provider in __modules__
|
|
if isinstance(provider, type)
|
|
and issubclass(provider, BaseProvider)
|
|
]
|
|
__all__: list[str] = [
|
|
provider.__name__ for provider in __providers__
|
|
]
|
|
__map__: dict[str, ProviderType] = {
|
|
provider.__name__: provider for provider in __providers__
|
|
}
|
|
|
|
class ProviderUtils:
|
|
convert: dict[str, ProviderType] = __map__
|