Spaces:
Sleeping
Sleeping
| from flask import Flask, jsonify, render_template, request, Response | |
| from openai import OpenAI | |
| from dotenv import load_dotenv | |
| import os | |
| import json | |
| load_dotenv() | |
| app = Flask(__name__, | |
| static_folder='static', | |
| template_folder='templates' | |
| ) | |
| client = OpenAI( | |
| api_key=os.getenv('API_KEY'), | |
| base_url=os.getenv('BASE_URL') | |
| ) | |
| class ChatBot: | |
| def __init__(self): | |
| self.messages = [] | |
| def new_conversation(self): | |
| self.messages = [] | |
| return {"status": "success", "message": "New conversation started"} | |
| def get_stream_response(self, user_input): | |
| self.messages.append({"role": "user", "content": user_input}) | |
| try: | |
| response = client.chat.completions.create( | |
| model=os.getenv('MODEL'), | |
| messages=self.messages, | |
| stream=True | |
| ) | |
| for chunk in response: | |
| if chunk.choices[0].delta.content: | |
| yield f"data: {json.dumps({'content': chunk.choices[0].delta.content})}\n\n" | |
| # 保存完整对话到历史记录 | |
| full_response = ''.join(chunk.choices[0].delta.content or '' | |
| for chunk in response) | |
| self.messages.append({"role": "assistant", "content": full_response}) | |
| except Exception as e: | |
| yield f"data: {json.dumps({'error': str(e)})}\n\n" | |
| chatbot = ChatBot() | |
| def home(): | |
| return render_template('index.html') | |
| def chat(): | |
| user_message = request.json.get('message', '') | |
| return Response( | |
| chatbot.get_stream_response(user_message), | |
| mimetype='text/event-stream' | |
| ) | |
| def new_conversation(): | |
| return jsonify(chatbot.new_conversation()) | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=7860, debug=True) |