File size: 2,943 Bytes
1daa44a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from application.utils.chat_completion_api import ChatCompletionAPI
from config import Response,pipeline_dict,convs_dict
import os
class ChatInference:
    def __init__(self):
        self.chatCompletionAPI = ChatCompletionAPI()

    def validate(self,data,user):
        try:
            pipeline = pipeline_dict['api']['models']
            model = data['model']
            self.headers = pipeline[model]['headers']
            self.updateHeaders = {}
            for header in self.headers:
                if(header=="config"):
                    for configHeader in self.headers[header]:
                        if(configHeader=="Authorization"):
                            auth = self.headers[header][configHeader].split(' ')
                            self.updateHeaders[configHeader] = f"{auth[0]} {eval(auth[1])}"
                        elif(configHeader=="comment"):
                            pass
                        else:
                            self.updateHeaders[configHeader] = f"{eval(self.headers[header][configHeader])}"
                else:
                    self.updateHeaders[header] = self.headers[header]
            prompt = data['prompt']
            max_tokens = data.get('max_token', 1024)
            temperature = max(0, min(data.get('temperature', 0.7), 2))
            top_p = max(0.1, min(data.get('top_p', 0.9), 1))
            system = data.get('system_prompt','')
            convId = data['convId']
            
            if(len(convs_dict[user][convId]['messages'])==1):
                #convs_dict[user][convId]['messages'].append({"role":"system", "content": system})
                convs_dict[user]['metadata'].insert(0,{"convId": convId, "title": prompt[:23]})
                convs_dict[user][convId]['title'] = prompt[:30]
            if(pipeline[model]['type'] == 'image-text-to-text'):
                convs_dict[user][convId]['messages'].append({"role": "user", "content": [{"type":"text","text":prompt}]})
            else:
                convs_dict[user][convId]['messages'].append({"role":"user","content":prompt})
            transformed = {
                "model": model,
                "prompt": prompt,
                "messages": convs_dict[user][convId]['messages'],
                "max_tokens": max_tokens,
                "temperature": temperature,
                "top_p": top_p,
                "stream": True
            }
            data.update(transformed)
            return data
        except KeyError:
            return 400

    def chat(self,data,handle_stream,user):
        data = self.validate(data=data,user=user)
        if(data==400):
            return "Required Parameters are Missing!", 400
        
        return self.chatCompletionAPI.make_request(json=data,url=data['base_url'],handle_stream=handle_stream,messages=data['messages'], headers=self.updateHeaders)