summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README-DE.md726
-rw-r--r--README.md135
-rw-r--r--docs/webview.md30
-rw-r--r--etc/tool/contributers.py6
-rw-r--r--etc/unittest/integration.py4
-rw-r--r--g4f/gui/server/api.py4
-rw-r--r--g4f/gui/webview.py8
-rw-r--r--windows/docker-compose.yml19
-rw-r--r--windows/icon.icobin0 -> 4286 bytes
-rw-r--r--windows/main.py22
-rw-r--r--windows/main.spec (renamed from g4f/gui/webview.spec)9
11 files changed, 177 insertions, 786 deletions
diff --git a/README-DE.md b/README-DE.md
deleted file mode 100644
index dae1f8b2..00000000
--- a/README-DE.md
+++ /dev/null
@@ -1,726 +0,0 @@
-<a href="./README.md">
- <img src="https://img.shields.io/badge/open in-🇬🇧 english-blue.svg" alt="Open in EN">
-</a>
-
-![248433934-7886223b-c1d1-4260-82aa-da5741f303bb](https://github.com/xtekky/gpt4free/assets/98614666/ea012c87-76e0-496a-8ac4-e2de090cc6c9)
-
-<a href='https://ko-fi.com/xtekky' target='_blank'><img height='35' style='border:0px;height:46px;' src='https://az743702.vo.msecnd.net/cdn/kofi3.png?v=0' border='0' alt='Kauf mir einen Kaffee auf ko-fi.com' />
-
-<div id="top"></div>
-
-> Durch die Nutzung dieses Repositories oder jeglichen damit verbundenen Code stimmen Sie dem [Rechtshinweis](LEGAL_NOTICE.md) zu. Der Autor ist nicht verantwortlich für Kopien, Forks, erneute Uploads durch andere Benutzer oder sonstige mit GPT4Free verbundene Aktivitäten. Dies ist das einzige Konto und Repository des Autors. Um Identitätsdiebstahl oder unverantwortliche Handlungen zu verhindern, halten Sie sich bitte an die GNU GPL-Lizenz, die dieses Repository verwendet.
-
-```sh
-pip install -U g4f
-```
-
-
-## 🆕 Was gibt es Neues
-
-- Tritt unserem Telegram-Kanal bei: [t.me/g4f_channel](https://telegram.me/g4f_channel)
-- Tritt unserer Discord-Gruppe bei: [discord.gg/XfybzPXPH5](https://discord.gg/XfybzPXPH5)
-- Erkunde die g4f-Dokumentation (unvollständig): [g4f.mintlify.app](https://g4f.mintlify.app) | Trage zur Dokumentation bei: [github.com/xtekky/gpt4free-docs](https://github.com/xtekky/gpt4free-docs)
-
-
-## 📚 Inhaltsverzeichnis
-
-- [🆕 Was ist neu](#-was-ist-neu)
-- [📚 Inhaltsverzeichnis](#-inhaltsverzeichnis)
-- [🛠️ Erste Schritte](#️-erste-schritte)
- - [Voraussetzungen:](#voraussetzungen)
- - [Projekt einrichten:](#projekt-einrichten)
- - [Installation über PyPi](#installation-über-pypi)
- - [oder](#oder)
- - [Einrichten mit Docker:](#einrichten-mit-docker)
-- [💡 Verwendung](#-verwendung)
- - [Das `g4f` Paket](#das-g4f-paket)
- - [ChatCompletion](#chatcompletion)
- - [Vervollständigung](#vervollständigung)
- - [Anbieter](#anbieter)
- - [Cookies erforderlich](#cookies-erforderlich)
- - [Async-Unterstützung](#async-unterstützung)
- - [Proxy- und Timeout-Unterstützung](#proxy-und-timeout-unterstützung)
- - [Interference openai-proxy API (Verwendung mit openai Python-Paket)](#interference-openai-proxy-api-verwendung-mit-openai-python-paket)
- - [API von PyPi-Paket ausführen](#api-von-pypi-paket-ausführen)
- - [API von Repository ausführen](#api-von-repository-ausführen)
-- [🚀 Anbieter und Modelle](#-anbieter-und-modelle)
- - [GPT-4](#gpt-4)
- - [GPT-3.5](#gpt-35)
- - [Andere](#andere)
- - [Modelle](#modelle)
-- [🔗 Verwandte GPT4Free-Projekte](#-verwandte-gpt4free-projekte)
-- [🤝 Mitwirken](#-mitwirken)
- - [Anbieter mit KI-Tool erstellen](#anbieter-mit-ki-tool-erstellen)
- - [Anbieter erstellen](#anbieter-erstellen)
-- [🙌 Mitwirkende](#-mitwirkende)
-- [©️ Urheberrecht](#️-urheberrecht)
-- [⭐ Sternenhistorie](#-sternenhistorie)
-- [📄 Lizenz](#-lizenz)
-
-
-## 🛠️ Erste Schritte
-
-#### Voraussetzungen:
-
-1. [Python herunterladen und installieren](https://www.python.org/downloads/) (Version 3.10+ wird empfohlen).
-
-#### Projekt einrichten:
-
-##### Installation über pypi
-
-```
-pip install -U g4f
-```
-
-##### oder
-
-1. Klonen Sie das GitHub-Repository:
-
-```
-git clone https://github.com/xtekky/gpt4free.git
-```
-
-2. Navigieren Sie zum Projektverzeichnis:
-
-```
-cd gpt4free
-```
-
-3. (Empfohlen) Erstellen Sie eine Python-Virtual-Umgebung:
-Sie können der [Python-Offiziellen Dokumentation](https://docs.python.org/3/tutorial/venv.html) für virtuelle Umgebungen folgen.
-
-```
-python3 -m venv venv
-```
-
-4. Aktivieren Sie die virtuelle Umgebung:
- - Unter Windows:
- ```
- .\venv\Scripts\activate
- ```
- - Unter macOS und Linux:
- ```
- source venv/bin/activate
- ```
-5. Installieren Sie die erforderlichen Python-Pakete aus `requirements.txt`:
-
-```
-pip install -r requirements.txt
-```
-
-6. Erstellen Sie eine Datei `test.py` im Stammverzeichnis und beginnen Sie mit der Verwendung des Repositories. Weitere Anweisungen finden Sie unten
-
-```py
-import g4f
-
-...
-```
-
-##### Einrichten mit Docker:
-
-Wenn Docker installiert ist, können Sie das Projekt ohne manuelle Installation von Abhängigkeiten einfach einrichten und ausführen.
-
-1. Stellen Sie zunächst sicher, dass sowohl Docker als auch Docker Compose installiert sind.
-
- - [Docker installieren](https://docs.docker.com/get-docker/)
- - [Docker Compose installieren](https://docs.docker.com/compose/install/)
-
-2. Klonen Sie das GitHub-Repo:
-
-```bash
-git clone https://github.com/xtekky/gpt4free.git
-```
-
-3. Navigieren Sie zum Projektverzeichnis:
-
-```bash
-cd gpt4free
-```
-
-4. Erstellen Sie das Docker-Image:
-
-```bash
-docker-compose build
-```
-
-5. Starten Sie den Dienst mit Docker Compose:
-
-```bash
-docker-compose up
-```
-
-Ihr Server wird jetzt unter `http://localhost:1337` ausgeführt. Sie können mit der API interagieren oder Ihre Tests wie gewohnt ausführen.
-
-Um die Docker-Container zu stoppen, führen Sie einfach aus:
-
-```bash
-docker-compose down
-```
-
-> [!Note]
-> Wenn Sie Docker verwenden, werden alle Änderungen, die Sie an Ihren lokalen Dateien vornehmen, im Docker-Container durch die Volumenabbildung in der `docker-compose.yml`-Datei widergespiegelt. Wenn Sie jedoch Abhängigkeiten hinzufügen oder entfernen, müssen Sie das Docker-Image mit `docker-compose build` neu erstellen.
-
-
-## 💡 Verwendung
-
-### Das `g4f` Paket
-
-#### ChatCompletion
-
-```python
-import g4f
-
-g4f.debug.logging = True # Aktiviere das Protokollieren
-g4f.debug.check_version = False # Deaktiviere die automatische Versionsüberprüfung
-print(g4f.debug.get_version()) # Überprüfe die Version
-print(g4f.Provider.Bing.params) # Unterstützte Argumente
-
-# Automatische Auswahl des Anbieters
-
-# Gestreamte Vervollständigung
-response = g4f.ChatCompletion.create(
- model="gpt-3.5-turbo",
- messages=[{"role": "user", "content": "Hallo"}],
- stream=True,
-)
-
-for message in response:
- print(message, flush=True, end='')
-
-# Normale Antwort
-response = g4f.ChatCompletion.create(
- model=g4f.models.gpt_4,
- messages=[{"role": "user", "content": "Hallo"}],
-) # Alternative Modellkonfiguration
-
-print(response)
-```
-
-##### Completion
-
-```python
-import g4f
-
-erlaubte_modelle = [
- 'code-davinci-002',
- 'text-ada-001',
- 'text-babbage-001',
- 'text-curie-001',
- 'text-davinci-002',
- 'text-davinci-003'
-]
-
-response = g4f.Completion.create(
- model='text-davinci-003',
- prompt='sage, dass dies ein Test ist'
-)
-
-print(response)
-```
-
-##### Anbieter
-
-```python
-import g4f
-
-from g4f.Provider import (
- AItianhu,
- Aichat,
- Bard,
- Bing,
- ChatBase,
- ChatgptAi,
- OpenaiChat,
- Vercel,
- You,
- Yqcloud,
-)
-
-# Festlegen des Anbieters
-response = g4f.ChatCompletion.create(
- model="gpt-3.5-turbo",
- provider=g4f.Provider.Aichat,
- messages=[{"role": "user", "content": "Hallo"}],
- stream=True,
-)
-
-for message in response:
- print(message)
-```
-
-##### Verwendung des Browsers
-
-Einige Anbieter verwenden einen Browser, um den Bot-Schutz zu umgehen.
-Sie verwenden den Selenium-Webtreiber, um den Browser zu steuern.
-Die Browsereinstellungen und die Anmeldedaten werden in einem benutzerdefinierten Verzeichnis gespeichert.
-Wenn der Headless-Modus aktiviert ist, werden die Browserfenster unsichtbar geladen.
-Aus Leistungsgründen wird empfohlen, die Browserinstanzen wiederzuverwenden
-und sie am Ende selbst zu schließen:
-
-```python
-import g4f
-from undetected_chromedriver import Chrome, ChromeOptions
-from g4f.Provider import (
- Bard,
- Poe,
- AItianhuSpace,
- MyShell,
- Phind,
- PerplexityAi,
-)
-
-options = ChromeOptions()
-options.add_argument("--incognito")
-browser = Chrome(options=options, headless=True)
-for idx in range(10):
- response = g4f.ChatCompletion.create(
- model=g4f.models.default,
- provider=g4f.Provider.Phind,
- messages=[{"role": "user", "content": "Schlage mir einen Namen vor."}],
- browser=browser
- )
- print(f"{idx}:", response)
-browser.quit()
-```
-
-##### Erforderliche Cookies
-
-Cookies sind für die ordnungsgemäße Funktion einiger Dienstanbieter unerlässlich. Es ist unerlässlich, eine aktive Sitzung aufrechtzuerhalten, die in der Regel durch das Anmelden in Ihrem Konto erreicht wird.
-
-Wenn Sie das g4f-Paket lokal ausführen, ruft das Paket automatisch Cookies aus Ihrem Webbrowser ab, indem es die `get_cookies`-Funktion verwendet. Wenn Sie es jedoch nicht lokal ausführen, müssen Sie die Cookies manuell bereitstellen, indem Sie sie als Parameter unter Verwendung des `cookies`-Parameters übergeben.
-
-```python
-import g4f
-
-from g4f.Provider import (
- Bing,
- HuggingChat,
- OpenAssistant,
-)
-
-# Verwendung
-response = g4f.ChatCompletion.create(
- model=g4f.models.default,
- messages=[{"role": "user", "content": "Hallo"}],
- provider=Bing,
- #cookies=g4f.get_cookies(".google.com"),
- cookies={"cookie_name": "value", "cookie_name2": "value2"},
- auth=True
-)
-```
-
-##### Unterstützung für asynchrone Ausführung
-
-Um die Geschwindigkeit und Gesamtleistung zu verbessern, führen Sie Anbieter asynchron aus. Die Gesamtausführungszeit wird durch die Dauer der langsamsten Anbieterausführung bestimmt.
-
-```python
-import g4f
-import asyncio
-
-_providers = [
- g4f.Provider.Aichat,
- g4f.Provider.ChatBase,
- g4f.Provider.Bing,
- g4f.Provider.GptGo,
- g4f.Provider.You,
- g4f.Provider.Yqcloud,
-]
-
-async def run_provider(provider: g4f.Provider.BaseProvider):
- try:
- response = await g4f.ChatCompletion.create_async(
- model=g4f.models.default,
- messages=[{"role": "user", "content": "Hallo"}],
- provider=provider,
- )
- print(f"{provider.__name__}:", response)
- except Exception as e:
- print(f"{provider.__name__}:", e)
-
-async def run_all():
- calls = [
- run_provider(provider) for provider in _providers
- ]
- await asyncio.gather(*calls)
-
-asyncio.run(run_all())
-```
-
-##### Unterstützung für Proxy und Timeout
-
-Alle Anbieter unterstützen das Angeben eines Proxy und das Erhöhen des Timeouts in den Erstellungsfunktionen.
-
-```python
-import g4f
-
-response = g4f.ChatCompletion.create(
- model=g4f.models.default,
- messages=[{"role": "user", "content": "Hallo"}],
- proxy="http://host:port",
- # oder socks5://user:pass@host:port
- timeout=120, # in Sekunden
-)
-
-print(f"Ergebnis:", response)
-```
-
-### Interference openai-proxy API (Verwendung mit dem openai Python-Paket)
-
-#### Führen Sie die Interference API aus dem PyPi-Paket aus
-
-```python
-from g4f.api import run_api
-
-run_api()
-```
-
-#### Führen Sie die Interference API aus dem Repository aus
-
-Wenn Sie die Einbettungsfunktion verwenden möchten, benötigen Sie einen Hugging Face-Token. Sie können einen unter [Hugging Face Tokens](https://huggingface.co/settings/tokens) erhalten. Stellen Sie sicher, dass Ihre Rolle auf Schreiben eingestellt ist. Wenn Sie Ihren Token haben, verwenden Sie ihn einfach anstelle des OpenAI-API-Schlüssels.
-
-Server ausführen:
-
-```sh
-g4f api
-```
-
-oder
-
-```sh
-python -m g4f.api
-```
-
-```python
-import openai
-
-# Setzen Sie Ihren Hugging Face-Token als API-Schlüssel, wenn Sie Einbettungen verwenden
-# Wenn Sie keine Einbettungen verwenden, lassen Sie es leer
-openai.api_key = "IHR_HUGGING_FACE_TOKEN" # Ersetzen Sie dies durch Ihren tatsächlichen Token
-
-# Setzen Sie die API-Basis-URL, falls erforderlich, z.B. für eine lokale Entwicklungsumgebung
-openai.api_base = "http://localhost:1337/v1"
-
-def main():
- chat_completion = openai.ChatCompletion.create(
- model="gpt-3.5-turbo",
- messages=[{"role": "user", "content": "schreibe ein Gedicht über einen Baum"}],
- stream=True,
- )
-
- if isinstance(chat_completion, dict):
- # Nicht gestreamt
- print(chat_completion.choices[0].message.content)
- else:
- # Gestreamt
- for token in chat_completion:
- content = token["choices"][0]["delta"].get("content")
- if content is not None:
- print(content, end="", flush=True)
-
-if __name__ == "__main__":
- main()
-```
-
-## 🚀 Anbieter und Modelle
-
-### GPT-4
-
-| Website | Provider | GPT-3.5 | GPT-4 | Stream | Status | Auth |
-| ------ | ------- | ------- | ----- | ------ | ------ | ---- |
-| [bing.com](https://bing.com/chat) | `g4f.Provider.Bing` | ❌ | ✔️ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [chat.geekgpt.org](https://chat.geekgpt.org) | `g4f.Provider.GeekGpt` | ✔️ | ✔️ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [gptchatly.com](https://gptchatly.com) | `g4f.Provider.GptChatly` | ✔️ | ✔️ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [liaobots.site](https://liaobots.site) | `g4f.Provider.Liaobots` | ✔️ | ✔️ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [www.phind.com](https://www.phind.com) | `g4f.Provider.Phind` | ❌ | ✔️ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [raycast.com](https://raycast.com) | `g4f.Provider.Raycast` | ✔️ | ✔️ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
-
-### GPT-3.5
-
-| Website | Provider | GPT-3.5 | GPT-4 | Stream | Status | Auth |
-| ------ | ------- | ------- | ----- | ------ | ------ | ---- |
-| [www.aitianhu.com](https://www.aitianhu.com) | `g4f.Provider.AItianhu` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chat3.aiyunos.top](https://chat3.aiyunos.top/) | `g4f.Provider.AItianhuSpace` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [e.aiask.me](https://e.aiask.me) | `g4f.Provider.AiAsk` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chat-gpt.org](https://chat-gpt.org/chat) | `g4f.Provider.Aichat` | ✔️ | ❌ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [www.chatbase.co](https://www.chatbase.co) | `g4f.Provider.ChatBase` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [chatforai.store](https://chatforai.store) | `g4f.Provider.ChatForAi` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chatgpt.ai](https://chatgpt.ai) | `g4f.Provider.ChatgptAi` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [chatgptx.de](https://chatgptx.de) | `g4f.Provider.ChatgptX` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chat-shared2.zhile.io](https://chat-shared2.zhile.io) | `g4f.Provider.FakeGpt` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [freegpts1.aifree.site](https://freegpts1.aifree.site/) | `g4f.Provider.FreeGpt` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [gptalk.net](https://gptalk.net) | `g4f.Provider.GPTalk` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [ai18.gptforlove.com](https://ai18.gptforlove.com) | `g4f.Provider.GptForLove` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [gptgo.ai](https://gptgo.ai) | `g4f.Provider.GptGo` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [hashnode.com](https://hashnode.com) | `g4f.Provider.Hashnode` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [app.myshell.ai](https://app.myshell.ai/chat) | `g4f.Provider.MyShell` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [noowai.com](https://noowai.com) | `g4f.Provider.NoowAi` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chat.openai.com](https://chat.openai.com) | `g4f.Provider.OpenaiChat` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
-| [theb.ai](https://theb.ai) | `g4f.Provider.Theb` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
-| [sdk.vercel.ai](https://sdk.vercel.ai) | `g4f.Provider.Vercel` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [you.com](https://you.com) | `g4f.Provider.You` | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [chat9.yqcloud.top](https://chat9.yqcloud.top/) | `g4f.Provider.Yqcloud` | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [chat.acytoo.com](https://chat.acytoo.com) | `g4f.Provider.Acytoo` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [aibn.cc](https://aibn.cc) | `g4f.Provider.Aibn` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [ai.ls](https://ai.ls) | `g4f.Provider.Ails` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chatgpt4online.org](https://chatgpt4online.org) | `g4f.Provider.Chatgpt4Online` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chat.chatgptdemo.net](https://chat.chatgptdemo.net) | `g4f.Provider.ChatgptDemo` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chatgptduo.com](https://chatgptduo.com) | `g4f.Provider.ChatgptDuo` | ✔️ | ❌ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chatgptfree.ai](https://chatgptfree.ai) | `g4f.Provider.ChatgptFree` | ✔️ | ❌ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chatgptlogin.ai](https://chatgptlogin.ai) | `g4f.Provider.ChatgptLogin` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [cromicle.top](https://cromicle.top) | `g4f.Provider.Cromicle` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [gptgod.site](https://gptgod.site) | `g4f.Provider.GptGod` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [opchatgpts.net](https://opchatgpts.net) | `g4f.Provider.Opchatgpts` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-| [chat.ylokh.xyz](https://chat.ylokh.xyz) | `g4f.Provider.Ylokh` | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
-
-### Andere
-
-| Website | Provider | GPT-3.5 | GPT-4 | Stream | Status | Auth |
-| ------ | ------- | ------- | ----- | ------ | ------ | ---- |
-| [bard.google.com](https://bard.google.com) | `g4f.Provider.Bard` | ❌ | ❌ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
-| [deepinfra.com](https://deepinfra.com) | `g4f.Provider.DeepInfra` | ❌ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
-| [huggingface.co](https://huggingface.co/chat) | `g4f.Provider.HuggingChat` | ❌ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ✔️ |
-| [www.llama2.ai](https://www.llama2.ai) | `g4f.Provider.Llama2` | ❌ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
-| [open-assistant.io](https://open-assistant.io/chat) | `g4f.Provider.OpenAssistant` | ❌ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ✔️ |
-
-### Modelle
-
-| Model | Base Provider | Provider | Website |
-| --------------------------------------- | ------------- | ------------------- | ------------------------------------------- |
-| palm | Google | g4f.Provider.Bard | [bard.google.com](https://bard.google.com/) |
-| h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 | Hugging Face | g4f.Provider.H2o | [www.h2o.ai](https://www.h2o.ai/) |
-| h2ogpt-gm-oasst1-en-2048-falcon-40b-v1 | Hugging Face | g4f.Provider.H2o | [www.h2o.ai](https://www.h2o.ai/) |
-| h2ogpt-gm-oasst1-en-2048-open-llama-13b | Hugging Face | g4f.Provider.H2o | [www.h2o.ai](https://www.h2o.ai/) |
-| claude-instant-v1 | Anthropic | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| claude-v1 | Anthropic | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| claude-v2 | Anthropic | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| command-light-nightly | Cohere | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| command-nightly | Cohere | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| gpt-neox-20b | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| oasst-sft-1-pythia-12b | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| oasst-sft-4-pythia-12b-epoch-3.5 | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| santacoder | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| bloom | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| flan-t5-xxl | Hugging Face | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| code-davinci-002 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| gpt-3.5-turbo-16k | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| gpt-3.5-turbo-16k-0613 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| gpt-4-0613 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| text-ada-001 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| text-babbage-001 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| text-curie-001 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| text-davinci-002 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| text-davinci-003 | OpenAI | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| llama13b-v2-chat | Replicate | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-| llama7b-v2-chat | Replicate | g4f.Provider.Vercel | [sdk.vercel.ai](https://sdk.vercel.ai/) |
-
-
-## 🔗 Verwandte GPT4Free-Projekte
-
-<table>
- <thead align="center">
- <tr border: none;>
- <td><b>🎁 Projects</b></td>
- <td><b>⭐ Stars</b></td>
- <td><b>📚 Forks</b></td>
- <td><b>🛎 Issues</b></td>
- <td><b>📬 Pull requests</b></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><a href="https://github.com/xtekky/gpt4free"><b>gpt4free</b></a></td>
- <td><a href="https://github.com/xtekky/gpt4free/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/xtekky/gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/gpt4free/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/xtekky/gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/gpt4free/issues"><img alt="Issues" src="https://img.shields.io/github/issues/xtekky/gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/gpt4free/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/xtekky/gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <td><a href="https://github.com/xiangsx/gpt4free-ts"><b>gpt4free-ts</b></a></td>
- <td><a href="https://github.com/xiangsx/gpt4free-ts/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/xiangsx/gpt4free-ts?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xiangsx/gpt4free-ts/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/xiangsx/gpt4free-ts?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xiangsx/gpt4free-ts/issues"><img alt="Issues" src="https://img.shields.io/github/issues/xiangsx/gpt4free-ts?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xiangsx/gpt4free-ts/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/xiangsx/gpt4free-ts?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/zukixa/cool-ai-stuff/"><b>Free AI API's & Potential Providers List</b></a></td>
- <td><a href="https://github.com/zukixa/cool-ai-stuff/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/zukixa/cool-ai-stuff?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/zukixa/cool-ai-stuff/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/zukixa/cool-ai-stuff?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/zukixa/cool-ai-stuff/issues"><img alt="Issues" src="https://img.shields.io/github/issues/zukixa/cool-ai-stuff?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/zukixa/cool-ai-stuff/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/zukixa/cool-ai-stuff?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <tr>
- <td><a href="https://github.com/xtekky/chatgpt-clone"><b>ChatGPT-Clone</b></a></td>
- <td><a href="https://github.com/xtekky/chatgpt-clone/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/xtekky/chatgpt-clone?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/chatgpt-clone/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/xtekky/chatgpt-clone?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/chatgpt-clone/issues"><img alt="Issues" src="https://img.shields.io/github/issues/xtekky/chatgpt-clone?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/xtekky/chatgpt-clone/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/xtekky/chatgpt-clone?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/mishalhossin/Discord-Chatbot-Gpt4Free"><b>ChatGpt Discord Bot</b></a></td>
- <td><a href="https://github.com/mishalhossin/Discord-Chatbot-Gpt4Free/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/mishalhossin/Discord-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/mishalhossin/Discord-Chatbot-Gpt4Free/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/mishalhossin/Discord-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/mishalhossin/Discord-Chatbot-Gpt4Free/issues"><img alt="Issues" src="https://img.shields.io/github/issues/mishalhossin/Discord-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/mishalhossin/Coding-Chatbot-Gpt4Free/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/mishalhossin/Discord-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
-<tr>
- <td><a href="https://github.com/SamirXR/Nyx-Bot"><b>Nyx-Bot (Discord)</b></a></td>
- <td><a href="https://github.com/SamirXR/Nyx-Bot/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/SamirXR/Nyx-Bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/SamirXR/Nyx-Bot/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/SamirXR/Nyx-Bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/SamirXR/Nyx-Bot/issues"><img alt="Issues" src="https://img.shields.io/github/issues/SamirXR/Nyx-Bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/SamirXR/Nyx-Bot/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/SamirXR/Nyx-Bot?style=flat-square&labelColor=343b41"/></a></td>
-</tr>
- </tr>
- <tr>
- <td><a href="https://github.com/MIDORIBIN/langchain-gpt4free"><b>LangChain gpt4free</b></a></td>
- <td><a href="https://github.com/MIDORIBIN/langchain-gpt4free/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/MIDORIBIN/langchain-gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/MIDORIBIN/langchain-gpt4free/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/MIDORIBIN/langchain-gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/MIDORIBIN/langchain-gpt4free/issues"><img alt="Issues" src="https://img.shields.io/github/issues/MIDORIBIN/langchain-gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/MIDORIBIN/langchain-gpt4free/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/MIDORIBIN/langchain-gpt4free?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/HexyeDEV/Telegram-Chatbot-Gpt4Free"><b>ChatGpt Telegram Bot</b></a></td>
- <td><a href="https://github.com/HexyeDEV/Telegram-Chatbot-Gpt4Free/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/HexyeDEV/Telegram-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/HexyeDEV/Telegram-Chatbot-Gpt4Free/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/HexyeDEV/Telegram-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/HexyeDEV/Telegram-Chatbot-Gpt4Free/issues"><img alt="Issues" src="https://img.shields.io/github/issues/HexyeDEV/Telegram-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/HexyeDEV/Telegram-Chatbot-Gpt4Free/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/HexyeDEV/Telegram-Chatbot-Gpt4Free?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/Lin-jun-xiang/chatgpt-line-bot"><b>ChatGpt Line Bot</b></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/chatgpt-line-bot/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/Lin-jun-xiang/chatgpt-line-bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/chatgpt-line-bot/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/Lin-jun-xiang/chatgpt-line-bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/chatgpt-line-bot/issues"><img alt="Issues" src="https://img.shields.io/github/issues/Lin-jun-xiang/chatgpt-line-bot?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/chatgpt-line-bot/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/Lin-jun-xiang/chatgpt-line-bot?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/Lin-jun-xiang/action-translate-readme"><b>Action Translate Readme</b></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/action-translate-readme/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/Lin-jun-xiang/action-translate-readme?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/action-translate-readme/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/Lin-jun-xiang/action-translate-readme?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/action-translate-readme/issues"><img alt="Issues" src="https://img.shields.io/github/issues/Lin-jun-xiang/action-translate-readme?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/action-translate-readme/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/Lin-jun-xiang/action-translate-readme?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- <tr>
- <td><a href="https://github.com/Lin-jun-xiang/docGPT-streamlit"><b>Langchain Document GPT</b></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/docGPT-streamlit/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/Lin-jun-xiang/docGPT-streamlit?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/docGPT-streamlit/network/members"><img alt="Forks" src="https://img.shields.io/github/forks/Lin-jun-xiang/docGPT-streamlit?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/docGPT-streamlit/issues"><img alt="Issues" src="https://img.shields.io/github/issues/Lin-jun-xiang/docGPT-streamlit?style=flat-square&labelColor=343b41"/></a></td>
- <td><a href="https://github.com/Lin-jun-xiang/docGPT-streamlit/pulls"><img alt="Pull Requests" src="https://img.shields.io/github/issues-pr/Lin-jun-xiang/docGPT-streamlit?style=flat-square&labelColor=343b41"/></a></td>
- </tr>
- </tbody>
-</table>
-
-
-
-## 🤝 Mitwirken
-
-#### Erstellen Sie einen Anbieter mit AI-Tool
-
-Rufen Sie im Terminal das Skript `create_provider.py` auf:
-```bash
-python etc/tool/create_provider.py
-```
-1. Geben Sie Ihren Namen für den neuen Anbieter ein.
-2. Kopieren Sie den `cURL`-Befehl aus den Entwicklertools Ihres Browsers und fügen Sie ihn ein.
-3. Lassen Sie die KI den Anbieter für Sie erstellen.
-4. Passen Sie den Anbieter nach Ihren Bedürfnissen an.
-
-#### Anbieter erstellen
-
-1. Überprüfen Sie die aktuelle [Liste potenzieller Anbieter](https://github.com/zukixa/cool-ai-stuff#ai-chat-websites) oder finden Sie Ihre eigene Anbieterquelle!
-2. Erstellen Sie eine neue Datei in [g4f/Provider](./g4f/Provider) mit dem Namen des Anbieters.
-3. Implementieren Sie eine Klasse, die von [BaseProvider](./g4f/Provider/base_provider.py) erbt.
-
-```py
-from __future__ import annotations
-
-from ..typing import AsyncResult, Messages
-from .base_provider import AsyncGeneratorProvider
-
-class HogeService(AsyncGeneratorProvider):
- url = "https://chat-gpt.com"
- supports_gpt_35_turbo = True
- working = True
-
- @classmethod
- async def create_async_generator(
- cls,
- model: str,
- messages: Messages,
- proxy: str = None,
- **kwargs
- ) -> AsyncResult:
- yield ""
-```
-
-4. Hier können Sie die Einstellungen anpassen, zum Beispiel, wenn die Website Streaming unterstützt, setzen Sie `supports_stream` auf `True`...
-5. Schreiben Sie Code, um den Anbieter in `create_async_generator` anzufordern und die Antwort mit `yield` zurückzugeben, selbst wenn es sich um eine einmalige Antwort handelt. Zögern Sie nicht, sich bei anderen Anbietern inspirieren zu lassen.
-6. Fügen Sie den Namen des Anbieters in [`g4f/Provider/__init__.py`](./g4f/Provider/__init__.py) hinzu.
-
-```py
-from .HogeService import HogeService
-
-__all__ = [
- HogeService,
-]
-```
-
-7. Sie sind fertig! Testen Sie den Anbieter, indem Sie ihn aufrufen:
-
-```py
-import g4f
-
-response = g4f.ChatCompletion.create(model='gpt-3.5-turbo', provider=g4f.Provider.PROVIDERNAME,
- messages=[{"role": "user", "content": "test"}], stream=g4f.Provider.PROVIDERNAME.supports_stream)
-
-for message in response:
- print(message, flush=True, end='')
-```
-
-
-## 🙌 Mitwirkende
-
-Eine Liste der Mitwirkenden ist [hier](https://github.com/xtekky/gpt4free/graphs/contributors) verfügbar.
-Die Datei [`Vercel.py`](https://github.com/xtekky/gpt4free/blob/main/g4f/Provider/Vercel.py) enthält Code von [vercel-llm-api](https://github.com/ading2210/vercel-llm-api) von [@ading2210](https://github.com/ading2210), der unter der [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.txt) lizenziert ist.
-Top 1 Mitwirkender: [@hlohaus](https://github.com/hlohaus)
-
-## ©️ Urheberrecht
-
-This program is licensed under the [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.txt)
-
-```
-xtekky/gpt4free: Copyright (C) 2023 xtekky
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <https://www.gnu.org/licenses/>.
-```
-
-## ⭐ Sternenverlauf
-
-<a href="https://github.com/xtekky/gpt4free/stargazers">
- <img width="500" alt="Star History Chart" src="https://api.star-history.com/svg?repos=xtekky/gpt4free&type=Date">
-</a>
-
-
-## 📄 Lizenz
-
-<table>
- <tr>
- <td>
- <p align="center"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/GPLv3_Logo.svg/1200px-GPLv3_Logo.svg.png" width="80%"></img>
- </td>
- <td>
- <img src="https://img.shields.io/badge/Lizenz-GNU_GPL_v3.0-rot.svg"/> <br>
- Dieses Projekt steht unter der <a href="./LICENSE">GNU_GPL_v3.0-Lizenz</a>.
- </td>
- </tr>
-</table>
-
-<p align="right">(<a href="#top">🔼 Zurück nach oben</a>)</p>
diff --git a/README.md b/README.md
index 153922ec..965847ee 100644
--- a/README.md
+++ b/README.md
@@ -24,13 +24,13 @@ docker pull hlohaus789/g4f
## 🆕 What's New
-- Check out a more in depth local inference @ https://github.com/gpt4free/gpt4local
-- Join our Telegram Channel: [t.me/g4f_channel](https://telegram.me/g4f_channel)
-- Join our Discord Group: [discord.gg/XfybzPXPH5](https://discord.gg/XfybzPXPH5)
-- `g4f` now supports 100% local inference: [local-docs](https://g4f.mintlify.app/docs/core/usage/local)
+- Installation Guide for Windows (.exe): 💻 [#installation-guide-for-windows](#installation-guide-for-windows-exe)
+- Join our Telegram Channel: 📨 [telegram.me/g4f_channel](https://telegram.me/g4f_channel)
+- Join our Discord Group: 💬 [discord.gg/XfybzPXPH5](https://discord.gg/XfybzPXPH5)
+- `g4f` now supports 100% local inference: 🧠 [local-docs](https://g4f.mintlify.app/docs/core/usage/local)
## 🔻 Site Takedown
-Is your site on this repository and you want to take it down? Send an email to takedown@g4f.ai with proof it is yours and it will be removed as fast as possible. To prevent reproduction please secure your API ;)
+Is your site on this repository and you want to take it down? Send an email to takedown@g4f.ai with proof it is yours and it will be removed as fast as possible. To prevent reproduction please secure your API. 😉
## 🚀 Feedback and Todo
You can always leave some feedback here: https://forms.gle/FeWV9RLEedfdkmFN6
@@ -42,7 +42,7 @@ As per the survey, here is a list of improvements to come
- [x] Improve the provider status list & updates
- [ ] Tutorials on how to reverse sites to write your own wrapper (PoC only ofc)
- [x] Improve the Bing wrapper. (Wait and Retry or reuse conversation)
-- [ ] Write a standard provider performance test to improve the stability
+- [ ] 🚧 Write a standard provider performance test to improve the stability
- [ ] Potential support and development of local models
- [ ] 🚧 Improve compatibility and error handling
@@ -51,8 +51,8 @@ As per the survey, here is a list of improvements to come
- [🆕 What's New](#-whats-new)
- [📚 Table of Contents](#-table-of-contents)
- [🛠️ Getting Started](#-getting-started)
- + [Docker container](#docker-container)
- - [Quick start](#quick-start)
+ + [Docker Container Guide](#docker-container-guide)
+ + [Installation Guide for Windows (.exe)](#installation-guide-for-windows-exe)
+ [Use python](#use-python)
- [Prerequisites](#prerequisites)
- [Install using PyPI package:](#install-using-pypi-package)
@@ -80,20 +80,41 @@ As per the survey, here is a list of improvements to come
## 🛠️ Getting Started
-#### Docker container
+#### Docker Container Guide
-##### Quick start:
+##### Getting Started Quickly:
-1. [Download and install Docker](https://docs.docker.com/get-docker/)
-2. Pull latest image and run the container:
+1. **Install Docker:** Begin by [downloading and installing Docker](https://docs.docker.com/get-docker/).
+
+2. **Set Up the Container:**
+ Use the following commands to pull the latest image and start the container:
```sh
docker pull hlohaus789/g4f
docker run -p 8080:8080 -p 1337:1337 -p 7900:7900 --shm-size="2g" -v ${PWD}/hardir:/app/hardir hlohaus789/g4f:latest
```
-3. Open the included client on: [http://localhost:8080/chat/](http://localhost:8080/chat/)
-or set the API base in your client to: [http://localhost:1337/v1](http://localhost:1337/v1)
-4. (Optional) If you need to log in to a provider, you can view the desktop from the container here: http://localhost:7900/?autoconnect=1&resize=scale&password=secret.
+
+3. **Access the Client:**
+ - To use the included client, navigate to: [http://localhost:8080/chat/](http://localhost:8080/chat/)
+ - Or set the API base for your client to: [http://localhost:1337/v1](http://localhost:1337/v1)
+
+4. **(Optional) Provider Login:**
+ If required, you can access the container's desktop here: http://localhost:7900/?autoconnect=1&resize=scale&password=secret for provider login purposes.
+
+#### Installation Guide for Windows (.exe)
+To ensure the seamless operation of our application, please follow the instructions below. These steps are designed to guide you through the installation process on Windows operating systems.
+##### Prerequisites
+1. **WebView2 Runtime**: Our application requires the *WebView2 Runtime* to be installed on your system. If you do not have it installed, please download and install it from the [Microsoft Developer Website](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). If you already have *WebView2 Runtime* installed but are encountering issues, navigate to *Installed Windows Apps*, select *WebView2*, and opt for the repair option.
+##### Installation Steps
+2. **Download the Application**: Visit our [latest releases page](https://github.com/xtekky/gpt4free/releases/latest) and download the most recent version of the application, named `g4f.webview.*.exe`.
+3. **File Placement**: Once downloaded, transfer the `.exe` file from your downloads folder to a directory of your choice on your system, and then execute it to run the app.
+##### Post-Installation Adjustment
+4. **Firewall Configuration (Hotfix)**: Upon installation, it may be necessary to adjust your Windows Firewall settings to allow the application to operate correctly. To do this, access your Windows Firewall settings and allow the application.
+
+By following these steps, you should be able to successfully install and run the application on your Windows system. If you encounter any issues during the installation process, please refer to our Issue Tracker or try to get contact over Discord for assistance.
+
+Run the **Webview UI** on other Platfroms:
+- [/docs/guides/webview](/docs/webview.md)
##### Use your smartphone:
@@ -170,34 +191,7 @@ image_url = response.data[0].url
- New Client API like the OpenAI Python library: [/docs/client](/docs/client.md)
- Legacy API with python modules: [/docs/legacy](/docs/legacy.md)
-### Webview GUI
-
-Open the GUI in a window of your OS. Runs on a local/static/ssl server and use a JavaScript API.
-Supports login into the OpenAI Chat, Image Upload and streamed Text Generation.
-
-Supports all platforms, but only Linux tested.
-
-1. Install all requirements with:
-
-```bash
-pip install g4f[webview]
-```
-
-2. Follow the OS specific steps here:
- [pywebview installation](https://pywebview.flowrl.com/guide/installation.html#dependencies)
-
-3. Run the app with:
-
-```python
-from g4f.gui.webview import run_webview
-run_webview(debug=True)
-```
-or execute the following command:
-```bash
-python -m g4f.gui.webview -debug
-```
-
-#### Webserver
+#### Web UI
To start the web interface, type the following codes in python:
@@ -210,11 +204,13 @@ or execute the following command:
python -m g4f.cli gui -port 8080 -debug
```
-### Interference API
+#### Interference API
You can use the Interference API to serve other OpenAI integrations with G4F.
-See: [/docs/interference](/docs/interference.md)
+See docs: [/docs/interference](/docs/interference.md)
+
+Access with: http://localhost:1337/v1
### Configuration
@@ -247,7 +243,7 @@ To utilize the OpenaiChat provider, a .har file is required from https://chat.op
2. Access the Developer Tools in your browser. This can typically be done by right-clicking the page and selecting "Inspect," or by pressing F12 or Ctrl+Shift+I (Cmd+Option+I on a Mac).
3. With the Developer Tools open, switch to the "Network" tab.
4. Reload the website to capture the loading process within the Network tab.
-5. Initiate an action in the chat which can be capture in the .har file.
+5. Initiate an action in the chat which can be captured in the .har file.
6. Right-click any of the network activities listed and select "Save all as HAR with content" to export the .har file.
##### Storing the .HAR File
@@ -780,9 +776,50 @@ We welcome contributions from the community. Whether you're adding new providers
## 🙌 Contributors
-A list of all contributors is available [here](https://github.com/xtekky/gpt4free/graphs/contributors)
-The [`Vercel.py`](https://github.com/xtekky/gpt4free/blob/main/g4f/Provider/Vercel.py) file contains code from [vercel-llm-api](https://github.com/ading2210/vercel-llm-api) by [@ading2210](https://github.com/ading2210), which is licensed under the [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.txt)
-Top 1 Contributor: [@hlohaus](https://github.com/hlohaus)
+A list of all contributors is available [here](https://github.com/xtekky/gpt4free/graphs/contributors)
+
+<a href="https://github.com/xtekky" target="_blank"><img src="https://avatars.githubusercontent.com/u/98614666?v=4&s=45" width="45" title="xtekky"></a>
+<a href="https://github.com/hlohaus" target="_blank"><img src="https://avatars.githubusercontent.com/u/983577?v=4&s=45" width="45" title="hlohaus"></a>
+<a href="https://github.com/bagusindrayana" target="_blank"><img src="https://avatars.githubusercontent.com/u/36830534?v=4&s=45" width="45" title="bagusindrayana"></a>
+<a href="https://github.com/sudouser777" target="_blank"><img src="https://avatars.githubusercontent.com/u/22415463?v=4&s=45" width="45" title="sudouser777"></a>
+<a href="https://github.com/thatlukinhasguy1" target="_blank"><img src="https://avatars.githubusercontent.com/u/139662282?v=4&s=45" width="45" title="thatlukinhasguy1"></a>
+<a href="https://github.com/Commenter123321" target="_blank"><img src="https://avatars.githubusercontent.com/u/36051603?v=4&s=45" width="45" title="Commenter123321"></a>
+<a href="https://github.com/DanielShemesh" target="_blank"><img src="https://avatars.githubusercontent.com/u/20585236?v=4&s=45" width="45" title="DanielShemesh"></a>
+<a href="https://github.com/Luneye" target="_blank"><img src="https://avatars.githubusercontent.com/u/73485421?v=4&s=45" width="45" title="Luneye"></a>
+<a href="https://github.com/enganese" target="_blank"><img src="https://avatars.githubusercontent.com/u/69082498?v=4&s=45" width="45" title="enganese"></a>
+<a href="https://github.com/ezerinz" target="_blank"><img src="https://avatars.githubusercontent.com/u/100193740?v=4&s=45" width="45" title="ezerinz"></a>
+<a href="https://github.com/Lin-jun-xiang" target="_blank"><img src="https://avatars.githubusercontent.com/u/63782903?v=4&s=45" width="45" title="Lin-jun-xiang"></a>
+<a href="https://github.com/nullstreak" target="_blank"><img src="https://avatars.githubusercontent.com/u/139914347?v=4&s=45" width="45" title="nullstreak"></a>
+<a href="https://github.com/valerii-chirkov" target="_blank"><img src="https://avatars.githubusercontent.com/u/81074936?v=4&s=45" width="45" title="valerii-chirkov"></a>
+<a href="https://github.com/MIDORIBIN" target="_blank"><img src="https://avatars.githubusercontent.com/u/25425217?v=4&s=45" width="45" title="MIDORIBIN"></a>
+<a href="https://github.com/repollo" target="_blank"><img src="https://avatars.githubusercontent.com/u/2671466?v=4&s=45" width="45" title="repollo"></a>
+<a href="https://github.com/hpsj" target="_blank"><img src="https://avatars.githubusercontent.com/u/54535414?v=4&s=45" width="45" title="hpsj"></a>
+<a href="https://github.com/taiyi747" target="_blank"><img src="https://avatars.githubusercontent.com/u/63543716?v=4&s=45" width="45" title="taiyi747"></a>
+<a href="https://github.com/ostix360" target="_blank"><img src="https://avatars.githubusercontent.com/u/55257054?v=4&s=45" width="45" title="ostix360"></a>
+<a href="https://github.com/WdR-Tech" target="_blank"><img src="https://avatars.githubusercontent.com/u/143020293?v=4&s=45" width="45" title="WdR-Tech"></a>
+<a href="https://github.com/HexyeDEV" target="_blank"><img src="https://avatars.githubusercontent.com/u/65314629?v=4&s=45" width="45" title="HexyeDEV"></a>
+<a href="https://github.com/9fo" target="_blank"><img src="https://avatars.githubusercontent.com/u/71867245?v=4&s=45" width="45" title="9fo"></a>
+<a href="https://github.com/eltociear" target="_blank"><img src="https://avatars.githubusercontent.com/u/22633385?v=4&s=45" width="45" title="eltociear"></a>
+<a href="https://github.com/ramonvc" target="_blank"><img src="https://avatars.githubusercontent.com/u/13617054?v=4&s=45" width="45" title="ramonvc"></a>
+<a href="https://github.com/naa7" target="_blank"><img src="https://avatars.githubusercontent.com/u/44613678?v=4&s=45" width="45" title="naa7"></a>
+<a href="https://github.com/zeng-rr" target="_blank"><img src="https://avatars.githubusercontent.com/u/47846202?v=4&s=45" width="45" title="zeng-rr"></a>
+<a href="https://github.com/editor-syntax" target="_blank"><img src="https://avatars.githubusercontent.com/u/109844019?v=4&s=45" width="45" title="editor-syntax"></a>
+<a href="https://github.com/devAdityaa" target="_blank"><img src="https://avatars.githubusercontent.com/u/77636021?v=4&s=45" width="45" title="devAdityaa"></a>
+<a href="https://github.com/kggn" target="_blank"><img src="https://avatars.githubusercontent.com/u/95663228?v=4&s=45" width="45" title="kggn"></a>
+<a href="https://github.com/xiangsx" target="_blank"><img src="https://avatars.githubusercontent.com/u/29322721?v=4&s=45" width="45" title="xiangsx"></a>
+<a href="https://github.com/ggindinson" target="_blank"><img src="https://avatars.githubusercontent.com/u/97807772?v=4&s=45" width="45" title="ggindinson"></a>
+<span></span>
+<img src="https://avatars.githubusercontent.com/u/71154407?s=45&v=4" width="45" title="ading2210">
+<img src="https://avatars.githubusercontent.com/u/12299238?s=45&v=4" width="45" title="xqdoo00o">
+<img src="https://avatars.githubusercontent.com/u/97126670?s=45&v=4" width="45" title="nathanrchn">
+<img src="https://avatars.githubusercontent.com/u/81407603?v=4&s=45" width="45" title="dsdanielpark">
+
+- The [`Vercel.py`](g4f/Provider/Vercel.py) file contains code from [vercel-llm-api](https://github.com/ading2210/vercel-llm-api) by [@ading2210](https://github.com/ading2210)
+- The [`har_file.py`](g4f/Provider/openai/har_file.py) has input from [xqdoo00o/ChatGPT-to-API](https://github.com/xqdoo00o/ChatGPT-to-API)
+- The [`PerplexityLabs.py`](g4f/Provider/openai/har_file.py) has input from [nathanrchn/perplexityai](https://github.com/nathanrchn/perplexityai)
+- The [`Gemini.py`](g4f/Provider/needs_auth/Gemini.py) has input from [dsdanielpark/Gemini-API](https://github.com/dsdanielpark/Gemini-API)
+
+*Having input implies that the AI's code generation utilized it as one of many sources.*
## ©️ Copyright
diff --git a/docs/webview.md b/docs/webview.md
new file mode 100644
index 00000000..afd6c76c
--- /dev/null
+++ b/docs/webview.md
@@ -0,0 +1,30 @@
+### G4F - Webview GUI
+
+Open the GUI in a window of your OS. Runs on a local/static/ssl server and use a JavaScript API.
+Supports login into the OpenAI Chat (.har files), Image Upload and streamed Text Generation.
+
+Supports all platforms, but only Linux/Windows tested.
+
+1. Install all python requirements with:
+
+```bash
+pip install g4f[webview]
+```
+
+2. *a)* Follow the **OS specific** steps here:
+ [pywebview installation](https://pywebview.flowrl.com/guide/installation.html#dependencies)
+
+2. *b)* **WebView2** on **Windows**: Our application requires the *WebView2 Runtime* to be installed on your system. If you do not have it installed, please download and install it from the [Microsoft Developer Website](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). If you already have *WebView2 Runtime* installed but are encountering issues, navigate to *Installed Windows Apps*, select *WebView2*, and opt for the repair option.
+
+3. Run the app with:
+
+```python
+from g4f.gui.webview import run_webview
+run_webview(debug=True)
+```
+or execute the following command:
+```bash
+python -m g4f.gui.webview -debug
+```
+
+[Return to Home](/) \ No newline at end of file
diff --git a/etc/tool/contributers.py b/etc/tool/contributers.py
new file mode 100644
index 00000000..76fa461d
--- /dev/null
+++ b/etc/tool/contributers.py
@@ -0,0 +1,6 @@
+import requests
+
+url = "https://api.github.com/repos/xtekky/gpt4free/contributors"
+
+for user in requests.get(url).json():
+ print(f'<a href="https://github.com/{user["login"]}" target="_blank"><img src="{user["avatar_url"]}&s=45" width="45" title="{user["login"]}"></a>') \ No newline at end of file
diff --git a/etc/unittest/integration.py b/etc/unittest/integration.py
index 36f09c0e..f69d4770 100644
--- a/etc/unittest/integration.py
+++ b/etc/unittest/integration.py
@@ -4,13 +4,13 @@ import json
try:
import nest_asyncio
has_nest_asyncio = True
-except:
+except ImportError:
has_nest_asyncio = False
from g4f.client import Client, ChatCompletion
from g4f.Provider import Bing, OpenaiChat
-DEFAULT_MESSAGES = [{"role": "system", "content": 'Response in json, Example: {"success: True"}'},
+DEFAULT_MESSAGES = [{"role": "system", "content": 'Response in json, Example: {"success: true"}'},
{"role": "user", "content": "Say success true in json"}]
class TestProviderIntegration(unittest.TestCase):
diff --git a/g4f/gui/server/api.py b/g4f/gui/server/api.py
index 747d0c21..ab9ad331 100644
--- a/g4f/gui/server/api.py
+++ b/g4f/gui/server/api.py
@@ -136,8 +136,8 @@ class Api():
camera.take_picture(filename=filename, on_complete=self.on_camera)
def on_image_selection(self, filename):
- filename = filename[0] if isinstance(filename, list) else filename
- if filename is not None and os.path.exists(filename):
+ filename = filename[0] if isinstance(filename, list) and filename else filename
+ if filename and os.path.exists(filename):
self.image = filename
else:
self.image = None
diff --git a/g4f/gui/webview.py b/g4f/gui/webview.py
index b015dbed..0ea61adb 100644
--- a/g4f/gui/webview.py
+++ b/g4f/gui/webview.py
@@ -17,13 +17,14 @@ import g4f.debug
def run_webview(
debug: bool = False,
ssl: bool = True,
- storage_path: str = None
+ storage_path: str = None,
+ gui: str = None
):
if getattr(sys, 'frozen', False):
dirname = sys._MEIPASS
else:
dirname = os.path.dirname(__file__)
- webview.settings['OPEN_EXTERNAL_LINKS_IN_BROWSER'] = False
+ webview.settings['OPEN_EXTERNAL_LINKS_IN_BROWSER'] = True
webview.settings['ALLOW_DOWNLOADS'] = True
webview.create_window(
f"g4f - {g4f.version.utils.current_version}",
@@ -37,7 +38,8 @@ def run_webview(
private_mode=False,
storage_path=storage_path,
debug=debug,
- ssl=ssl
+ ssl=ssl,
+ gui=gui
)
if __name__ == "__main__":
diff --git a/windows/docker-compose.yml b/windows/docker-compose.yml
new file mode 100644
index 00000000..1aa59caf
--- /dev/null
+++ b/windows/docker-compose.yml
@@ -0,0 +1,19 @@
+version: "3"
+services:
+ windows:
+ image: dockurr/windows
+ container_name: windows
+ environment:
+ VERSION: "win11"
+ devices:
+ - /dev/kvm
+ cap_add:
+ - NET_ADMIN
+ ports:
+ - 8006:8006
+ - 3389:3389/tcp
+ - 3389:3389/udp
+ stop_grace_period: 2m
+ restart: on-failure
+ volumes:
+ - /var/win:/storage \ No newline at end of file
diff --git a/windows/icon.ico b/windows/icon.ico
new file mode 100644
index 00000000..56ee955e
--- /dev/null
+++ b/windows/icon.ico
Binary files differ
diff --git a/windows/main.py b/windows/main.py
new file mode 100644
index 00000000..11a3f902
--- /dev/null
+++ b/windows/main.py
@@ -0,0 +1,22 @@
+import ssl
+import certifi
+from functools import partial
+
+ssl.default_ca_certs = certifi.where()
+ssl.create_default_context = partial(
+ ssl.create_default_context,
+ cafile=certifi.where()
+)
+
+from g4f.gui.webview import run_webview
+from g4f.gui.run import gui_parser
+import g4f.debug
+g4f.debug.version_check = False
+g4f.debug.version = "0.2.8.0"
+
+if __name__ == "__main__":
+ parser = gui_parser()
+ args = parser.parse_args()
+ if args.debug:
+ g4f.debug.logging = True
+ run_webview(args.debug) \ No newline at end of file
diff --git a/g4f/gui/webview.spec b/windows/main.spec
index 360e264e..9dd1d098 100644
--- a/g4f/gui/webview.spec
+++ b/windows/main.spec
@@ -5,11 +5,11 @@ block_cipher = None
a = Analysis(
- ['webview.py'],
+ ['main.py'],
pathex=[],
binaries=[],
datas=[],
- hiddenimports=[],
+ hiddenimports=['plyer.platforms.linux.filechooser', 'plyer.platforms.win.filechooser'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
@@ -25,11 +25,11 @@ exe = EXE(
pyz,
a.scripts,
a.binaries,
- Tree('client', prefix='client'),
+ Tree('C:/Users/Docker/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0/LocalCache/local-packages/Python311/site-packages/g4f/gui/client', prefix='client'),
a.zipfiles,
a.datas,
[],
- name='webview',
+ name='g4f',
debug=False,
bootloader_ignore_signals=False,
strip=False,
@@ -42,4 +42,5 @@ exe = EXE(
target_arch=None,
codesign_identity=None,
entitlements_file=None,
+ icon='icon.ico',
)