This repository has been archived on 2023-05-17. You can view files and clone it, but cannot push or open issues or pull requests.
web-gpt/project/main.py

103 lines
3.5 KiB
Python
Raw Normal View History

2023-04-03 01:00:24 +08:00
from flask import Blueprint, render_template, current_app, request, flash, redirect, url_for
2023-03-31 22:11:34 +08:00
from flask_login import login_required, current_user, login_manager
2023-04-03 01:00:24 +08:00
from .models import User, Conversation
from . import db
import openai
2023-03-31 22:11:34 +08:00
main = Blueprint('main', __name__)
@main.route('/')
def index():
2023-04-01 19:38:43 +08:00
return render_template('index.html', user=current_user)
2023-03-31 22:11:34 +08:00
@main.route('/profile')
@login_required
def profile():
2023-04-01 19:38:43 +08:00
if current_user.role == "admin":
return render_template('profile.html', user=current_user, accounts=User.query.all())
return render_template('profile.html', user=current_user)
@main.route('/manage')
@login_required
def manage():
if current_user.role == "admin":
accountid = request.args.get('id')
if accountid:
accounts = User.query.filter_by(id=accountid)
else:
accounts = User.query
if accounts:
return render_template('manage.html', user=current_user, accounts=accounts)
else:
flash("无此用户id")
return redirect(request.referrer if request.referrer else url_for('main.index'))
flash("您无权管理其他账户")
return redirect(url_for('main.index'))
@main.route('/chat')
@login_required
def chat():
2023-04-03 01:00:24 +08:00
if current_user.isActivated:
2023-04-03 22:50:10 +08:00
if request.args.get("act") == "get_history":
chats_desc = Conversation.query.filter_by(
userid=current_user.id, useremail=current_user.email).order_by(Conversation.datetime.desc()).limit(20).all()
msgs = []
for chat in reversed(chats_desc):
msgs.append(
{"request": chat.request, "response": chat.response, "datetime": chat.datetime})
return msgs
2023-04-03 01:00:24 +08:00
return render_template('chat.html', user=current_user)
else:
flash("您的账户暂未被激活")
return redirect(url_for('main.index'))
return redirect(url_for('main.index'))
@main.route('/chat', methods=['POST'])
@login_required
def chat_post():
openai.api_key = current_app.config['OPENAI_API_KEY']
openai.proxy = current_app.config['NETWORK_PROXY']
msg = request.form.get("msg")
new_conversation = Conversation(userid=current_user.id,
useremail=current_user.email,
username=current_user.name,
request=msg,
response="")
db.session.add(new_conversation)
db.session.commit()
if current_user.is_authenticated and current_user.isActivated:
openai_resp = openai.ChatCompletion.create(
model=current_app.config['OPENAI_MODEL_NAME'],
messages=[
{"role": "system",
"content": current_app.config['OPENAI_PROMPT']},
{"role": "user", "content": msg}
]
)
msg_resp = openai_resp['choices'][0]['message']['content']
if msg_resp:
response = {"message": msg_resp, "status": "success"}
else:
response = {"message": "请求错误", "status": "success"}
else:
response = {"message": "请先登录/激活", "status": "fail"}
new_conversation = Conversation(userid=current_user.id,
useremail=current_user.email,
username=current_user.name,
request=msg,
response=msg_resp)
db.session.add(new_conversation)
db.session.commit()
return response