1
0
Fork 0

Merge branch 'main' into main

This commit is contained in:
t.me/xtekky 2023-04-30 12:15:04 +01:00 committed by GitHub
commit b8802544b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 179 additions and 246 deletions

View file

@ -19,7 +19,6 @@ pip install gpt4free
```python ```python
import gpt4free import gpt4free
import gpt4free
from gpt4free import Provider, quora, forefront from gpt4free import Provider, quora, forefront
# usage You # usage You

View file

@ -98,12 +98,15 @@ class StreamingCompletion:
action_type='new', action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4', model='gpt-4',
proxy=None
) -> Generator[ForeFrontResponse, None, None]: ) -> Generator[ForeFrontResponse, None, None]:
if not token: if not token:
raise Exception('Token is required!') raise Exception('Token is required!')
if not chat_id: if not chat_id:
chat_id = str(uuid4()) chat_id = str(uuid4())
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else None
headers = { headers = {
'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com', 'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com',
'accept': '*/*', 'accept': '*/*',
@ -135,6 +138,7 @@ class StreamingCompletion:
for chunk in post( for chunk in post(
'https://chat-server.tenant-forefront-default.knative.chi.coreweave.com/chat', 'https://chat-server.tenant-forefront-default.knative.chi.coreweave.com/chat',
headers=headers, headers=headers,
proxies=proxies,
json=json_data, json=json_data,
stream=True, stream=True,
).iter_lines(): ).iter_lines():
@ -169,6 +173,7 @@ class Completion:
action_type='new', action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4', model='gpt-4',
proxy=None
) -> ForeFrontResponse: ) -> ForeFrontResponse:
text = '' text = ''
final_response = None final_response = None
@ -179,6 +184,7 @@ class Completion:
action_type=action_type, action_type=action_type,
default_persona=default_persona, default_persona=default_persona,
model=model, model=model,
proxy=proxy
): ):
if response: if response:
final_response = response final_response = response

View file

@ -55,7 +55,7 @@ print(response.completion.choices[0].text)
### Update Use This For Poe ### Update Use This For Poe
```python ```python
from quora import Poe from gpt4free.quora import Poe
# available models: ['Sage', 'GPT-4', 'Claude+', 'Claude-instant', 'ChatGPT', 'Dragonfly', 'NeevaAI'] # available models: ['Sage', 'GPT-4', 'Claude+', 'Claude-instant', 'ChatGPT', 'Dragonfly', 'NeevaAI']

View file

@ -187,7 +187,7 @@ class Account:
enable_bot_creation: bool = False, enable_bot_creation: bool = False,
): ):
client = TLS(client_identifier='chrome110') 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 {}
mail_client = Emailnator() mail_client = Emailnator()
mail_address = mail_client.get_mail() mail_address = mail_client.get_mail()
@ -293,10 +293,13 @@ class StreamingCompletion:
custom_model: bool = None, custom_model: bool = None,
prompt: str = 'hello world', prompt: str = 'hello world',
token: str = '', token: str = '',
proxy: Optional[str] = None
) -> Generator[PoeResponse, None, None]: ) -> Generator[PoeResponse, None, None]:
_model = MODELS[model] if not custom_model else custom_model _model = MODELS[model] if not custom_model else custom_model
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else False
client = PoeClient(token) client = PoeClient(token)
client.proxy = proxies
for chunk in client.send_message(_model, prompt): for chunk in client.send_message(_model, prompt):
yield PoeResponse( yield PoeResponse(
@ -330,10 +333,13 @@ class Completion:
custom_model: str = None, custom_model: str = None,
prompt: str = 'hello world', prompt: str = 'hello world',
token: str = '', token: str = '',
proxy: Optional[str] = None
) -> PoeResponse: ) -> PoeResponse:
_model = MODELS[model] if not custom_model else custom_model _model = MODELS[model] if not custom_model else custom_model
proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else False
client = PoeClient(token) client = PoeClient(token)
client.proxy = proxies
chunk = None chunk = None
for response in client.send_message(_model, prompt): for response in client.send_message(_model, prompt):

View file

