Spaces:
Configuration error
Configuration error
| 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) | |