Merge pull request #561 from ading2210/main

Add DeepAI wrapper
This commit is contained in:
xtekky 2023-05-18 10:33:31 +01:00 committed by GitHub
commit 2e4bce90b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 123 additions and 1 deletions

View File

@ -102,6 +102,7 @@ Just API's from some language model sites.
| `forefront` | Example usage for forefront (gpt-4) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/forefront/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | || | `forefront` | Example usage for forefront (gpt-4) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/forefront/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | ||
| `quora (poe)` | Example usage for quora | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/quora/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | | `quora (poe)` | Example usage for quora | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/quora/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| `you` | Example usage for you | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/you/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | | `you` | Example usage for you | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/you/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| `deepai` | Example usage for DeepAI (gpt-3.5, with chat) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/deepai/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| **Try it Out** | | | | | **Try it Out** | | | |
| Google Colab Jupyter Notebook | Example usage for gpt4free | [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DanielShemesh/gpt4free-colab/blob/main/gpt4free.ipynb) | - | | Google Colab Jupyter Notebook | Example usage for gpt4free | [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DanielShemesh/gpt4free-colab/blob/main/gpt4free.ipynb) | - |
| replit Example (feel free to fork this repl) | Example usage for gpt4free | [![](https://img.shields.io/badge/Open%20in-Replit-1A1E27?logo=replit)](https://replit.com/@gpt4free/gpt4free-webui) | - | | replit Example (feel free to fork this repl) | Example usage for gpt4free | [![](https://img.shields.io/badge/Open%20in-Replit-1A1E27?logo=replit)](https://replit.com/@gpt4free/gpt4free-webui) | - |
@ -132,6 +133,8 @@ Just API's from some language model sites.
| [bard.google.com](https://bard.google.com) | custom / search | | [bard.google.com](https://bard.google.com) | custom / search |
| [bing.com/chat](https://bing.com/chat) | GPT-4/3.5 | | [bing.com/chat](https://bing.com/chat) | GPT-4/3.5 |
| [italygpt.it](https://italygpt.it) | GPT-3.5 | | [italygpt.it](https://italygpt.it) | GPT-3.5 |
| [deepai.org](https://deepai.org/chat) | GPT-3.5 / chat support |
## Best sites <a name="best-sites"></a> ## Best sites <a name="best-sites"></a>
@ -201,7 +204,7 @@ docker-compose up --build -d
This program is licensed under the [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.txt) This program is licensed under the [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.txt)
Most code, with the exception of `quora/api.py` (by [ading2210](https://github.com/ading2210)), has been written by me, [xtekky](https://github.com/xtekky). Most code, with the exception of `quora/api.py` and `deepai/__init__.py` (by [ading2210](https://github.com/ading2210)), has been written by me, [xtekky](https://github.com/xtekky).
### Copyright Notice: <a name="copyright"></a> ### Copyright Notice: <a name="copyright"></a>

View File

@ -5,6 +5,7 @@ from gpt4free import quora
from gpt4free import theb from gpt4free import theb
from gpt4free import usesless from gpt4free import usesless
from gpt4free import you from gpt4free import you
from gpt4free import deepai
class Provider(Enum): class Provider(Enum):
@ -15,6 +16,7 @@ class Provider(Enum):
ForeFront = 'fore_front' ForeFront = 'fore_front'
Theb = 'theb' Theb = 'theb'
UseLess = 'useless' UseLess = 'useless'
DeepAI = 'deepai'
class Completion: class Completion:
@ -40,6 +42,8 @@ class Completion:
return Completion.__theb_service(prompt, **kwargs) return Completion.__theb_service(prompt, **kwargs)
elif provider == Provider.UseLess: elif provider == Provider.UseLess:
return Completion.__useless_service(prompt, **kwargs) return Completion.__useless_service(prompt, **kwargs)
elif provider == Provider.DeepAI:
return Completion.__deepai_service(prompt, **kwargs)
else: else:
raise Exception('Provider not exist, Please try again') raise Exception('Provider not exist, Please try again')
@ -63,3 +67,28 @@ class Completion:
def __theb_service(prompt: str, **kwargs): def __theb_service(prompt: str, **kwargs):
return ''.join(theb.Completion.create(prompt=prompt)) return ''.join(theb.Completion.create(prompt=prompt))
@staticmethod
def __deepai_service(prompt: str, **kwargs):
return ''.join(deepai.Completion.create(prompt=prompt))
class ChatCompletion:
"""This class is used to execute a chat completion for a specified provider"""
@staticmethod
def create(provider: Provider, messages: list, **kwargs) -> str:
"""
Invokes the given provider with given chat messages and addition arguments and returns the string response
:param provider: an enum representing the provider to use while invoking
:param messages: a list of chat messages, see the OpenAI docs for how to format this (https://platform.openai.com/docs/guides/chat/introduction)
:param kwargs: Additional keyword arguments to pass to the provider while invoking
:return: A string representing the response from the provider
"""
if provider == Provider.DeepAI:
return ChatCompletion.__deepai_service(messages, **kwargs)
else:
raise Exception('Provider not exist, Please try again')
@staticmethod
def __deepai_service(messages: list, **kwargs):
return ''.join(deepai.ChatCompletion.create(messages=messages))

26
gpt4free/deepai/README.md Normal file
View File

@ -0,0 +1,26 @@
# DeepAI Wrapper
Written by [ading2210](https://github.com/ading2210/).
## Examples:
These functions are generators which yield strings containing the newly generated text.
### Completion:
```python
for chunk in deepai.Completion.create("Who are you?"):
print(chunk, end="", flush=True)
print()
```
### Chat Completion:
Use the same format for the messages as you would for the [official OpenAI API](https://platform.openai.com/docs/guides/chat/introduction).
```python
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
for chunk in deepai.ChatCompletion.create(messages):
print(chunk, end="", flush=True)
print()
```

View File

@ -0,0 +1,46 @@
import requests
import json
import hashlib
import random
import string
from fake_useragent import UserAgent
class ChatCompletion:
@classmethod
def md5(self, text):
return hashlib.md5(text.encode()).hexdigest()[::-1]
@classmethod
def get_api_key(self, user_agent):
part1 = str(random.randint(0, 10**11))
part2 = self.md5(user_agent+self.md5(user_agent+self.md5(user_agent+part1+"x")))
return f"tryit-{part1}-{part2}"
@classmethod
def create(self, messages):
user_agent = UserAgent().random
api_key = self.get_api_key(user_agent)
headers = {
"api-key": api_key,
"user-agent": user_agent
}
files = {
"chat_style": (None, "chat"),
"chatHistory": (None, json.dumps(messages))
}
r = requests.post("https://api.deepai.org/chat_response", headers=headers, files=files, stream=True)
for chunk in r.iter_content(chunk_size=None):
r.raise_for_status()
yield chunk.decode()
class Completion:
@classmethod
def create(self, prompt):
return ChatCompletion.create([
{
"role": "user",
"content": prompt
}
])

18
testing/deepai_test.py Normal file
View File

@ -0,0 +1,18 @@
from gpt4free import deepai
#single completion
for chunk in deepai.Completion.create("Write a list of possible vacation destinations:"):
print(chunk, end="", flush=True)
print()
#chat completion
print("==============")
messages = [ #taken from the openai docs
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
for chunk in deepai.ChatCompletion.create(messages):
print(chunk, end="", flush=True)
print()