@ -0,0 +1,37 @@
from requests import Session
from time import sleep
from json import loads
from re import findall
class Mail:
def __init__(self) -> None:
self.client = Session()
self.client.post("https://etempmail.com/")
self.cookies = {'acceptcookie': 'true'}
self.cookies["ci_session"] = self.client.cookies.get_dict()["ci_session"]
self.email = None
def get_mail(self):
respone=self.client.post("https://etempmail.com/getEmailAddress")
#cookies
self.cookies["lisansimo"] = eval(respone.text)["recover_key"]
self.email = eval(respone.text)["address"]
return self.email
def get_message(self):
print("Waiting for message...")
while True:
sleep(5)
respone=self.client.post("https://etempmail.com/getInbox")
mail_token=loads(respone.text)
print(self.client.cookies.get_dict())
if len(mail_token) == 1:
break
params = {'id': '1',}
self.mail_context = self.client.post("https://etempmail.com/getInbox",params=params)
self.mail_context = eval(self.mail_context.text)[0]["body"]
return self.mail_context
#,cookies=self.cookies
def get_verification_code(self):
message = self.mail_context
code = findall(r';">(\d{6,7})</div>', message)[0]
print(f"Verification code: {code}")
return code

View file

@ -2,7 +2,7 @@ from json import loads
from queue import Queue, Empty from queue import Queue, Empty
from re import findall from re import findall
from threading import Thread from threading import Thread
from typing import Generator from typing import Generator, Optional
from curl_cffi import requests from curl_cffi import requests
from fake_useragent import UserAgent from fake_useragent import UserAgent
@ -19,7 +19,7 @@ class Completion:
stream_completed = False stream_completed = False
@staticmethod @staticmethod
def request(prompt: str): def request(prompt: str, proxy: Optional[str]=None):
headers = { headers = {
'authority': 'chatbot.theb.ai', 'authority': 'chatbot.theb.ai',
'content-type': 'application/json', 'content-type': 'application/json',
@ -27,9 +27,12 @@ class Completion:
'user-agent': UserAgent().random, 'user-agent': UserAgent().random,
} }
proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else None
requests.post( requests.post(
'https://chatbot.theb.ai/api/chat-process', 'https://chatbot.theb.ai/api/chat-process',
headers=headers, headers=headers,
proxies=proxies,
content_callback=Completion.handle_stream_response, content_callback=Completion.handle_stream_response,
json={'prompt': prompt, 'options': {}}, json={'prompt': prompt, 'options': {}},
) )
@ -37,8 +40,8 @@ class Completion:
Completion.stream_completed = True Completion.stream_completed = True
@staticmethod @staticmethod
def create(prompt: str) -> Generator[str, None, None]: def create(prompt: str, proxy: Optional[str]=None) -> Generator[str, None, None]:
Thread(target=Completion.request, args=[prompt]).start() Thread(target=Completion.request, args=[prompt, proxy]).start()
while not Completion.stream_completed or not Completion.message_queue.empty(): while not Completion.stream_completed or not Completion.message_queue.empty():
try: try:

View file

