summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md5
-rw-r--r--gpt4free/__init__.py29
-rw-r--r--gpt4free/deepai/README.md26
-rw-r--r--gpt4free/deepai/__init__.py46
-rw-r--r--testing/deepai_test.py18
5 files changed, 123 insertions, 1 deletions
diff --git a/README.md b/README.md
index 7af81239..98174965 100644
--- a/README.md
+++ b/README.md
@@ -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) | ||
| `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) |
+| `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** | | | |
| 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) | - |
@@ -132,6 +133,8 @@ Just API's from some language model sites.
| [bard.google.com](https://bard.google.com) | custom / search |
| [bing.com/chat](https://bing.com/chat) | GPT-4/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>
@@ -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)
-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>
diff --git a/gpt4free/__init__.py b/gpt4free/__init__.py
index 1e652897..2dc6f5f3 100644
--- a/gpt4free/__init__.py
+++ b/gpt4free/__init__.py
@@ -5,6 +5,7 @@ from gpt4free import quora
from gpt4free import theb
from gpt4free import usesless
from gpt4free import you
+from gpt4free import deepai
class Provider(Enum):
@@ -15,6 +16,7 @@ class Provider(Enum):
ForeFront = 'fore_front'
Theb = 'theb'
UseLess = 'useless'
+ DeepAI = 'deepai'
class Completion:
@@ -40,6 +42,8 @@ class Completion:
return Completion.__theb_service(prompt, **kwargs)
elif provider == Provider.UseLess:
return Completion.__useless_service(prompt, **kwargs)
+ elif provider == Provider.DeepAI:
+ return Completion.__deepai_service(prompt, **kwargs)
else:
raise Exception('Provider not exist, Please try again')
@@ -62,4 +66,29 @@ class Completion:
@staticmethod
def __theb_service(prompt: str, **kwargs):
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)) \ No newline at end of file
diff --git a/gpt4free/deepai/README.md b/gpt4free/deepai/README.md
new file mode 100644
index 00000000..a287cdb7
--- /dev/null
+++ b/gpt4free/deepai/README.md
@@ -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()
+``` \ No newline at end of file
diff --git a/gpt4free/deepai/__init__.py b/gpt4free/deepai/__init__.py
new file mode 100644
index 00000000..a2fc6f5a
--- /dev/null
+++ b/gpt4free/deepai/__init__.py
@@ -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
+ }
+ ]) \ No newline at end of file
diff --git a/testing/deepai_test.py b/testing/deepai_test.py
new file mode 100644
index 00000000..474f663e
--- /dev/null
+++ b/testing/deepai_test.py
@@ -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() \ No newline at end of file