gpt4free/ora/__init__.py
2023-04-25 09:56:27 +01:00

62 lines
2.3 KiB
Python

from ora.model import CompletionModel
from ora.typing import OraResponse
from requests import post
from time import time
from random import randint
from ora._jwt import do_jwt
user_id = None
session_token = None
class Completion:
def create(
model : CompletionModel,
prompt: str,
includeHistory: bool = True,
conversationId: str or None = None) -> OraResponse:
extra = {
'conversationId': conversationId} if conversationId else {}
cookies = {
"cookie" : f"__Secure-next-auth.session-token={session_token}"} if session_token else {}
json_data = extra | {
'chatbotId': model.id,
'input' : prompt,
'userId' : user_id if user_id else model.createdBy,
'model' : model.modelName,
'provider' : 'OPEN_AI',
'includeHistory': includeHistory}
response = post('https://ora.sh/api/conversation',
headers = cookies | {
"host" : "ora.sh",
"authorization" : f"Bearer AY0{randint(1111, 9999)}",
"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",
"origin" : "https://ora.sh",
"referer" : "https://ora.sh/chat/",
"x-signed-token": do_jwt(json_data)
},
json = json_data).json()
if response.get('error'):
raise Exception('''set ora.user_id and ora.session_token\napi response: %s''' % response['error'])
return OraResponse({
'id' : response['conversationId'],
'object' : 'text_completion',
'created': int(time()),
'model' : model.slug,
'choices': [{
'text' : response['response'],
'index' : 0,
'logprobs' : None,
'finish_reason' : 'stop'
}],
'usage': {
'prompt_tokens' : len(prompt),
'completion_tokens' : len(response['response']),
'total_tokens' : len(prompt) + len(response['response'])
}
})