@ -30,12 +30,16 @@ class Completion:
include_links: bool = False, include_links: bool = False,
detailed: bool = False, detailed: bool = False,
debug: bool = False, debug: bool = False,
proxy: Optional[str] = None
) -> PoeResponse: ) -> PoeResponse:
if chat is None: if chat is None:
chat = [] chat = []
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else {}
client = Session(client_identifier='chrome_108') client = Session(client_identifier='chrome_108')
client.headers = Completion.__get_headers() client.headers = Completion.__get_headers()
client.proxies = proxies
response = client.get( response = client.get(
f'https://you.com/api/streamingSearch', f'https://you.com/api/streamingSearch',

View file

@ -1,5 +1,6 @@
import os import os
import sys import sys
from typing import Optional
sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir)) sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir))
@ -7,14 +8,14 @@ from gpt4free import quora, forefront, theb, you
import random import random
def query_forefront(question: str) -> str: def query_forefront(question: str, proxy: Optional[str] = None) -> str:
# create an account # create an account
token = forefront.Account.create(logging=False) token = forefront.Account.create(logging=False, proxy=proxy)
response = "" response = ""
# get a response # get a response
try: try:
return forefront.Completion.create(token=token, prompt='hello world', model='gpt-4').text return forefront.Completion.create(token=token, prompt='hello world', model='gpt-4', proxy=proxy).text
except Exception as e: except Exception as e:
# Return error message if an exception occurs # Return error message if an exception occurs
return ( return (
@ -22,16 +23,16 @@ def query_forefront(question: str) -> str:
) )
def query_quora(question: str) -> str: def query_quora(question: str, proxy: Optional[str] = None) -> str:
token = quora.Account.create(logging=False, enable_bot_creation=True) token = quora.Account.create(logging=False, enable_bot_creation=True, proxy=proxy)
return quora.Completion.create(model='gpt-4', prompt=question, token=token).text return quora.Completion.create(model='gpt-4', prompt=question, token=token, proxy=proxy).text
def query_theb(question: str) -> str: def query_theb(question: str, proxy: Optional[str] = None) -> str:
# Set cloudflare clearance cookie and get answer from GPT-4 model # Set cloudflare clearance cookie and get answer from GPT-4 model
response = "" response = ""
try: try:
return ''.join(theb.Completion.create(prompt=question)) return ''.join(theb.Completion.create(prompt=question, proxy=proxy))
except Exception as e: except Exception as e:
# Return error message if an exception occurs # Return error message if an exception occurs
@ -40,11 +41,11 @@ def query_theb(question: str) -> str:
) )
def query_you(question: str) -> str: def query_you(question: str, proxy: Optional[str] = None) -> str:
# Set cloudflare clearance cookie and get answer from GPT-4 model # Set cloudflare clearance cookie and get answer from GPT-4 model
try: try:
result = you.Completion.create(prompt=question) result = you.Completion.create(prompt=question, proxy=proxy)
return result["response"] return result.text
except Exception as e: except Exception as e:
# Return error message if an exception occurs # Return error message if an exception occurs
@ -66,11 +67,11 @@ avail_query_methods = {
} }
def query(user_input: str, selected_method: str = "Random") -> str: def query(user_input: str, selected_method: str = "Random", proxy: Optional[str] = None) -> str:
# If a specific query method is selected (not "Random") and the method is in the dictionary, try to call it # If a specific query method is selected (not "Random") and the method is in the dictionary, try to call it
if selected_method != "Random" and selected_method in avail_query_methods: if selected_method != "Random" and selected_method in avail_query_methods:
try: try:
return avail_query_methods[selected_method](user_input) return avail_query_methods[selected_method](user_input, proxy=proxy)
except Exception as e: except Exception as e:
print(f"Error with {selected_method}: {e}") print(f"Error with {selected_method}: {e}")
return "😵 Sorry, some error occurred please try again." return "😵 Sorry, some error occurred please try again."
@ -89,7 +90,7 @@ def query(user_input: str, selected_method: str = "Random") -> str:
chosen_query_name = [k for k, v in avail_query_methods.items() if v == chosen_query][0] chosen_query_name = [k for k, v in avail_query_methods.items() if v == chosen_query][0]
try: try:
# Try to call the chosen method with the user input # Try to call the chosen method with the user input
result = chosen_query(user_input) result = chosen_query(user_input, proxy=proxy)
success = True success = True
except Exception as e: except Exception as e:
print(f"Error with {chosen_query_name}: {e}") print(f"Error with {chosen_query_name}: {e}")

View file

