Spaces:
Running
Running
File size: 3,288 Bytes
372d102 f7675e1 |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
from flask import Flask, url_for, redirect
from flask import request as req
from flask_cors import CORS
import helpers.helper as helper
from helpers.provider import *
from utils.llms import chat,chatstream
app = Flask(__name__)
CORS(app)
from utils.functions import allocate
from werkzeug.utils import secure_filename
import os
app.config['UPLOAD_FOLDER'] = "static"
@app.route("/v1/chat/completions", methods=['POST'])
@app.route("/chat/completions", methods=['POST'])
@app.route("/", methods=['POST'])
def chat_completions2():
streaming = req.json.get('stream', False)
model = req.json.get('model', 'gpt-4-turbo')
messages = req.json.get('messages')
api_keys = req.headers.get('Authorization').replace('Bearer ', '')
tools = req.json.get('tools')
response_format = req.json.get('response_format')
allocate(messages,model,tools)
def stream_response(messages,model,tools):
for line in chatstream(messages,model,api_keys):
if "RESULT: " in line:
line=line.replace("RESULT: ","")
if tools !=None:
yield f'data: {json.dumps(helper.stream_func(line,"tools"))}\n\n'
else:
yield f'data: {json.dumps(helper.end())}\n\n'
break
yield 'data: %s\n\n' % json.dumps(helper.streamer(line), separators=(',', ':'))
if not streaming :
if tools!=None:
k=chat(messages,None,model)
return helper.func_output(k,"tools")
else:
print("NO STREAM")
print(model)
k=chat(messages,response_format,model)
return helper.output(k)
elif streaming :
return app.response_class(stream_response(messages,model,tools), mimetype='text/event-stream')
@app.route('/upload', methods=['GET','POST'])
def index():
# If a post method then handle file upload
if req.method == 'POST':
if 'file' not in req.files:
return redirect('/')
file = req.files['file']
if file :
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return filename
# Get Files in the directory and create list items to be displayed to the user
file_list = ''
for f in os.listdir(app.config['UPLOAD_FOLDER']):
# Create link html
link = url_for("static", filename=f)
file_list = file_list + '<li><a href="%s">%s</a></li>' % (link, f)
# Format return HTML - allow file upload and list all available files
return_html = '''
<!doctype html>
<title>Upload File</title>
<h1>Upload File</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file><br>
<input type=submit value=Upload>
</form>
<hr>
<h1>Files</h1>
<ol>%s</ol>
''' % file_list
return return_html
@app.route('/')
def yellow_name():
return f'All good!'
@app.route("/v1/models")
@app.route("/models")
def models():
print("Models")
return helper.model
# if __name__ == '__main__':
# config = {
# 'host': '0.0.0.0',
# 'port': 1337,
# 'debug': True,
# }
# app.run(**config) |