add deepai wrapper

このコミットが含まれているのは:
ading2210 2023-05-18 00:05:09 -07:00
コミット 34e042bb33
4個のファイルの変更97行の追加1行の削除

ファイルの表示

@ -15,6 +15,7 @@ class Provider(Enum):
ForeFront = 'fore_front'
Theb = 'theb'
UseLess = 'useless'
DeepAI = 'deepai'
class Completion:
@ -40,6 +41,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 +65,7 @@ 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))

26
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()
```

46
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
}
])

18
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()