@ -24,9 +24,9 @@ def load_conversations():
def save_conversations(conversations, current_conversation): def save_conversations(conversations, current_conversation):
updated = False updated = False
for i, conversation in enumerate(conversations): for idx, conversation in enumerate(conversations):
if conversation == current_conversation: if conversation == current_conversation:
conversations[i] = current_conversation conversations[idx] = current_conversation
updated = True updated = True
break break
if not updated: if not updated:
@ -71,19 +71,22 @@ if 'current_conversation' not in st.session_state or st.session_state['current_c
input_placeholder = st.empty() input_placeholder = st.empty()
user_input = input_placeholder.text_input( user_input = input_placeholder.text_input(
'You:', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}' 'You:', value=st.session_state['input_text'], key=f'input_text_{st.session_state["input_field_key"]}'
) )
submit_button = st.button("Submit") submit_button = st.button("Submit")
if user_input or submit_button:
if (user_input and user_input != st.session_state['input_text']) or submit_button:
output = query(user_input, st.session_state['query_method']) output = query(user_input, st.session_state['query_method'])
escaped_output = output.encode('utf-8').decode('unicode-escape') escaped_output = output.encode('utf-8').decode('unicode-escape')
st.session_state.current_conversation['user_inputs'].append(user_input) st.session_state.current_conversation['user_inputs'].append(user_input)
st.session_state.current_conversation['generated_responses'].append(escaped_output) st.session_state.current_conversation['generated_responses'].append(escaped_output)
save_conversations(st.session_state.conversations, st.session_state.current_conversation) save_conversations(st.session_state.conversations, st.session_state.current_conversation)
st.session_state['input_text'] = ''
user_input = input_placeholder.text_input( user_input = input_placeholder.text_input(
'You:', value='', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}' 'You:', value=st.session_state['input_text'], key=f'input_text_{st.session_state["input_field_key"]}'
) # Clear the input field ) # Clear the input field
# Add a button to create a new conversation # Add a button to create a new conversation
@ -94,13 +97,16 @@ if st.sidebar.button("New Conversation"):
st.session_state['query_method'] = st.sidebar.selectbox("Select API:", options=avail_query_methods, index=0) st.session_state['query_method'] = st.sidebar.selectbox("Select API:", options=avail_query_methods, index=0)
# Proxy
st.session_state['proxy'] = st.sidebar.text_input("Proxy: ")
# Sidebar # Sidebar
st.sidebar.header("Conversation History") st.sidebar.header("Conversation History")
for i, conversation in enumerate(st.session_state.conversations): for idx, conversation in enumerate(st.session_state.conversations):
if st.sidebar.button(f"Conversation {i + 1}: {conversation['user_inputs'][0]}", key=f"sidebar_btn_{i}"): if st.sidebar.button(f"Conversation {idx + 1}: {conversation['user_inputs'][0]}", key=f"sidebar_btn_{idx}"):
st.session_state['selected_conversation'] = i st.session_state['selected_conversation'] = idx
st.session_state['current_conversation'] = st.session_state.conversations[i] st.session_state['current_conversation'] = st.session_state.conversations[idx]
if st.session_state['selected_conversation'] is not None: if st.session_state['selected_conversation'] is not None:
conversation_to_display = st.session_state.conversations[st.session_state['selected_conversation']] conversation_to_display = st.session_state.conversations[st.session_state['selected_conversation']]

13
testing/usesless_test.py Normal file
View file

@ -0,0 +1,13 @@
import usesless
question1 = "Who won the world series in 2020?"
req = usesless.Completion.create(prompt=question1)
answer = req["text"]
message_id = req["parentMessageId"]
question2 = "Where was it played?"
req2 = usesless.Completion.create(prompt=question2, parentMessageId=message_id)
answer2 = req2["text"]
print(answer)
print(answer2)

View file

@ -0,0 +1,23 @@
ai.usesless.com
to do:
- use random user agent in header
- make the code better I guess (?)
### Example: `usesless` <a name="example-usesless"></a>
```python
import usesless
message_id = ""
while True:
prompt = input("Question: ")
if prompt == "!stop":
break
req = usesless.Completion.create(prompt=prompt, parentMessageId=message_id)
print(f"Answer: {req['text']}")
message_id = req["id"]
```

View file

@ -0,0 +1,51 @@
import requests
import json
class Completion:
headers = {
"authority": "ai.usesless.com",
"accept": "application/json, text/plain, */*",
"accept-language": "en-US,en;q=0.5",
"cache-control": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0",
}
@staticmethod
def create(
systemMessage: str = "You are a helpful assistant",
prompt: str = "",
parentMessageId: str = "",
presence_penalty: float = 1,
temperature: float = 1,
model: str = "gpt-3.5-turbo",
):
json_data = {
"openaiKey": "",
"prompt": prompt,
"options": {
"parentMessageId": parentMessageId,
"systemMessage": systemMessage,
"completionParams": {
"presence_penalty": presence_penalty,
"temperature": temperature,
"model": model,
},
},
}
url = "https://ai.usesless.com/api/chat-process"
request = requests.post(url, headers=Completion.headers, json=json_data)
content = request.content
response = Completion.__response_to_json(content)
return response
@classmethod
def __response_to_json(cls, text) -> dict:
text = str(text.decode("utf-8"))
split_text = text.rsplit("\n", 1)[1]
to_json = json.loads(split_text)
return to_json

