Spaces:
Running
Running
import requests,json | |
from config import Response | |
from application.utils.web_search import WebScarper | |
class ChatCompletionAPI(): | |
def __init__(self): | |
self.scarper = WebScarper() | |
def make_request( | |
self, | |
method='POST', | |
stream=True, | |
handle_stream=False, | |
json=None, | |
url=None, | |
messages=None, | |
headers=None, | |
webSearch=False ): | |
self.headers = headers | |
self.messages = messages | |
if(webSearch): | |
data = self.scarper.scarpe(json['prompt']) | |
if(data!=None): | |
messages.append({"role": "system", "content": f"user used webSearch feature, heres the scarped result: {data}"}) | |
response = requests.request( | |
url=url, | |
json=json, | |
stream=stream, | |
headers=self.headers, | |
method=method) | |
self.ai = '' | |
if(response.status_code!=200): | |
return f'an error occured\napi status_code: {response.status_code}\napi response: {response.text}',500 | |
if(handle_stream): | |
return self.handle_stream(response=response) | |
else: | |
self.ai = response.text | |
self.messages.append({"role":"assistant","content":self.ai}) | |
return ai | |
def handle_stream(self,response): | |
def generator(): | |
for data in response.iter_lines(): | |
data = data.decode() | |
data = data[6:] | |
try: | |
data = json.loads(data) | |
chunk = data['choices'][0]['delta']['content'] | |
self.ai+=chunk | |
yield chunk | |
except json.JSONDecodeError: | |
pass | |
except Exception as e: | |
yield str(data) | |
return | |
self.messages.append({"role":"assistant","content":self.ai}) | |
return Response(generator()) |