Hisab Cloud
Upload folder using huggingface_hub
45e92bd verified
import json
import warnings
import requests
from ..smp import *
from .gpt import GPT_context_window, OpenAIWrapper
url = 'http://ecs.sv.us.alles-apin.openxlab.org.cn/v1/openai/v2/text/chat'
headers = {
'Content-Type': 'application/json'
}
class OpenAIWrapperInternal(OpenAIWrapper):
is_api: bool = True
def __init__(self,
model: str = 'gpt-3.5-turbo-0613',
retry: int = 5,
wait: int = 3,
verbose: bool = True,
system_prompt: str = None,
temperature: float = 0,
timeout: int = 60,
max_tokens: int = 1024,
img_size: int = 512,
img_detail: str = 'low',
**kwargs):
self.model = model
if 'KEYS' in os.environ and osp.exists(os.environ['KEYS']):
keys = load(os.environ['KEYS'])
headers['alles-apin-token'] = keys.get('alles-apin-token', '')
elif 'ALLES' in os.environ:
headers['alles-apin-token'] = os.environ['ALLES']
self.headers = headers
self.temperature = temperature
self.timeout = timeout
self.max_tokens = max_tokens
assert img_size > 0 or img_size == -1
self.img_size = img_size
assert img_detail in ['high', 'low']
self.img_detail = img_detail
super(OpenAIWrapper, self).__init__(
wait=wait, retry=retry, system_prompt=system_prompt, verbose=verbose, **kwargs)
def generate_inner(self, inputs, **kwargs) -> str:
input_msgs = self.prepare_inputs(inputs)
temperature = kwargs.pop('temperature', self.temperature)
max_tokens = kwargs.pop('max_tokens', self.max_tokens)
# Held out 100 tokens as buffer
context_window = GPT_context_window(self.model)
max_tokens = min(max_tokens, context_window - self.get_token_len(inputs))
if 0 < max_tokens <= 100:
print('Less than 100 tokens left, may exceed the context window with some additional meta symbols. ')
if max_tokens <= 0:
return 0, self.fail_msg + 'Input string longer than context window. ', 'Length Exceeded. '
payload = dict(
model=self.model,
messages=input_msgs,
max_tokens=max_tokens,
n=1,
stop=None,
timeout=self.timeout,
temperature=temperature,
**kwargs)
response = requests.post(url, headers=headers, data=json.dumps(payload), timeout=self.timeout * 1.1)
ret_code = response.status_code
ret_code = 0 if (200 <= int(ret_code) < 300) else ret_code
answer = self.fail_msg
try:
resp_struct = json.loads(response.text)
assert resp_struct['msg'] == 'ok' and resp_struct['msgCode'] == '10000', resp_struct
answer = resp_struct['data']['choices'][0]['message']['content'].strip()
except:
pass
return ret_code, answer, response
class GPT4V_Internal(OpenAIWrapperInternal):
def generate(self, message, dataset=None):
return super(GPT4V_Internal, self).generate(message)