mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-11-30 06:50:47 +03:00
Set working=True in Liaobots, Fix bing provider, Update readme
This commit is contained in:
parent
e818fcda6b
commit
3e6b1d6bef
107
README.md
107
README.md
@ -118,27 +118,100 @@ for message in response:
|
||||
print(message)
|
||||
```
|
||||
|
||||
providers:
|
||||
##### Providers:
|
||||
```py
|
||||
from g4f.Provider import (
|
||||
Acytoo,
|
||||
Aichat,
|
||||
Ails,
|
||||
AiService,
|
||||
AItianhu,
|
||||
Bard,
|
||||
Bing,
|
||||
ChatgptAi,
|
||||
ChatgptLogin,
|
||||
DeepAi,
|
||||
GetGpt
|
||||
EasyChat,
|
||||
Equing,
|
||||
GetGpt,
|
||||
H2o,
|
||||
HuggingChat,
|
||||
Opchatgpts,
|
||||
OpenAssistant,
|
||||
OpenaiChat,
|
||||
Raycast,
|
||||
Theb,
|
||||
Vercel,
|
||||
Wewordle,
|
||||
Wuguokai,
|
||||
You,
|
||||
Yqcloud
|
||||
)
|
||||
|
||||
|
||||
# usage:
|
||||
# Usage:
|
||||
response = g4f.ChatCompletion.create(..., provider=ProviderName)
|
||||
```
|
||||
|
||||
##### Needs cookies:
|
||||
|
||||
Many providers need cookies to work.
|
||||
In Bing you need a session, where you have passed the captcha.
|
||||
And in others providers you have to log-in into your account.
|
||||
If you run the g4l package locally,
|
||||
cookies from your browsers are readed with `get_cookies`.
|
||||
Else you have pass them in the parameter `cookies`:
|
||||
```py
|
||||
from g4f.Provider import (
|
||||
Bard,
|
||||
Bing,
|
||||
H2o,
|
||||
HuggingChat,
|
||||
OpenAssistant,
|
||||
OpenaiChat,
|
||||
You,
|
||||
)
|
||||
# Usage:
|
||||
response = g4f.ChatCompletion.create(
|
||||
model=g4f.models.default,
|
||||
messages=[{"role": "user", "content": "Hello"}],
|
||||
provider=g4f.Provider.Name,
|
||||
#cookies=g4f.get_cookies(".google.com"),
|
||||
cookies={"name": "value", "name1": "value1"},
|
||||
auth=True
|
||||
)
|
||||
```
|
||||
|
||||
##### Async support:
|
||||
|
||||
Run providers `async` to improve speed / performance.
|
||||
The full execution time corresponds to the maximum execution time of a provider.
|
||||
|
||||
```py
|
||||
import g4f, asyncio
|
||||
|
||||
async def run_async():
|
||||
_providers = [
|
||||
g4f.Provider.Bard,
|
||||
g4f.Provider.Bing,
|
||||
g4f.Provider.H2o,
|
||||
g4f.Provider.HuggingChat,
|
||||
g4f.Provider.Liaobots,
|
||||
g4f.Provider.OpenAssistant,
|
||||
g4f.Provider.OpenaiChat,
|
||||
g4f.Provider.You,
|
||||
g4f.Provider.Yqcloud,
|
||||
]
|
||||
responses = [
|
||||
provider.create_async(
|
||||
model=None,
|
||||
messages=[{"role": "user", "content": "Hello"}],
|
||||
)
|
||||
for provider in _providers
|
||||
]
|
||||
responses = await asyncio.gather(*responses)
|
||||
for idx, provider in enumerate(_providers):
|
||||
print(f"{provider.__name__}:", responses[idx])
|
||||
|
||||
asyncio.run(run_async())
|
||||
```
|
||||
|
||||
### interference openai-proxy api (use with openai python package)
|
||||
|
||||
get requirements:
|
||||
@ -186,30 +259,34 @@ if __name__ == "__main__":
|
||||
| Website| Provider| gpt-3.5 | gpt-4 | Streaming | Status | Auth |
|
||||
| ------ | ------- | ------- | ----- | --------- | ------ | ---- |
|
||||
| [chat.acytoo.com](https://chat.acytoo.com/) | g4f.provider.Acytoo | ✔️ | ❌ | ❌ | ![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) | ❌ |
|
||||
| [ai.ls](https://ai.ls) | g4f.provider.Ails | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [chat-gpt.org](https://chat-gpt.org/chat) | g4f.provider.Aichat | ✔️ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [ai.ls](https://ai.ls) | g4f.provider.Ails | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [bard.google.com](https://bard.google.com) | g4f.provider.Bard | ❌ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ✔️ |
|
||||
| [chatgpt.ai](https://chatgpt.ai/gpt-4/) | g4f.provider.ChatgptAi | ❌ | ✔️ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [opchatgpts.net](https://opchatgpts.net) | g4f.provider.ChatgptLogin | ✔️ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [bing.com](https://bing.com/chat) | g4f.provider.Bing | ❌ | ✔️ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ✔️ |
|
||||
| [chatgpt.ai](https://chatgpt.ai/gpt-4/) | g4f.provider.ChatgptAi | ❌ | ✔️ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [opchatgpts.net](https://opchatgpts.net) | g4f.provider.ChatgptLogin | ✔️ | ❌ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [deepai.org](https://deepai.org) | g4f.provider.DeepAi | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [free.easychat.work](https://free.easychat.work) | g4f.provider.EasyChat | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [next.eqing.tech](https://next.eqing.tech/) | g4f.provider.Equing | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [chat.getgpt.world](https://chat.getgpt.world/) | g4f.provider.GetGpt | ✔️ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [gpt-gm.h2o.ai](https://gpt-gm.h2o.ai) | g4f.provider.H2o | ❌ | ❌ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [opchatgpts.net](https://opchatgpts.net) | g4f.provider.Opchatgpts | ✔️ | ❌ | ❌ | ![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) | ✔️ |
|
||||
| [liaobots.com](https://liaobots.com) | g4f.provider.Liaobots | ✔️ | ✔️ | ✔️ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [opchatgpts.net](https://opchatgpts.net) | g4f.provider.Opchatgpts | ✔️ | ❌ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [open-assistant.io](https://open-assistant.io/chat) | g4f.provider.OpenAssistant | ❌ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ✔️ |
|
||||
| [chat.openai.com](https://chat.openai.com) | g4f.provider.OpenaiChat | ✔️ | ✔️ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
|
||||
| [raycast.com](https://raycast.com) | g4f.provider.Raycast | ✔️ | ✔️ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
|
||||
| [theb.ai](https://theb.ai) | g4f.provider.Theb | ✔️ | ❌ | ✔️ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ✔️ |
|
||||
| [play.vercel.ai](https://play.vercel.ai) | g4f.provider.Vercel | ✔️ | ❌ | ❌ | ![Unknown](https://img.shields.io/badge/Unknown-grey) | ❌ |
|
||||
| [wewordle.org](https://wewordle.org/) | g4f.provider.Wewordle | ✔️ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [you.com](https://you.com) | g4f.provider.You | ✔️ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [chat.wuguokai.xyz](https://chat.wuguokai.xyz) | g4f.provider.Wuguokai | ✔️ | ❌ | ❌ | ![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 | ✔️ | ❌ | ❌ | ![Active](https://img.shields.io/badge/Active-brightgreen) | ❌ |
|
||||
| [www.aitianhu.com](https://www.aitianhu.com/) | g4f.provider.AItianhu | ✔️ | ❌ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [aiservice.vercel.app](https://aiservice.vercel.app/) | g4f.provider.AiService | ✔️ | ❌ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [bing.com](https://bing.com/chat) | g4f.provider.Bing | ❌ | ✔️ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [chat.dfehub.com](https://chat.dfehub.com/) | g4f.provider.DfeHub | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [chat9.fastgpt.me](https://chat9.fastgpt.me/) | g4f.provider.FastGpt | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [forefront.com](https://forefront.com) | g4f.provider.Forefront | ✔️ | ❌ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [liaobots.com](https://liaobots.com) | g4f.provider.Liaobots | ✔️ | ✔️ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ✔️ |
|
||||
| [supertest.lockchat.app](http://supertest.lockchat.app) | g4f.provider.Lockchat | ✔️ | ✔️ | ✔️ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
| [p5.v50.ltd](https://p5.v50.ltd) | g4f.provider.V50 | ✔️ | ❌ | ❌ | ![Inactive](https://img.shields.io/badge/Inactive-red) | ❌ |
|
||||
|
||||
|
@ -26,32 +26,15 @@ class Bing(AsyncGeneratorProvider):
|
||||
prompt = messages[-1]["content"]
|
||||
context = create_context(messages[:-1])
|
||||
|
||||
if cookies:
|
||||
if cookies and "SRCHD" in cookies:
|
||||
#TODO: Will implement proper cookie retrieval later and use a try-except mechanism in 'stream_generate' instead of defaulting the cookie value like this
|
||||
cookies_dict = {
|
||||
'MUID' : '',
|
||||
'BCP' : '',
|
||||
'MUIDB' : '',
|
||||
'USRLOC' : '',
|
||||
'SRCHD' : 'AF=hpcodx',
|
||||
'MMCASM' : '',
|
||||
'_UR' : '',
|
||||
'ANON' : '',
|
||||
'NAP' : '',
|
||||
'ABDEF' : '',
|
||||
'SRCHD' : cookies["SRCHD"],
|
||||
'PPLState' : '1',
|
||||
'KievRPSSecAuth': '',
|
||||
'_U' : '',
|
||||
'SUID' : '',
|
||||
'_EDGE_S' : '',
|
||||
'WLS' : '',
|
||||
'_HPVN' : '',
|
||||
'_SS' : '',
|
||||
'_clck' : '',
|
||||
'SRCHUSR' : '',
|
||||
'_RwBf' : '',
|
||||
'SRCHHPGUSR' : '',
|
||||
'ipv6' : '',
|
||||
}
|
||||
|
||||
return stream_generate(prompt, context, cookies_dict)
|
||||
|
@ -28,6 +28,7 @@ models = {
|
||||
|
||||
class Liaobots(AsyncGeneratorProvider):
|
||||
url = "https://liaobots.com"
|
||||
working = True
|
||||
supports_stream = True
|
||||
supports_gpt_35_turbo = True
|
||||
supports_gpt_4 = True
|
||||
|
@ -1,4 +1,4 @@
|
||||
import random, requests, json
|
||||
import random, requests
|
||||
from ..typing import Any, CreateResult
|
||||
from .base_provider import BaseProvider
|
||||
|
||||
@ -6,8 +6,6 @@ from .base_provider import BaseProvider
|
||||
class Wuguokai(BaseProvider):
|
||||
url = 'https://chat.wuguokai.xyz'
|
||||
supports_gpt_35_turbo = True
|
||||
supports_stream = False
|
||||
needs_auth = False
|
||||
working = True
|
||||
|
||||
@staticmethod
|
||||
@ -43,7 +41,7 @@ class Wuguokai(BaseProvider):
|
||||
"userId": f"#/chat/{random.randint(1,99999999)}",
|
||||
"usingContext": True
|
||||
}
|
||||
response = requests.post("https://ai-api20.wuguokai.xyz/api/chat-process", headers=headers, data=json.dumps(data),proxies=kwargs['proxy'] if 'proxy' in kwargs else {})
|
||||
response = requests.post("https://ai-api20.wuguokai.xyz/api/chat-process", headers=headers, timeout=3, json=data, proxies=kwargs['proxy'] if 'proxy' in kwargs else {})
|
||||
_split = response.text.split("> 若回答失败请重试或多刷新几次界面后重试")
|
||||
if response.status_code == 200:
|
||||
if len(_split) > 1:
|
||||
|
@ -30,7 +30,7 @@ from .FastGpt import FastGpt
|
||||
from .V50 import V50
|
||||
from .Wuguokai import Wuguokai
|
||||
|
||||
from .base_provider import BaseProvider
|
||||
from .base_provider import BaseProvider, AsyncProvider, AsyncGeneratorProvider
|
||||
|
||||
__all__ = [
|
||||
'BaseProvider',
|
||||
|
@ -36,14 +36,14 @@ Bing: Hello! How can I help you today? 3.28 secs
|
||||
No Stream Total: 10.14 secs
|
||||
"""
|
||||
|
||||
print("Yqcloud:", end="")
|
||||
print("Bing: ", end="")
|
||||
for response in log_time_yield(
|
||||
g4f.ChatCompletion.create,
|
||||
model=g4f.models.gpt_35_turbo,
|
||||
messages=[{"role": "user", "content": _instruct}],
|
||||
provider=g4f.Provider.Yqcloud,
|
||||
provider=g4f.Provider.Bing,
|
||||
#cookies=g4f.get_cookies(".huggingface.co"),
|
||||
stream=True,
|
||||
#stream=True,
|
||||
auth=True
|
||||
):
|
||||
print(response, end="")
|
||||
|
@ -6,14 +6,35 @@ from urllib.parse import urlparse
|
||||
sys.path.append(str(Path(__file__).parent.parent))
|
||||
|
||||
from g4f import models, Provider
|
||||
from g4f.Provider.base_provider import BaseProvider
|
||||
from g4f.Provider.base_provider import BaseProvider, AsyncProvider
|
||||
from testing.test_providers import test
|
||||
|
||||
def main():
|
||||
print_providers()
|
||||
print("\n", "-" * 50, "\n")
|
||||
print_models()
|
||||
|
||||
def print_imports():
|
||||
print("##### Providers:")
|
||||
print("```py")
|
||||
print("from g4f.Provider import (")
|
||||
for _provider in get_providers():
|
||||
if _provider.working:
|
||||
print(f" {_provider.__name__},")
|
||||
print(")")
|
||||
print("# Usage:")
|
||||
print("response = g4f.ChatCompletion.create(..., provider=ProviderName)")
|
||||
print("```")
|
||||
print()
|
||||
print()
|
||||
|
||||
def print_async():
|
||||
print("##### Async support:")
|
||||
print("```py")
|
||||
print("from g4f.Provider import (")
|
||||
for _provider in get_providers():
|
||||
if issubclass(_provider, AsyncProvider):
|
||||
print(f" {_provider.__name__},")
|
||||
print(")")
|
||||
print("```")
|
||||
print()
|
||||
print()
|
||||
|
||||
def print_providers():
|
||||
lines = [
|
||||
@ -48,18 +69,23 @@ def print_providers():
|
||||
print("\n".join(lines))
|
||||
|
||||
|
||||
def get_providers() -> list[type[BaseProvider]]:
|
||||
def get_provider_names() -> list[str]:
|
||||
provider_names = dir(Provider)
|
||||
ignore_names = [
|
||||
"base_provider",
|
||||
"BaseProvider",
|
||||
"AsyncProvider",
|
||||
"AsyncGeneratorProvider"
|
||||
]
|
||||
provider_names = [
|
||||
return [
|
||||
provider_name
|
||||
for provider_name in provider_names
|
||||
if not provider_name.startswith("__") and provider_name not in ignore_names
|
||||
]
|
||||
return [getattr(Provider, provider_name) for provider_name in provider_names]
|
||||
|
||||
|
||||
def get_providers() -> list[type[BaseProvider]]:
|
||||
return [getattr(Provider, provider_name) for provider_name in get_provider_names()]
|
||||
|
||||
|
||||
def print_models():
|
||||
@ -107,4 +133,8 @@ def get_models():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
print_imports()
|
||||
print_async()
|
||||
print_providers()
|
||||
print("\n", "-" * 50, "\n")
|
||||
print_models()
|
Loading…
Reference in New Issue
Block a user