View file

@ -1,53 +0,0 @@
### Example: `writesonic` (use like openai pypi package) <a name="example-writesonic"></a>
```python
# import writesonic
import writesonic
# create account (3-4s)
account = writesonic.Account.create(logging = True)
# 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'
)
print(response.completion.choices[0].text) # Hello! How may I assist you today?
# conversation
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'
}
]
)
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
)
print(response.completion.choices[0].text) # Argentina won the 2022 FIFA World Cup tournament held in Qatar ...
```

View file

@ -1,163 +0,0 @@
from random import choice
from time import time
from colorama import Fore, init;
from names import get_first_name, get_last_name
from requests import Session
from requests import post
init()
class logger:
@staticmethod
def info(string) -> print:
import datetime
now = datetime.datetime.now()
return print(
f"{Fore.CYAN}{now.strftime('%Y-%m-%d %H:%M:%S')} {Fore.BLUE}INFO {Fore.MAGENTA}__main__ -> {Fore.RESET}{string}")
class SonicResponse:
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_chars']
self.completion_tokens = usage_dict['completion_chars']
self.total_tokens = usage_dict['total_chars']
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 Account:
session = Session()
session.headers = {
"connection": "keep-alive",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
"accept": "application/json, text/plain, */*",
"content-type": "application/json",
"sec-ch-ua-mobile": "?0",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-site": "same-origin",
"sec-fetch-mode": "cors",
"sec-fetch-dest": "empty",
# "accept-encoding" : "gzip, deflate, br",
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
"cookie": ""
}
@staticmethod
def get_user():
password = f'0opsYouGoTme@1234'
f_name = get_first_name()
l_name = get_last_name()
hosts = ['gmail.com', 'protonmail.com', 'proton.me', 'outlook.com']
return {
"email": f"{f_name.lower()}.{l_name.lower()}@{choice(hosts)}",
"password": password,
"confirm_password": password,
"full_name": f'{f_name} {l_name}'
}
@staticmethod
def create(logging: bool = False):
while True:
try:
user = Account.get_user()
start = time()
response = Account.session.post("https://app.writesonic.com/api/session-login", json=user | {
"utmParams": "{}",
"visitorId": "0",
"locale": "en",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"signInWith": "password",
"request_type": "signup",
})
if logging:
logger.info(f"\x1b[31mregister success\x1b[0m : '{response.text[:30]}...' ({int(time() - start)}s)")
logger.info(f"\x1b[31mid\x1b[0m : '{response.json()['id']}'")
logger.info(f"\x1b[31mtoken\x1b[0m : '{response.json()['token'][:30]}...'")
start = time()
response = Account.session.post("https://api.writesonic.com/v1/business/set-business-active",
headers={"authorization": "Bearer " + response.json()['token']})
key = response.json()["business"]["api_key"]
if logging: logger.info(f"\x1b[31mgot key\x1b[0m : '{key}' ({int(time() - start)}s)")
return Account.AccountResponse(user['email'], user['password'], key)
except Exception as e:
if logging: logger.info(f"\x1b[31merror\x1b[0m : '{e}'")
continue
class AccountResponse:
def __init__(self, email, password, key):
self.email = email
self.password = password
self.key = key
class Completion:
def create(
api_key: str,
prompt: str,
enable_memory: bool = False,
enable_google_results: bool = False,
history_data: list = []) -> SonicResponse:
response = post('https://api.writesonic.com/v2/business/content/chatsonic?engine=premium',
headers={"X-API-KEY": api_key},
json={
"enable_memory": enable_memory,
"enable_google_results": enable_google_results,
"input_text": prompt,
"history_data": history_data}).json()
return SonicResponse({
'id': f'cmpl-premium-{int(time())}',
'object': 'text_completion',
'created': int(time()),
'model': 'premium',
'choices': [{
'text': response['message'],
'index': 0,
'logprobs': None,
'finish_reason': 'stop'
}],
'usage': {
'prompt_chars': len(prompt),
'completion_chars': len(response['message']),
'total_chars': len(prompt) + len(response['message'])
}
})