summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.gitignore2
-rw-r--r--forefront/README.md15
-rw-r--r--forefront/__init__.py152
-rw-r--r--forefront/typing.py36
-rw-r--r--gui/streamlit_app.py23
-rw-r--r--openai_rev/__init__.py (renamed from quora/graphql/__init__.py)0
-rw-r--r--openai_rev/forefront/README.md15
-rw-r--r--openai_rev/forefront/__init__.py180
-rw-r--r--openai_rev/forefront/mail.py (renamed from forefront/mail.py)14
-rw-r--r--openai_rev/forefront/models.py26
-rw-r--r--openai_rev/openai_rev.py35
-rw-r--r--openai_rev/phind/README.md37
-rw-r--r--openai_rev/quora/README.md (renamed from quora/README.md)26
-rw-r--r--openai_rev/quora/__init__.py (renamed from quora/__init__.py)128
-rw-r--r--openai_rev/quora/api.py (renamed from quora/api.py)62
-rw-r--r--openai_rev/quora/cookies.txt (renamed from quora/cookies.txt)0
-rw-r--r--openai_rev/quora/graphql/AddHumanMessageMutation.graphql (renamed from quora/graphql/AddHumanMessageMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/AddMessageBreakMutation.graphql (renamed from quora/graphql/AddMessageBreakMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/AutoSubscriptionMutation.graphql (renamed from quora/graphql/AutoSubscriptionMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/BioFragment.graphql (renamed from quora/graphql/BioFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/ChatAddedSubscription.graphql (renamed from quora/graphql/ChatAddedSubscription.graphql)0
-rw-r--r--openai_rev/quora/graphql/ChatFragment.graphql (renamed from quora/graphql/ChatFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/ChatListPaginationQuery.graphql (renamed from quora/graphql/ChatListPaginationQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/ChatPaginationQuery.graphql (renamed from quora/graphql/ChatPaginationQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/ChatViewQuery.graphql (renamed from quora/graphql/ChatViewQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/DeleteHumanMessagesMutation.graphql (renamed from quora/graphql/DeleteHumanMessagesMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/DeleteMessageMutation.graphql (renamed from quora/graphql/DeleteMessageMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/HandleFragment.graphql (renamed from quora/graphql/HandleFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/LoginWithVerificationCodeMutation.graphql (renamed from quora/graphql/LoginWithVerificationCodeMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/MessageAddedSubscription.graphql (renamed from quora/graphql/MessageAddedSubscription.graphql)0
-rw-r--r--openai_rev/quora/graphql/MessageDeletedSubscription.graphql (renamed from quora/graphql/MessageDeletedSubscription.graphql)0
-rw-r--r--openai_rev/quora/graphql/MessageFragment.graphql (renamed from quora/graphql/MessageFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/MessageRemoveVoteMutation.graphql (renamed from quora/graphql/MessageRemoveVoteMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/MessageSetVoteMutation.graphql (renamed from quora/graphql/MessageSetVoteMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/PoeBotCreateMutation.graphql (renamed from quora/graphql/PoeBotCreateMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/PoeBotEditMutation.graphql (renamed from quora/graphql/PoeBotEditMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/SendMessageMutation.graphql (renamed from quora/graphql/SendMessageMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/SendVerificationCodeForLoginMutation.graphql (renamed from quora/graphql/SendVerificationCodeForLoginMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/ShareMessagesMutation.graphql (renamed from quora/graphql/ShareMessagesMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/SignupWithVerificationCodeMutation.graphql (renamed from quora/graphql/SignupWithVerificationCodeMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/StaleChatUpdateMutation.graphql (renamed from quora/graphql/StaleChatUpdateMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/SubscriptionsMutation.graphql (renamed from quora/graphql/SubscriptionsMutation.graphql)0
-rw-r--r--openai_rev/quora/graphql/SummarizePlainPostQuery.graphql (renamed from quora/graphql/SummarizePlainPostQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/SummarizeQuotePostQuery.graphql (renamed from quora/graphql/SummarizeQuotePostQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/SummarizeSharePostQuery.graphql (renamed from quora/graphql/SummarizeSharePostQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/UserSnippetFragment.graphql (renamed from quora/graphql/UserSnippetFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/ViewerInfoQuery.graphql (renamed from quora/graphql/ViewerInfoQuery.graphql)0
-rw-r--r--openai_rev/quora/graphql/ViewerStateFragment.graphql (renamed from quora/graphql/ViewerStateFragment.graphql)0
-rw-r--r--openai_rev/quora/graphql/ViewerStateUpdatedSubscription.graphql (renamed from quora/graphql/ViewerStateUpdatedSubscription.graphql)0
-rw-r--r--openai_rev/quora/graphql/__init__.py0
-rw-r--r--openai_rev/quora/mail.py (renamed from quora/mail.py)4
-rw-r--r--openai_rev/you/README.md (renamed from you/README.md)3
-rw-r--r--openai_rev/you/__init__.py (renamed from you/__init__.py)62
-rw-r--r--requirements.txt3
-rw-r--r--testing/accounts.txt3
-rw-r--r--testing/forefront_test.py7
-rw-r--r--testing/poe_account_create_test.py72
-rw-r--r--testing/poe_test.py6
-rw-r--r--testing/quora_test_2.py13
-rw-r--r--testing/sqlchat_test.py4
-rw-r--r--testing/t3nsor_test.py4
-rw-r--r--testing/writesonic_test.py22
-rw-r--r--testing/you_test.py2
63 files changed, 512 insertions, 444 deletions
diff --git a/.gitignore b/.gitignore
index 300ad223..cec7eee1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@
*.log
cookie.json
+
+*.pyc
diff --git a/forefront/README.md b/forefront/README.md
deleted file mode 100644
index 5b084af5..00000000
--- a/forefront/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-### Example: `forefront` (use like openai pypi package) <a name="example-forefront"></a>
-
-```python
-import forefront
-
-# create an account
-token = forefront.Account.create(logging=True)
-print(token)
-
-# get a response
-for response in forefront.StreamingCompletion.create(token = token,
- prompt = 'hello world', model='gpt-4'):
-
- print(response.completion.choices[0].text, end = '')
-``` \ No newline at end of file
diff --git a/forefront/__init__.py b/forefront/__init__.py
deleted file mode 100644
index 44f5d44d..00000000
--- a/forefront/__init__.py
+++ /dev/null
@@ -1,152 +0,0 @@
-from json import loads
-from re import match
-from time import time, sleep
-from uuid import uuid4
-
-from requests import post
-from tls_client import Session
-
-from forefront.mail import Mail
-from forefront.typing import ForeFrontResponse
-
-
-class Account:
- @staticmethod
- def create(proxy=None, logging=False):
-
- proxies = {
- 'http': 'http://' + proxy,
- 'https': 'http://' + proxy} if proxy else False
-
- start = time()
-
- mail = Mail(proxies)
- mail_token = None
- mail_adress = mail.get_mail()
-
- # print(mail_adress)
-
- client = Session(client_identifier='chrome110')
- client.proxies = proxies
- client.headers = {
- "origin": "https://accounts.forefront.ai",
- "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
- }
-
- response = client.post('https://clerk.forefront.ai/v1/client/sign_ups?_clerk_js_version=4.32.6',
- data={
- "email_address": mail_adress
- }
- )
-
- trace_token = response.json()['response']['id']
- if logging: print(trace_token)
-
- response = client.post(
- f"https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.32.6",
- data={
- "strategy": "email_code",
- }
- )
-
- if logging: print(response.text)
-
- if not 'sign_up_attempt' in response.text:
- return 'Failed to create account!'
-
- while True:
- sleep(1)
- for _ in mail.fetch_inbox():
- print(mail.get_message_content(_["id"]))
- mail_token = match(r"(\d){5,6}", mail.get_message_content(_["id"])).group(0)
-
- if mail_token:
- break
-
- if logging: print(mail_token)
-
- response = client.post(
- f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/attempt_verification?_clerk_js_version=4.38.4',
- data={
- 'code': mail_token,
- 'strategy': 'email_code'
- })
-
- if logging: print(response.json())
-
- token = response.json()['client']['sessions'][0]['last_active_token']['jwt']
-
- with open('accounts.txt', 'a') as f:
- f.write(f'{mail_adress}:{token}\n')
-
- if logging: print(time() - start)
-
- return token
-
-
-class StreamingCompletion:
- @staticmethod
- def create(
- token=None,
- chatId=None,
- prompt='',
- actionType='new',
- defaultPersona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
- model='gpt-4') -> ForeFrontResponse:
-
- if not token: raise Exception('Token is required!')
- if not chatId: chatId = str(uuid4())
-
- headers = {
- 'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com',
- 'accept': '*/*',
- 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
- 'authorization': 'Bearer ' + token,
- 'cache-control': 'no-cache',
- 'content-type': 'application/json',
- 'origin': 'https://chat.forefront.ai',
- 'pragma': 'no-cache',
- 'referer': 'https://chat.forefront.ai/',
- 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
- 'sec-ch-ua-mobile': '?0',
- 'sec-ch-ua-platform': '"macOS"',
- 'sec-fetch-dest': 'empty',
- 'sec-fetch-mode': 'cors',
- 'sec-fetch-site': 'cross-site',
- 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
- }
-
- json_data = {
- 'text': prompt,
- 'action': actionType,
- 'parentId': chatId,
- 'workspaceId': chatId,
- 'messagePersona': defaultPersona,
- 'model': model
- }
-
- for chunk in post('https://chat-server.tenant-forefront-default.knative.chi.coreweave.com/chat',
- headers=headers, json=json_data, stream=True).iter_lines():
-
- if b'finish_reason":null' in chunk:
- data = loads(chunk.decode('utf-8').split('data: ')[1])
- token = data['choices'][0]['delta'].get('content')
-
- if token != None:
- yield ForeFrontResponse({
- 'id': chatId,
- 'object': 'text_completion',
- 'created': int(time()),
- 'model': model,
- 'choices': [{
- 'text': token,
- 'index': 0,
- 'logprobs': None,
- 'finish_reason': 'stop'
- }],
- 'usage': {
- 'prompt_tokens': len(prompt),
- 'completion_tokens': len(token),
- 'total_tokens': len(prompt) + len(token)
- }
- })
diff --git a/forefront/typing.py b/forefront/typing.py
deleted file mode 100644
index a11ac49f..00000000
--- a/forefront/typing.py
+++ /dev/null
@@ -1,36 +0,0 @@
-class ForeFrontResponse:
- class Completion:
- class Choices:
- def __init__(self, choice: dict) -> None:
- self.text = choice['text']
- self.content = self.text.encode()
- self.index = choice['index']
- self.logprobs = choice['logprobs']
- self.finish_reason = choice['finish_reason']
-
- def __repr__(self) -> str:
- return f'''<__main__.APIResponse.Completion.Choices(\n text = {self.text.encode()},\n index = {self.index},\n logprobs = {self.logprobs},\n finish_reason = {self.finish_reason})object at 0x1337>'''
-
- def __init__(self, choices: dict) -> None:
- self.choices = [self.Choices(choice) for choice in choices]
-
- class Usage:
- def __init__(self, usage_dict: dict) -> None:
- self.prompt_tokens = usage_dict['prompt_tokens']
- self.completion_tokens = usage_dict['completion_tokens']
- self.total_tokens = usage_dict['total_tokens']
-
- def __repr__(self):
- return f'''<__main__.APIResponse.Usage(\n prompt_tokens = {self.prompt_tokens},\n completion_tokens = {self.completion_tokens},\n total_tokens = {self.total_tokens})object at 0x1337>'''
-
- def __init__(self, response_dict: dict) -> None:
- self.response_dict = response_dict
- self.id = response_dict['id']
- self.object = response_dict['object']
- self.created = response_dict['created']
- self.model = response_dict['model']
- self.completion = self.Completion(response_dict['choices'])
- self.usage = self.Usage(response_dict['usage'])
-
- def json(self) -> dict:
- return self.response_dict
diff --git a/gui/streamlit_app.py b/gui/streamlit_app.py
index 4e0a618d..2bbf86e0 100644
--- a/gui/streamlit_app.py
+++ b/gui/streamlit_app.py
@@ -4,19 +4,21 @@ import sys
sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir))
import streamlit as st
-import you
+from openai_rev import you
+
def get_answer(question: str) -> str:
# Set cloudflare clearance cookie and get answer from GPT-4 model
try:
- result = you.Completion.create(
- prompt = question)
-
- return result['response']
-
+ result = you.Completion.create(prompt=question)
+
+ return result.text
+
except Exception as e:
# Return error message if an exception occurs
- return f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
+ return (
+ f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
+ )
# Set page configuration and add header
@@ -27,14 +29,13 @@ st.set_page_config(
menu_items={
'Get Help': 'https://github.com/xtekky/gpt4free/blob/main/README.md',
'Report a bug': "https://github.com/xtekky/gpt4free/issues",
- 'About': "### gptfree GUI"
- }
+ 'About': "### gptfree GUI",
+ },
)
st.header('GPT4free GUI')
# Add text area for user input and button to get answer
-question_text_area = st.text_area(
- '🤖 Ask Any Question :', placeholder='Explain quantum computing in 50 words')
+question_text_area = st.text_area('🤖 Ask Any Question :', placeholder='Explain quantum computing in 50 words')
if st.button('🧠 Think'):
answer = get_answer(question_text_area)
# Display answer
diff --git a/quora/graphql/__init__.py b/openai_rev/__init__.py
index e69de29b..e69de29b 100644
--- a/quora/graphql/__init__.py
+++ b/openai_rev/__init__.py
diff --git a/openai_rev/forefront/README.md b/openai_rev/forefront/README.md
new file mode 100644
index 00000000..94089faa
--- /dev/null
+++ b/openai_rev/forefront/README.md
@@ -0,0 +1,15 @@
+### Example: `forefront` (use like openai pypi package) <a name="example-forefront"></a>
+
+```python
+
+from openai_rev import forefront
+
+# create an account
+token = forefront.Account.create(logging=True)
+print(token)
+
+# get a response
+for response in forefront.StreamingCompletion.create(token=token,
+ prompt='hello world', model='gpt-4'):
+ print(response.completion.choices[0].text, end='')
+``` \ No newline at end of file
diff --git a/openai_rev/forefront/__init__.py b/openai_rev/forefront/__init__.py
new file mode 100644
index 00000000..bef10e9e
--- /dev/null
+++ b/openai_rev/forefront/__init__.py
@@ -0,0 +1,180 @@
+from json import loads
+from re import match
+from time import time, sleep
+from uuid import uuid4
+
+from altair.vegalite.v3 import Generator
+from fake_useragent import UserAgent
+from requests import post
+from tls_client import Session
+
+from .mail import Mail
+from .models import ForeFrontResponse
+
+
+class Account:
+ @staticmethod
+ def create(proxy=None, logging=False):
+ proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else False
+
+ start = time()
+
+ mail_client = Mail(proxies)
+ mail_token = None
+ mail_address = mail_client.get_mail()
+
+ # print(mail_address)
+
+ client = Session(client_identifier='chrome110')
+ client.proxies = proxies
+ client.headers = {
+ 'origin': 'https://accounts.forefront.ai',
+ 'user-agent': UserAgent().random,
+ }
+
+ response = client.post(
+ 'https://clerk.forefront.ai/v1/client/sign_ups?_clerk_js_version=4.32.6',
+ data={'email_address': mail_address},
+ )
+
+ trace_token = response.json()['response']['id']
+ if logging:
+ print(trace_token)
+
+ response = client.post(
+ f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.32.6',
+ data={
+ 'strategy': 'email_code',
+ },
+ )
+
+ if logging:
+ print(response.text)
+
+ if 'sign_up_attempt' not in response.text:
+ return 'Failed to create account!'
+
+ while True:
+ sleep(1)
+ for _ in mail_client.fetch_inbox():
+ print(mail_client.get_message_content(_['id']))
+ mail_token = match(r'(\d){5,6}', mail_client.get_message_content(_['id'])).group(0)
+
+ if mail_token:
+ break
+
+ if logging:
+ print(mail_token)
+
+ response = client.post(
+ f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/attempt_verification?_clerk_js_version=4.38.4',
+ data={'code': mail_token, 'strategy': 'email_code'},
+ )
+
+ if logging:
+ print(response.json())
+
+ token = response.json()['client']['sessions'][0]['last_active_token']['jwt']
+
+ with open('accounts.txt', 'a') as f:
+ f.write(f'{mail_address}:{token}\n')
+
+ if logging:
+ print(time() - start)
+
+ return token
+
+
+class StreamingCompletion:
+ @staticmethod
+ def create(
+ token=None,
+ chat_id=None,
+ prompt='',
+ action_type='new',
+ default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
+ model='gpt-4',
+ ) -> Generator[ForeFrontResponse, None, None]:
+ if not token:
+ raise Exception('Token is required!')
+ if not chat_id:
+ chat_id = str(uuid4())
+
+ headers = {
+ 'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com',
+ 'accept': '*/*',
+ 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
+ 'authorization': 'Bearer ' + token,
+ 'cache-control': 'no-cache',
+ 'content-type': 'application/json',
+ 'origin': 'https://chat.forefront.ai',
+ 'pragma': 'no-cache',
+ 'referer': 'https://chat.forefront.ai/',
+ 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
+ 'sec-ch-ua-mobile': '?0',
+ 'sec-ch-ua-platform': '"macOS"',
+ 'sec-fetch-dest': 'empty',
+ 'sec-fetch-mode': 'cors',
+ 'sec-fetch-site': 'cross-site',
+ 'user-agent': UserAgent().random,
+ }
+
+ json_data = {
+ 'text': prompt,
+ 'action': action_type,
+ 'parentId': chat_id,
+ 'workspaceId': chat_id,
+ 'messagePersona': default_persona,
+ 'model': model,
+ }
+
+ for chunk in post(
+ 'https://chat-server.tenant-forefront-default.knative.chi.coreweave.com/chat',
+ headers=headers,
+ json=json_data,
+ stream=True,
+ ).iter_lines():
+ if b'finish_reason":null' in chunk:
+ data = loads(chunk.decode('utf-8').split('data: ')[1])
+ token = data['choices'][0]['delta'].get('content')
+
+ if token is not None:
+ yield ForeFrontResponse(
+ **{
+ 'id': chat_id,
+ 'object': 'text_completion',
+ 'created': int(time()),
+ 'text': token,
+ 'model': model,
+ 'choices': [{'text': token, 'index': 0, 'logprobs': None, 'finish_reason': 'stop'}],
+ 'usage': {
+ 'prompt_tokens': len(prompt),
+ 'completion_tokens': len(token),
+ 'total_tokens': len(prompt) + len(token),
+ },
+ }
+ )
+
+
+class Completion:
+ @staticmethod
+ def create(
+ token=None,
+ chat_id=None,
+ prompt='',
+ action_type='new',
+ default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
+ model='gpt-4',
+ ) -> ForeFrontResponse:
+ final_response = None
+ for response in StreamingCompletion.create(
+ token=token,
+ chat_id=chat_id,
+ prompt=prompt,
+ action_type=action_type,
+ default_persona=default_persona,
+ model=model,
+ ):
+ final_response = response
+
+ return final_response
diff --git a/forefront/mail.py b/openai_rev/forefront/mail.py
index 41c2a647..2c00051c 100644
--- a/forefront/mail.py
+++ b/openai_rev/forefront/mail.py
@@ -23,21 +23,17 @@ class Mail:
"sec-fetch-dest": "empty",
"referer": "https://mail.tm/",
"accept-encoding": "gzip, deflate, br",
- "accept-language": "en-GB,en-US;q=0.9,en;q=0.8"
+ "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
}
def get_mail(self) -> str:
token = ''.join(choices(ascii_letters, k=14)).lower()
- init = self.client.post("https://api.mail.tm/accounts", json={
- "address": f"{token}@bugfoo.com",
- "password": token
- })
+ init = self.client.post(
+ "https://api.mail.tm/accounts", json={"address": f"{token}@bugfoo.com", "password": token}
+ )
if init.status_code == 201:
- resp = self.client.post("https://api.mail.tm/token", json={
- **init.json(),
- "password": token
- })
+ resp = self.client.post("https://api.mail.tm/token", json={**init.json(), "password": token})
self.client.headers['authorization'] = 'Bearer ' + resp.json()['token']
diff --git a/openai_rev/forefront/models.py b/openai_rev/forefront/models.py
new file mode 100644
index 00000000..23e90903
--- /dev/null
+++ b/openai_rev/forefront/models.py
@@ -0,0 +1,26 @@
+from typing import Any, List
+
+from pydantic import BaseModel
+
+
+class Choice(BaseModel):
+ text: str
+ index: int
+ logprobs: Any
+ finish_reason: str
+
+
+class Usage(BaseModel):
+ prompt_tokens: int
+ completion_tokens: int
+ total_tokens: int
+
+
+class ForeFrontResponse(BaseModel):
+ id: str
+ object: str
+ created: int
+ model: str
+ choices: List[Choice]
+ usage: Usage
+ text: str
diff --git a/openai_rev/openai_rev.py b/openai_rev/openai_rev.py
new file mode 100644
index 00000000..6e1341c7
--- /dev/null
+++ b/openai_rev/openai_rev.py
@@ -0,0 +1,35 @@
+from enum import Enum
+
+import quora
+import you
+
+
+class Provider(Enum):
+ You = 'you'
+ Poe = 'poe'
+
+
+class Completion:
+ @staticmethod
+ def create(provider: Provider, prompt: str, **kwargs):
+ if provider == Provider.Poe:
+ return Completion.__poe_service(prompt, **kwargs)
+ elif provider == Provider.You:
+ return Completion.__you_service(prompt, **kwargs)
+
+ @classmethod
+ def __you_service(cls, prompt: str, **kwargs) -> str:
+ return you.Completion.create(prompt).text
+
+ @classmethod
+ def __poe_service(cls, prompt: str, **kwargs) -> str:
+ return quora.Completion.create(prompt=prompt).text
+
+
+# usage You
+response = Completion.create(Provider.You, prompt='Write a poem on Lionel Messi')
+print(response)
+
+# usage Poe
+response = Completion.create(Provider.Poe, prompt='Write a poem on Lionel Messi', token='GKzCahZYGKhp76LfE197xw==')
+print(response)
diff --git a/openai_rev/phind/README.md b/openai_rev/phind/README.md
new file mode 100644
index 00000000..85288c06
--- /dev/null
+++ b/openai_rev/phind/README.md
@@ -0,0 +1,37 @@
+### Example: `phind` (use like openai pypi package) <a name="example-phind"></a>
+
+```python
+
+from openai_rev import phind
+
+# set cf_clearance cookie (needed again)
+phind.cf_clearance = 'xx.xx-1682166681-0-160'
+phind.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' # same as the one from browser you got cf_clearance from
+
+prompt = 'who won the quatar world cup'
+
+# help needed: not getting newlines from the stream, please submit a PR if you know how to fix this
+# stream completion
+for result in phind.StreamingCompletion.create(
+ model='gpt-4',
+ prompt=prompt,
+ results=phind.Search.create(prompt, actualSearch=True),
+ # create search (set actualSearch to False to disable internet)
+ creative=False,
+ detailed=False,
+ codeContext=''): # up to 3000 chars of code
+
+ print(result.completion.choices[0].text, end='', flush=True)
+
+# normal completion
+result = phind.Completion.create(
+ model='gpt-4',
+ prompt=prompt,
+ results=phind.Search.create(prompt, actualSearch=True),
+ # create search (set actualSearch to False to disable internet)
+ creative=False,
+ detailed=False,
+ codeContext='') # up to 3000 chars of code
+
+print(result.completion.choices[0].text)
+```
diff --git a/quora/README.md b/openai_rev/quora/README.md
index 1acd4a6e..dc2bb32d 100644
--- a/quora/README.md
+++ b/openai_rev/quora/README.md
@@ -20,37 +20,37 @@ models = {
```python
# import quora (poe) package
-import quora
+from openai_rev import quora
# create account
# make sure to set enable_bot_creation to True
-token = quora.Account.create(logging = True, enable_bot_creation=True)
+token = quora.Account.create(logging=True, enable_bot_creation=True)
model = quora.Model.create(
- token = token,
- model = 'gpt-3.5-turbo', # or claude-instant-v1.0
- system_prompt = 'you are ChatGPT a large language model ...'
+ token=token,
+ model='gpt-3.5-turbo', # or claude-instant-v1.0
+ system_prompt='you are ChatGPT a large language model ...'
)
-print(model.name) # gptx....
+print(model.name) # gptx....
# streaming response
for response in quora.StreamingCompletion.create(
- custom_model = model.name,
- prompt ='hello world',
- token = token):
-
- print(response.completion.choices[0].text)
+ custom_model=model.name,
+ prompt='hello world',
+ token=token):
+ print(response.text)
```
#### Normal Response:
```python
+import quora
response = quora.Completion.create(model = 'gpt-4',
prompt = 'hello world',
- token = token)
+ token = 'token')
-print(response.completion.choices[0].text)
+print(response.text)
```
#### Update Use This For Poe
diff --git a/quora/__init__.py b/openai_rev/quora/__init__.py
index cd5ec8f9..f5d9e96e 100644
--- a/quora/__init__.py
+++ b/openai_rev/quora/__init__.py
@@ -6,11 +6,12 @@ from pathlib import Path
from random import choice, choices, randint
from re import search, findall
from string import ascii_letters, digits
-from typing import Optional, Union
+from typing import Optional, Union, List, Any, Generator
from urllib.parse import unquote
import selenium.webdriver.support.expected_conditions as EC
from fake_useragent import UserAgent
+from pydantic import BaseModel
from pypasser import reCaptchaV3
from requests import Session
from selenium.webdriver import Firefox, Chrome, FirefoxOptions, ChromeOptions
@@ -18,8 +19,8 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from tls_client import Session as TLS
-from quora.api import Client as PoeClient
-from quora.mail import Emailnator
+from .api import Client as PoeClient
+from .mail import Emailnator
SELENIUM_WEB_DRIVER_ERROR_MSG = b'''The error message you are receiving is due to the `geckodriver` executable not
being found in your system\'s PATH. To resolve this issue, you need to download the geckodriver and add its location
@@ -67,42 +68,27 @@ def extract_formkey(html):
return formkey
-class PoeResponse:
- class Completion:
- class Choices:
- def __init__(self, choice: dict) -> None:
- self.text = choice['text']
- self.content = self.text.encode()
- self.index = choice['index']
- self.logprobs = choice['logprobs']
- self.finish_reason = choice['finish_reason']
+class Choice(BaseModel):
+ text: str
+ index: int
+ logprobs: Any
+ finish_reason: str
- def __repr__(self) -> str:
- return f'''<__main__.APIResponse.Completion.Choices(\n text = {self.text.encode()},\n index = {self.index},\n logprobs = {self.logprobs},\n finish_reason = {self.finish_reason})object at 0x1337>'''
- def __init__(self, choices: dict) -> None:
- self.choices = [self.Choices(choice) for choice in choices]
+class Usage(BaseModel):
+ prompt_tokens: int
+ completion_tokens: int
+ total_tokens: int
- class Usage:
- def __init__(self, usage_dict: dict) -> None:
- self.prompt_tokens = usage_dict['prompt_tokens']
- self.completion_tokens = usage_dict['completion_tokens']
- self.total_tokens = usage_dict['total_tokens']
- def __repr__(self):
- return f'''<__main__.APIResponse.Usage(\n prompt_tokens = {self.prompt_tokens},\n completion_tokens = {self.completion_tokens},\n total_tokens = {self.total_tokens})object at 0x1337>'''
-
- def __init__(self, response_dict: dict) -> None:
- self.response_dict = response_dict
- self.id = response_dict['id']
- self.object = response_dict['object']
- self.created = response_dict['created']
- self.model = response_dict['model']
- self.completion = self.Completion(response_dict['choices'])
- self.usage = self.Usage(response_dict['usage'])
-
- def json(self) -> dict:
- return self.response_dict
+class PoeResponse(BaseModel):
+ id: int
+ object: str
+ created: int
+ model: str
+ choices: List[Choice]
+ usage: Usage
+ text: str
class ModelResponse:
@@ -116,11 +102,11 @@ class ModelResponse:
class Model:
@staticmethod
def create(
- token: str,
- model: str = 'gpt-3.5-turbo', # claude-instant
- system_prompt: str = 'You are ChatGPT a large language model developed by Openai. Answer as consisely as possible',
- description: str = 'gpt-3.5 language model from openai, skidded by poe.com',
- handle: str = None,
+ token: str,
+ model: str = 'gpt-3.5-turbo', # claude-instant
+ system_prompt: str = 'You are ChatGPT a large language model developed by Openai. Answer as consisely as possible',
+ description: str = 'gpt-3.5 language model from openai, skidded by poe.com',
+ handle: str = None,
) -> ModelResponse:
models = {
'gpt-3.5-turbo': 'chinchilla',
@@ -202,9 +188,9 @@ class Model:
class Account:
@staticmethod
def create(
- proxy: Optional[str] = None,
- logging: bool = False,
- enable_bot_creation: bool = False,
+ proxy: Optional[str] = None,
+ logging: bool = False,
+ enable_bot_creation: bool = False,
):
client = TLS(client_identifier='chrome110')
client.proxies = {'http': f'http://{proxy}', 'https': f'http://{proxy}'} if proxy else None
@@ -309,22 +295,23 @@ class Account:
class StreamingCompletion:
@staticmethod
def create(
- model: str = 'gpt-4',
- custom_model: bool = None,
- prompt: str = 'hello world',
- token: str = '',
- ):
+ model: str = 'gpt-4',
+ custom_model: bool = None,
+ prompt: str = 'hello world',
+ token: str = '',
+ ) -> Generator[PoeResponse, None, None]:
_model = MODELS[model] if not custom_model else custom_model
client = PoeClient(token)
for chunk in client.send_message(_model, prompt):
yield PoeResponse(
- {
+ **{
'id': chunk['messageId'],
'object': 'text_completion',
'created': chunk['creationTime'],
'model': _model,
+ 'text': chunk['text_new'],
'choices': [
{
'text': chunk['text_new'],
@@ -343,12 +330,13 @@ class StreamingCompletion:
class Completion:
+ @staticmethod
def create(
- model: str = 'gpt-4',
- custom_model: str = None,
- prompt: str = 'hello world',
- token: str = '',
- ):
+ model: str = 'gpt-4',
+ custom_model: str = None,
+ prompt: str = 'hello world',
+ token: str = '',
+ ) -> PoeResponse:
models = {
'sage': 'capybara',
'gpt-4': 'beaver',
@@ -361,15 +349,17 @@ class Completion:
client = PoeClient(token)
- for chunk in client.send_message(_model, prompt):
- pass
+ chunk = None
+ for response in client.send_message(_model, prompt):
+ chunk = response
return PoeResponse(
- {
+ **{
'id': chunk['messageId'],
'object': 'text_completion',
'created': chunk['creationTime'],
'model': _model,
+ 'text': chunk['text_new'],
'choices': [
{
'text': chunk['text'],
@@ -389,12 +379,12 @@ class Completion:
class Poe:
def __init__(
- self,
- model: str = 'ChatGPT',
- driver: str = 'firefox',
- download_driver: bool = False,
- driver_path: Optional[str] = None,
- cookie_path: str = './quora/cookie.json',
+ self,
+ model: str = 'ChatGPT',
+ driver: str = 'firefox',
+ download_driver: bool = False,
+ driver_path: Optional[str] = None,
+ cookie_path: str = './quora/cookie.json',
):
# validating the model
if model and model not in MODELS:
@@ -473,12 +463,12 @@ class Poe:
return response
def create_bot(
- self,
- name: str,
- /,
- prompt: str = '',
- base_model: str = 'ChatGPT',
- description: str = '',
+ self,
+ name: str,
+ /,
+ prompt: str = '',
+ base_model: str = 'ChatGPT',
+ description: str = '',
) -> None:
if base_model not in MODELS:
raise RuntimeError('Sorry, the base_model you provided does not exist. Please check and try again.')
diff --git a/quora/api.py b/openai_rev/quora/api.py
index 697f6663..42814f2c 100644
--- a/quora/api.py
+++ b/openai_rev/quora/api.py
@@ -384,7 +384,7 @@ class Client:
continue
# update info about response
- message["text_new"] = message["text"][len(last_text):]
+ message["text_new"] = message["text"][len(last_text) :]
last_text = message["text"]
message_id = message["messageId"]
@@ -456,21 +456,21 @@ class Client:
logger.info(f"No more messages left to delete.")
def create_bot(
- self,
- handle,
- prompt="",
- base_model="chinchilla",
- description="",
- intro_message="",
- api_key=None,
- api_bot=False,
- api_url=None,
- prompt_public=True,
- pfp_url=None,
- linkification=False,
- markdown_rendering=True,
- suggested_replies=False,
- private=False,
+ self,
+ handle,
+ prompt="",
+ base_model="chinchilla",
+ description="",
+ intro_message="",
+ api_key=None,
+ api_bot=False,
+ api_url=None,
+ prompt_public=True,
+ pfp_url=None,
+ linkification=False,
+ markdown_rendering=True,
+ suggested_replies=False,
+ private=False,
):
result = self.send_query(
"PoeBotCreateMutation",
@@ -499,21 +499,21 @@ class Client:
return data
def edit_bot(
- self,
- bot_id,
- handle,
- prompt="",
- base_model="chinchilla",
- description="",
- intro_message="",
- api_key=None,
- api_url=None,
- private=False,
- prompt_public=True,
- pfp_url=None,
- linkification=False,
- markdown_rendering=True,
- suggested_replies=False,
+ self,
+ bot_id,
+ handle,
+ prompt="",
+ base_model="chinchilla",
+ description="",
+ intro_message="",
+ api_key=None,
+ api_url=None,
+ private=False,
+ prompt_public=True,
+ pfp_url=None,
+ linkification=False,
+ markdown_rendering=True,
+ suggested_replies=False,
):
result = self.send_query(
"PoeBotEditMutation",
diff --git a/quora/cookies.txt b/openai_rev/quora/cookies.txt
index 9cccf6ba..9cccf6ba 100644
--- a/quora/cookies.txt
+++ b/openai_rev/quora/cookies.txt
diff --git a/quora/graphql/AddHumanMessageMutation.graphql b/openai_rev/quora/graphql/AddHumanMessageMutation.graphql
index 01e6bc8c..01e6bc8c 100644
--- a/quora/graphql/AddHumanMessageMutation.graphql
+++ b/openai_rev/quora/graphql/AddHumanMessageMutation.graphql
diff --git a/quora/graphql/AddMessageBreakMutation.graphql b/openai_rev/quora/graphql/AddMessageBreakMutation.graphql
index b28d9903..b28d9903 100644
--- a/quora/graphql/AddMessageBreakMutation.graphql
+++ b/openai_rev/quora/graphql/AddMessageBreakMutation.graphql
diff --git a/quora/graphql/AutoSubscriptionMutation.graphql b/openai_rev/quora/graphql/AutoSubscriptionMutation.graphql
index 6cf7bf74..6cf7bf74 100644
--- a/quora/graphql/AutoSubscriptionMutation.graphql
+++ b/openai_rev/quora/graphql/AutoSubscriptionMutation.graphql
diff --git a/quora/graphql/BioFragment.graphql b/openai_rev/quora/graphql/BioFragment.graphql
index c4218030..c4218030 100644
--- a/quora/graphql/BioFragment.graphql
+++ b/openai_rev/quora/graphql/BioFragment.graphql
diff --git a/quora/graphql/ChatAddedSubscription.graphql b/openai_rev/quora/graphql/ChatAddedSubscription.graphql
index 664b107f..664b107f 100644
--- a/quora/graphql/ChatAddedSubscription.graphql
+++ b/openai_rev/quora/graphql/ChatAddedSubscription.graphql
diff --git a/quora/graphql/ChatFragment.graphql b/openai_rev/quora/graphql/ChatFragment.graphql
index 605645ff..605645ff 100644
--- a/quora/graphql/ChatFragment.graphql
+++ b/openai_rev/quora/graphql/ChatFragment.graphql
diff --git a/quora/graphql/ChatListPaginationQuery.graphql b/openai_rev/quora/graphql/ChatListPaginationQuery.graphql
index 6d9ae884..6d9ae884 100644
--- a/quora/graphql/ChatListPaginationQuery.graphql
+++ b/openai_rev/quora/graphql/ChatListPaginationQuery.graphql
diff --git a/quora/graphql/ChatPaginationQuery.graphql b/openai_rev/quora/graphql/ChatPaginationQuery.graphql
index f2452cd6..f2452cd6 100644
--- a/quora/graphql/ChatPaginationQuery.graphql
+++ b/openai_rev/quora/graphql/ChatPaginationQuery.graphql
diff --git a/quora/graphql/ChatViewQuery.graphql b/openai_rev/quora/graphql/ChatViewQuery.graphql
index c330107d..c330107d 100644
--- a/quora/graphql/ChatViewQuery.graphql
+++ b/openai_rev/quora/graphql/ChatViewQuery.graphql
diff --git a/quora/graphql/DeleteHumanMessagesMutation.graphql b/openai_rev/quora/graphql/DeleteHumanMessagesMutation.graphql
index 42692c6e..42692c6e 100644
--- a/quora/graphql/DeleteHumanMessagesMutation.graphql
+++ b/openai_rev/quora/graphql/DeleteHumanMessagesMutation.graphql
diff --git a/quora/graphql/DeleteMessageMutation.graphql b/openai_rev/quora/graphql/DeleteMessageMutation.graphql
index 7b9e36d4..7b9e36d4 100644
--- a/quora/graphql/DeleteMessageMutation.graphql
+++ b/openai_rev/quora/graphql/DeleteMessageMutation.graphql
diff --git a/quora/graphql/HandleFragment.graphql b/openai_rev/quora/graphql/HandleFragment.graphql
index f53c484b..f53c484b 100644
--- a/quora/graphql/HandleFragment.graphql
+++ b/openai_rev/quora/graphql/HandleFragment.graphql
diff --git a/quora/graphql/LoginWithVerificationCodeMutation.graphql b/openai_rev/quora/graphql/LoginWithVerificationCodeMutation.graphql
index 723b1f44..723b1f44 100644
--- a/quora/graphql/LoginWithVerificationCodeMutation.graphql
+++ b/openai_rev/quora/graphql/LoginWithVerificationCodeMutation.graphql
diff --git a/quora/graphql/MessageAddedSubscription.graphql b/openai_rev/quora/graphql/MessageAddedSubscription.graphql
index 8dc9499c..8dc9499c 100644
--- a/quora/graphql/MessageAddedSubscription.graphql
+++ b/openai_rev/quora/graphql/MessageAddedSubscription.graphql
diff --git a/quora/graphql/MessageDeletedSubscription.graphql b/openai_rev/quora/graphql/MessageDeletedSubscription.graphql
index 54c1c164..54c1c164 100644
--- a/quora/graphql/MessageDeletedSubscription.graphql
+++ b/openai_rev/quora/graphql/MessageDeletedSubscription.graphql
diff --git a/quora/graphql/MessageFragment.graphql b/openai_rev/quora/graphql/MessageFragment.graphql
index cc860811..cc860811 100644
--- a/quora/graphql/MessageFragment.graphql
+++ b/openai_rev/quora/graphql/MessageFragment.graphql
diff --git a/quora/graphql/MessageRemoveVoteMutation.graphql b/openai_rev/quora/graphql/MessageRemoveVoteMutation.graphql
index d5e6e610..d5e6e610 100644
--- a/quora/graphql/MessageRemoveVoteMutation.graphql
+++ b/openai_rev/quora/graphql/MessageRemoveVoteMutation.graphql
diff --git a/quora/graphql/MessageSetVoteMutation.graphql b/openai_rev/quora/graphql/MessageSetVoteMutation.graphql
index 76000df0..76000df0 100644
--- a/quora/graphql/MessageSetVoteMutation.graphql
+++ b/openai_rev/quora/graphql/MessageSetVoteMutation.graphql
diff --git a/quora/graphql/PoeBotCreateMutation.graphql b/openai_rev/quora/graphql/PoeBotCreateMutation.graphql
index 971b4248..971b4248 100644
--- a/quora/graphql/PoeBotCreateMutation.graphql
+++ b/openai_rev/quora/graphql/PoeBotCreateMutation.graphql
diff --git a/quora/graphql/PoeBotEditMutation.graphql b/openai_rev/quora/graphql/PoeBotEditMutation.graphql
index fdd309ef..fdd309ef 100644
--- a/quora/graphql/PoeBotEditMutation.graphql
+++ b/openai_rev/quora/graphql/PoeBotEditMutation.graphql
diff --git a/quora/graphql/SendMessageMutation.graphql b/openai_rev/quora/graphql/SendMessageMutation.graphql
index 4b0a4383..4b0a4383 100644
--- a/quora/graphql/SendMessageMutation.graphql
+++ b/openai_rev/quora/graphql/SendMessageMutation.graphql
diff --git a/quora/graphql/SendVerificationCodeForLoginMutation.graphql b/openai_rev/quora/graphql/SendVerificationCodeForLoginMutation.graphql
index 45af4799..45af4799 100644
--- a/quora/graphql/SendVerificationCodeForLoginMutation.graphql
+++ b/openai_rev/quora/graphql/SendVerificationCodeForLoginMutation.graphql
diff --git a/quora/graphql/ShareMessagesMutation.graphql b/openai_rev/quora/graphql/ShareMessagesMutation.graphql
index 92e80db5..92e80db5 100644
--- a/quora/graphql/ShareMessagesMutation.graphql
+++ b/openai_rev/quora/graphql/ShareMessagesMutation.graphql
diff --git a/quora/graphql/SignupWithVerificationCodeMutation.graphql b/openai_rev/quora/graphql/SignupWithVerificationCodeMutation.graphql
index 06b2826f..06b2826f 100644
--- a/quora/graphql/SignupWithVerificationCodeMutation.graphql
+++ b/openai_rev/quora/graphql/SignupWithVerificationCodeMutation.graphql
diff --git a/quora/graphql/StaleChatUpdateMutation.graphql b/openai_rev/quora/graphql/StaleChatUpdateMutation.graphql
index de203d47..de203d47 100644
--- a/quora/graphql/StaleChatUpdateMutation.graphql
+++ b/openai_rev/quora/graphql/StaleChatUpdateMutation.graphql
diff --git a/quora/graphql/SubscriptionsMutation.graphql b/openai_rev/quora/graphql/SubscriptionsMutation.graphql
index b864bd60..b864bd60 100644
--- a/quora/graphql/SubscriptionsMutation.graphql
+++ b/openai_rev/quora/graphql/SubscriptionsMutation.graphql
diff --git a/quora/graphql/SummarizePlainPostQuery.graphql b/openai_rev/quora/graphql/SummarizePlainPostQuery.graphql
index afa2a84c..afa2a84c 100644
--- a/quora/graphql/SummarizePlainPostQuery.graphql
+++ b/openai_rev/quora/graphql/SummarizePlainPostQuery.graphql
diff --git a/quora/graphql/SummarizeQuotePostQuery.graphql b/openai_rev/quora/graphql/SummarizeQuotePostQuery.graphql
index 5147c3c5..5147c3c5 100644
--- a/quora/graphql/SummarizeQuotePostQuery.graphql
+++ b/openai_rev/quora/graphql/SummarizeQuotePostQuery.graphql
diff --git a/quora/graphql/SummarizeSharePostQuery.graphql b/openai_rev/quora/graphql/SummarizeSharePostQuery.graphql
index cb4a623c..cb4a623c 100644
--- a/quora/graphql/SummarizeSharePostQuery.graphql
+++ b/openai_rev/quora/graphql/SummarizeSharePostQuery.graphql
diff --git a/quora/graphql/UserSnippetFragment.graphql b/openai_rev/quora/graphql/UserSnippetFragment.graphql
index 17fc8426..17fc8426 100644
--- a/quora/graphql/UserSnippetFragment.graphql
+++ b/openai_rev/quora/graphql/UserSnippetFragment.graphql
diff --git a/quora/graphql/ViewerInfoQuery.graphql b/openai_rev/quora/graphql/ViewerInfoQuery.graphql
index 1ecaf9e8..1ecaf9e8 100644
--- a/quora/graphql/ViewerInfoQuery.graphql
+++ b/openai_rev/quora/graphql/ViewerInfoQuery.graphql
diff --git a/quora/graphql/ViewerStateFragment.graphql b/openai_rev/quora/graphql/ViewerStateFragment.graphql
index 3cd83e9c..3cd83e9c 100644
--- a/quora/graphql/ViewerStateFragment.graphql
+++ b/openai_rev/quora/graphql/ViewerStateFragment.graphql
diff --git a/quora/graphql/ViewerStateUpdatedSubscription.graphql b/openai_rev/quora/graphql/ViewerStateUpdatedSubscription.graphql
index 03fc73d1..03fc73d1 100644
--- a/quora/graphql/ViewerStateUpdatedSubscription.graphql
+++ b/openai_rev/quora/graphql/ViewerStateUpdatedSubscription.graphql
diff --git a/openai_rev/quora/graphql/__init__.py b/openai_rev/quora/graphql/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/openai_rev/quora/graphql/__init__.py
diff --git a/quora/mail.py b/openai_rev/quora/mail.py
index e6ce96c2..864d9568 100644
--- a/quora/mail.py
+++ b/openai_rev/quora/mail.py
@@ -42,9 +42,7 @@ class Emailnator:
while True:
sleep(2)
- mail_token = self.client.post(
- "https://www.emailnator.com/message-list", json={"email": self.email}
- )
+ mail_token = self.client.post("https://www.emailnator.com/message-list", json={"email": self.email})
mail_token = loads(mail_token.text)["messageData"]
diff --git a/you/README.md b/openai_rev/you/README.md
index dbce37a5..f759c27c 100644
--- a/you/README.md
+++ b/openai_rev/you/README.md
@@ -1,7 +1,8 @@
### Example: `you` (use like openai pypi package) <a name="example-you"></a>
```python
-import you
+
+from openai_rev import you
# simple request with links and details
response = you.Completion.create(
diff --git a/you/__init__.py b/openai_rev/you/__init__.py
index 8bf31f0d..50d74152 100644
--- a/you/__init__.py
+++ b/openai_rev/you/__init__.py
@@ -1,28 +1,36 @@
+import json
import re
-from json import loads
+from typing import Optional, List, Dict, Any
from uuid import uuid4
from fake_useragent import UserAgent
+from pydantic import BaseModel
from tls_client import Session
+class PoeResponse(BaseModel):
+ text: Optional[str] = None
+ links: List[str] = []
+ extra: Dict[str, Any] = {}
+
+
class Completion:
@staticmethod
def create(
- prompt: str,
- page: int = 1,
- count: int = 10,
- safe_search: str = 'Moderate',
- on_shopping_page: bool = False,
- mkt: str = '',
- response_filter: str = 'WebPages,Translations,TimeZone,Computation,RelatedSearches',
- domain: str = 'youchat',
- query_trace_id: str = None,
- chat: list = None,
- include_links: bool = False,
- detailed: bool = False,
- debug: bool = False,
- ) -> dict:
+ prompt: str,
+ page: int = 1,
+ count: int = 10,
+ safe_search: str = 'Moderate',
+ on_shopping_page: bool = False,
+ mkt: str = '',
+ response_filter: str = 'WebPages,Translations,TimeZone,Computation,RelatedSearches',
+ domain: str = 'youchat',
+ query_trace_id: str = None,
+ chat: list = None,
+ include_links: bool = False,
+ detailed: bool = False,
+ debug: bool = False,
+ ) -> PoeResponse:
if chat is None:
chat = []
@@ -57,23 +65,25 @@ class Completion:
r'(?<=event: youChatSerpResults\ndata:)(.*\n)*?(?=event: )', response.text
).group()
third_party_search_results = re.search(
- r'(?<=event: thirdPartySearchResults\ndata:)(.*\n)*?(?=event: )', response.text).group()
+ r'(?<=event: thirdPartySearchResults\ndata:)(.*\n)*?(?=event: )', response.text
+ ).group()
# slots = findall(r"slots\ndata: (.*)\n\nevent", response.text)[0]
text = ''.join(re.findall(r'{\"youChatToken\": \"(.*?)\"}', response.text))
extra = {
- 'youChatSerpResults': loads(you_chat_serp_results),
+ 'youChatSerpResults': json.loads(you_chat_serp_results),
# 'slots' : loads(slots)
}
- return {
- 'response': text.replace('\\n', '\n').replace('\\\\', '\\').replace('\\"', '"'),
- 'links': loads(third_party_search_results)['search']['third_party_search_results']
- if include_links
- else None,
- 'extra': extra if detailed else None,
- }
+ response = PoeResponse(text=text.replace('\\n', '\n').replace('\\\\', '\\').replace('\\"', '"'))
+ if include_links:
+ response.links = json.loads(third_party_search_results)['search']['third_party_search_results']
+
+ if detailed:
+ response.extra = extra
+
+ return response
@classmethod
def __get_headers(cls) -> dict:
@@ -94,5 +104,5 @@ class Completion:
}
@classmethod
- def __get_failure_response(cls) -> dict:
- return dict(response='Unable to fetch the response, Please try again.', links=[], extra={})
+ def __get_failure_response(cls) -> PoeResponse:
+ return PoeResponse(text='Unable to fetch the response, Please try again.')
diff --git a/requirements.txt b/requirements.txt
index a5673119..020965ea 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
websocket-client
-requests
+requests==2.29.0
tls-client
pypasser
names
@@ -9,3 +9,4 @@ streamlit==1.21.0
selenium
fake-useragent
twocaptcha
+pydantic \ No newline at end of file
diff --git a/testing/accounts.txt b/testing/accounts.txt
new file mode 100644
index 00000000..5d687ab7
--- /dev/null
+++ b/testing/accounts.txt
@@ -0,0 +1,3 @@
+idkaovprvbrjbb@bugfoo.com:eyJhbGciOiJSUzI1NiIsImtpZCI6Imluc18yTzZ3UTFYd3dxVFdXUWUyQ1VYZHZ2bnNaY2UiLCJ0eXAiOiJKV1QifQ.eyJhenAiOiJodHRwczovL2FjY291bnRzLmZvcmVmcm9udC5haSIsImV4cCI6MTY4MjYxNDUxOSwiaWF0IjoxNjgyNjE0NDU5LCJpc3MiOiJodHRwczovL2NsZXJrLmZvcmVmcm9udC5haSIsIm5iZiI6MTY4MjYxNDQ0OSwic2lkIjoic2Vzc18yUDFBeFNHNnFHdzhWSFNla2lhMVB0NWJYdW8iLCJzdWIiOiJ1c2VyXzJQMUF4TWlNRzFLb00xeFFUQVExcFFjd0d3dyJ9.Nw82ExUQMvJE8oVAmUYl81dS9J43YK0AQYwLJjE5fCozanqQi946q_6DRRQz-9kkm-Zd60zuFzl_ANgZ9lLOOSMd89oJArbu3VUOA8Q-BOtUE0INmwvPCP7KtLDEVRGEsF8oIddwE1Da1rEToBEHrwBuzOVbRvoKqbJ7KZrRB7tHzUVyik3n7K3bddyecIA5Gtj8Nmc_NvwVaBelHOfjH0eoU7y0oza-bOJPNCRosjV3kFdoYhHNtNvQkfIF7MSmqyeC-NHhDVdmv57ehkVdr_H0_MyoT2kNWEk1ETzST36Lhu06yaaWzAPhjpcThN8Q7OFNXSHUAhTJibMHER6UGw
+vpmysvdoydnumi@bugfoo.com:eyJhbGciOiJSUzI1NiIsImtpZCI6Imluc18yTzZ3UTFYd3dxVFdXUWUyQ1VYZHZ2bnNaY2UiLCJ0eXAiOiJKV1QifQ.eyJhenAiOiJodHRwczovL2FjY291bnRzLmZvcmVmcm9udC5haSIsImV4cCI6MTY4MjYyMDM4MSwiaWF0IjoxNjgyNjIwMzIxLCJpc3MiOiJodHRwczovL2NsZXJrLmZvcmVmcm9udC5haSIsIm5iZiI6MTY4MjYyMDMxMSwic2lkIjoic2Vzc18yUDFNcTM1Tmtld3lIa2NOYUJvNDcyV1haR0MiLCJzdWIiOiJ1c2VyXzJQMU1xNFRYcmJlYVhSYVdKUWFjZGRZTVNyMiJ9.PVQlpsxJxgTOaizJ34AGkP3yJzhDAUFBw29gEP0cHCuUZcAUk1MVKeXYoXr32nqQmUmPO5-kmbp3p639idzA3E7EYnOCJ6xOTs6qB4QvmtEfAJQLD84-h5cYXkLzpqcWZeszDkoAQAZKhmI5kGn_OJzblYVodSjz92klrGSASuqIwqywvGNKb2NwQ80yRrNHUcGeI6tRPtMdZ0ieOi04SphXpyB7-JLZuco8nwqivs3uX97Jtkw3EYsTjhp5MKwfG9hGjHk54IwxAJtbMCSMDxDcOYxO2vxVL4W4syCHCB3yUJANmuFjL7mIv76uy4w0YIJtDFAYn3oad7dbHWKtSQ
+xjwollilwtumif@bugfoo.com:eyJhbGciOiJSUzI1NiIsImtpZCI6Imluc18yTzZ3UTFYd3dxVFdXUWUyQ1VYZHZ2bnNaY2UiLCJ0eXAiOiJKV1QifQ.eyJhenAiOiJodHRwczovL2FjY291bnRzLmZvcmVmcm9udC5haSIsImV4cCI6MTY4MjYyMDcwNywiaWF0IjoxNjgyNjIwNjQ3LCJpc3MiOiJodHRwczovL2NsZXJrLmZvcmVmcm9udC5haSIsIm5iZiI6MTY4MjYyMDYzNywic2lkIjoic2Vzc18yUDFOVjBjMm5JdWVLak82SjVWUTVoTHVZTWQiLCJzdWIiOiJ1c2VyXzJQMU5VelpRWjZUZXRETkhnT0dWOHlaZ09pciJ9.O6GsP0QtekV5UMxvMEpUa65I5E_2ahihRbLGAfjSAnyWNY72fQgCgbi75n4L85ej9V9qeDxMqCPF0BA5hXN606ybdlBY_HvlvwRIgyKU2r5JyaltOow7bg6vu_qwj91YejvTDHR7w_cwq-FF4VRYysiJfoc-8jcO2HZl8HM0R8aaSf8xDHy0wCfpBYKN2Mw3-mP23Z08NxlehKXNdKoQq_zKQOJbl0DxfWaoFB6b-xocIl8RO2PR6r1yf0VzHaPNxa1PUrPcs94iaqXuOjpCzqEqO9kZf6WM0rWKRx6-u9A0BECaeirfYpNvdaNQHzIRSndzpTO-Kvnww6HtjDD-tg
diff --git a/testing/forefront_test.py b/testing/forefront_test.py
index 4d5f4bc1..092d1a74 100644
--- a/testing/forefront_test.py
+++ b/testing/forefront_test.py
@@ -1,10 +1,9 @@
-import forefront
+from openai_rev import forefront
# create an account
token = forefront.Account.create(logging=True)
print(token)
# get a response
-for response in forefront.StreamingCompletion.create(token=token,
- prompt='hello world', model='gpt-4'):
- print(response.completion.choices[0].text, end='')
+for response in forefront.StreamingCompletion.create(token=token, prompt='hello world', model='gpt-4'):
+ print(response)
diff --git a/testing/poe_account_create_test.py b/testing/poe_account_create_test.py
index 5d435b1f..24751c4a 100644
--- a/testing/poe_account_create_test.py
+++ b/testing/poe_account_create_test.py
@@ -2,11 +2,10 @@ from hashlib import md5
from json import dumps
from re import findall
-from tls_client import Session as TLS
-from twocaptcha import TwoCaptcha
-
from quora import extract_formkey
from quora.mail import Emailnator
+from tls_client import Session as TLS
+from twocaptcha import TwoCaptcha
solver = TwoCaptcha('72747bf24a9d89b4dcc1b24875efd358')
@@ -14,14 +13,13 @@ solver = TwoCaptcha('72747bf24a9d89b4dcc1b24875efd358')
class Account:
def create(proxy: None or str = None, logging: bool = False, enable_bot_creation: bool = False):
client = TLS(client_identifier='chrome110')
- client.proxies = {
- 'http': f'http://{proxy}',
- 'https': f'http://{proxy}'} if proxy else None
+ client.proxies = {'http': f'http://{proxy}', 'https': f'http://{proxy}'} if proxy else None
mail_client = Emailnator()
mail_address = mail_client.get_mail()
- if logging: print('email', mail_address)
+ if logging:
+ print('email', mail_address)
client.headers = {
'authority': 'poe.com',
@@ -39,29 +37,30 @@ class Account:
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
- 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
+ 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}
client.headers["poe-formkey"] = extract_formkey(client.get('https://poe.com/login').text)
client.headers["poe-tchannel"] = client.get('https://poe.com/api/settings').json()['tchannelData']['channel']
# token = reCaptchaV3('https://www.recaptcha.net/recaptcha/enterprise/anchor?ar=1&k=6LflhEElAAAAAI_ewVwRWI9hsyV4mbZnYAslSvlG&co=aHR0cHM6Ly9wb2UuY29tOjQ0Mw..&hl=en&v=4PnKmGB9wRHh1i04o7YUICeI&size=invisible&cb=bi6ivxoskyal')
- token = solver.recaptcha(sitekey='6LflhEElAAAAAI_ewVwRWI9hsyV4mbZnYAslSvlG',
- url='https://poe.com/login?redirect_url=%2F',
- version='v3',
- enterprise=1,
- invisible=1,
- action='login', )['code']
-
- payload = dumps(separators=(',', ':'), obj={
- 'queryName': 'MainSignupLoginSection_sendVerificationCodeMutation_Mutation',
- 'variables': {
- 'emailAddress': mail_address,
- 'phoneNumber': None,
- 'recaptchaToken': token
+ token = solver.recaptcha(
+ sitekey='6LflhEElAAAAAI_ewVwRWI9hsyV4mbZnYAslSvlG',
+ url='https://poe.com/login?redirect_url=%2F',
+ version='v3',
+ enterprise=1,
+ invisible=1,
+ action='login',
+ )['code']
+
+ payload = dumps(
+ separators=(',', ':'),
+ obj={
+ 'queryName': 'MainSignupLoginSection_sendVerificationCodeMutation_Mutation',
+ 'variables': {'emailAddress': mail_address, 'phoneNumber': None, 'recaptchaToken': token},
+ 'query': 'mutation MainSignupLoginSection_sendVerificationCodeMutation_Mutation(\n $emailAddress: String\n $phoneNumber: String\n $recaptchaToken: String\n) {\n sendVerificationCode(verificationReason: login, emailAddress: $emailAddress, phoneNumber: $phoneNumber, recaptchaToken: $recaptchaToken) {\n status\n errorMessage\n }\n}\n',
},
- 'query': 'mutation MainSignupLoginSection_sendVerificationCodeMutation_Mutation(\n $emailAddress: String\n $phoneNumber: String\n $recaptchaToken: String\n) {\n sendVerificationCode(verificationReason: login, emailAddress: $emailAddress, phoneNumber: $phoneNumber, recaptchaToken: $recaptchaToken) {\n status\n errorMessage\n }\n}\n',
- })
+ )
base_string = payload + client.headers["poe-formkey"] + 'WpuLMiXEKKE98j56k'
client.headers["poe-tag-id"] = md5(base_string.encode()).hexdigest()
@@ -74,31 +73,34 @@ class Account:
print('please try using a proxy / wait for fix')
if 'Bad Request' in response.text:
- if logging: print('bad request, retrying...', response.json())
+ if logging:
+ print('bad request, retrying...', response.json())
quit()
- if logging: print('send_code', response.json())
+ if logging:
+ print('send_code', response.json())
mail_content = mail_client.get_message()
mail_token = findall(r';">(\d{6,7})</div>', mail_content)[0]
- if logging: print('code', mail_token)
+ if logging:
+ print('code', mail_token)
- payload = dumps(separators=(',', ':'), obj={
- "queryName": "SignupOrLoginWithCodeSection_signupWithVerificationCodeMutation_Mutation",
- "variables": {
- "verificationCode": str(mail_token),
- "emailAddress": mail_address,
- "phoneNumber": None
+ payload = dumps(
+ separators=(',', ':'),
+ obj={
+ "queryName": "SignupOrLoginWithCodeSection_signupWithVerificationCodeMutation_Mutation",
+ "variables": {"verificationCode": str(mail_token), "emailAddress": mail_address, "phoneNumber": None},
+ "query": "mutation SignupOrLoginWithCodeSection_signupWithVerificationCodeMutation_Mutation(\n $verificationCode: String!\n $emailAddress: String\n $phoneNumber: String\n) {\n signupWithVerificationCode(verificationCode: $verificationCode, emailAddress: $emailAddress, phoneNumber: $phoneNumber) {\n status\n errorMessage\n }\n}\n",
},
- "query": "mutation SignupOrLoginWithCodeSection_signupWithVerificationCodeMutation_Mutation(\n $verificationCode: String!\n $emailAddress: String\n $phoneNumber: String\n) {\n signupWithVerificationCode(verificationCode: $verificationCode, emailAddress: $emailAddress, phoneNumber: $phoneNumber) {\n status\n errorMessage\n }\n}\n"
- })
+ )
base_string = payload + client.headers["poe-formkey"] + 'WpuLMiXEKKE98j56k'
client.headers["poe-tag-id"] = md5(base_string.encode()).hexdigest()
response = client.post('https://poe.com/api/gql_POST', data=payload)
- if logging: print('verify_code', response.json())
+ if logging:
+ print('verify_code', response.json())
Account.create(proxy='xtekky:wegwgwegwed_streaming-1@geo.iproyal.com:12321', logging=True)
diff --git a/testing/poe_test.py b/testing/poe_test.py
index 8d527879..5cab067c 100644
--- a/testing/poe_test.py
+++ b/testing/poe_test.py
@@ -7,7 +7,5 @@ print('token', token)
sleep(2)
-for response in quora.StreamingCompletion.create(model='gpt-3.5-turbo',
- prompt='hello world',
- token=token):
- print(response.completion.choices[0].text, end="", flush=True)
+for response in quora.StreamingCompletion.create(model='ChatGPT', prompt='hello world', token=token):
+ print(response.text, flush=True)
diff --git a/testing/quora_test_2.py b/testing/quora_test_2.py
index d5316946..5d06f9ed 100644
--- a/testing/quora_test_2.py
+++ b/testing/quora_test_2.py
@@ -1,17 +1,12 @@
-import quora
+from openai_rev import quora
token = quora.Account.create(logging=True, enable_bot_creation=True)
model = quora.Model.create(
- token=token,
- model='gpt-3.5-turbo', # or claude-instant-v1.0
- system_prompt='you are ChatGPT a large language model ...'
+ token=token, model='ChatGPT', system_prompt='you are ChatGPT a large language model ...' # or claude-instant-v1.0
)
print(model.name)
-for response in quora.StreamingCompletion.create(
- custom_model=model.name,
- prompt='hello world',
- token=token):
- print(response.completion.choices[0].text)
+for response in quora.StreamingCompletion.create(custom_model=model.name, prompt='hello world', token=token):
+ print(response.text)
diff --git a/testing/sqlchat_test.py b/testing/sqlchat_test.py
index 577d85a6..1db71be2 100644
--- a/testing/sqlchat_test.py
+++ b/testing/sqlchat_test.py
@@ -1,6 +1,4 @@
import sqlchat
-for response in sqlchat.StreamCompletion.create(
- prompt='write python code to reverse a string',
- messages=[]):
+for response in sqlchat.StreamCompletion.create(prompt='write python code to reverse a string', messages=[]):
print(response.completion.choices[0].text, end='')
diff --git a/testing/t3nsor_test.py b/testing/t3nsor_test.py
index 1506a1b4..6d36400d 100644
--- a/testing/t3nsor_test.py
+++ b/testing/t3nsor_test.py
@@ -1,6 +1,4 @@
import t3nsor
-for response in t3nsor.StreamCompletion.create(
- prompt='write python code to reverse a string',
- messages=[]):
+for response in t3nsor.StreamCompletion.create(prompt='write python code to reverse a string', messages=[]):
print(response.completion.choices[0].text)
diff --git a/testing/writesonic_test.py b/testing/writesonic_test.py
index 5c68bbe0..aff847f0 100644
--- a/testing/writesonic_test.py
+++ b/testing/writesonic_test.py
@@ -4,17 +4,14 @@ import writesonic
# create account (3-4s)
account = writesonic.Account.create(logging=True)
-# with loging:
+# with loging:
# 2023-04-06 21:50:25 INFO __main__ -> register success : '{"id":"51aa0809-3053-44f7-922a...' (2s)
# 2023-04-06 21:50:25 INFO __main__ -> id : '51aa0809-3053-44f7-922a-2b85d8d07edf'
# 2023-04-06 21:50:25 INFO __main__ -> token : 'eyJhbGciOiJIUzI1NiIsInR5cCI6Ik...'
# 2023-04-06 21:50:28 INFO __main__ -> got key : '194158c4-d249-4be0-82c6-5049e869533c' (2s)
# simple completion
-response = writesonic.Completion.create(
- api_key=account.key,
- prompt='hello world'
-)
+response = writesonic.Completion.create(api_key=account.key, prompt='hello world')
print(response.completion.choices[0].text) # Hello! How may I assist you today?
@@ -24,16 +21,7 @@ response = writesonic.Completion.create(
api_key=account.key,
prompt='what is my name ?',
enable_memory=True,
- history_data=[
- {
- 'is_sent': True,
- 'message': 'my name is Tekky'
- },
- {
- 'is_sent': False,
- 'message': 'hello Tekky'
- }
- ]
+ history_data=[{'is_sent': True, 'message': 'my name is Tekky'}, {'is_sent': False, 'message': 'hello Tekky'}],
)
print(response.completion.choices[0].text) # Your name is Tekky.
@@ -41,9 +29,7 @@ print(response.completion.choices[0].text) # Your name is Tekky.
# enable internet
response = writesonic.Completion.create(
- api_key=account.key,
- prompt='who won the quatar world cup ?',
- enable_google_results=True
+ api_key=account.key, prompt='who won the quatar world cup ?', enable_google_results=True
)
print(response.completion.choices[0].text) # Argentina won the 2022 FIFA World Cup tournament held in Qatar ...
diff --git a/testing/you_test.py b/testing/you_test.py
index 6ba12f57..34800301 100644
--- a/testing/you_test.py
+++ b/testing/you_test.py
@@ -1,4 +1,4 @@
-import you
+from openai_rev import you
# simple request with links and details
response = you.Completion.create(prompt="hello world", detailed=True, include_links=True)