diff --git a/app.py b/app.py
index 3d8e240..d30020f 100644
--- a/app.py
+++ b/app.py
@@ -9,6 +9,8 @@ import openai
import os
+import time
+
app = Flask(__name__)
app.config["SECRET_KEY"] = "your_secret_key"
@@ -84,7 +86,6 @@ def handle_message(data):
# Call the chat_gpt function without blocking using eventlet.spawn
eventlet.spawn(chat_gpt, data["username"], data["room"], data["message"])
-
def chat_gpt(username, room, message):
with app.app_context():
@@ -95,39 +96,41 @@ def chat_gpt(username, room, message):
.all()
)
- # Format these messages as a chat history, with each message being a dict with 'role' and 'content'.
chat_history = [
{"role": "system" if msg.username == "GPT-3.5" else "user", "content": msg.content}
for msg in reversed(last_messages)
]
- # Append the new message
chat_history.append({"role": "user", "content": message})
- response = openai.ChatCompletion.create(
- model="gpt-3.5-turbo",
- messages=chat_history
- )
+ buffer = "" # Content buffer for accumulating the chunks
- # Extract response from ChatGPT API
- response_text = response["choices"][0]["message"]["content"]
+ first_chunk = True
+ for chunk in openai.ChatCompletion.create(
+ model="gpt-3.5-turbo",
+ messages=chat_history,
+ stream=True,
+ ):
+ content = chunk["choices"][0].get("delta", {}).get("content")
- # Convert response_text to Markdown
- response_md = markdown.markdown(response_text, extensions=["fenced_code"])
+ if content:
+ buffer += content # Accumulate content
- # Save ChatGPT's response in the database
+ if first_chunk:
+ socketio.emit("message_chunk", f"{username} (GPT-3.5): {content}", room=room)
+ first_chunk = False
+ else:
+ socketio.emit("message_chunk", content, room=room)
+ socketio.sleep(0) # Force immediate handling
+
+ # Save the entire completion to the database
with app.app_context():
- chatgpt_response_message = Message(
- username="GPT-3.5", content=response_md, room=room
- )
- db.session.add(chatgpt_response_message)
+ new_message = Message(username="GPT-3.5", content=buffer, room=room)
+ db.session.add(new_message)
db.session.commit()
socketio.emit("delete_processing_message", "", room=room)
- # Emit the response to the room
- socketio.emit("message", f"{username} (GPT-3.5): {response_md}", room=room)
-
if __name__ == "__main__":
socketio.run(app, host="0.0.0.0", port=5001)
diff --git a/templates/chat.html b/templates/chat.html
index 53e63b8..4962560 100644
--- a/templates/chat.html
+++ b/templates/chat.html
@@ -11,7 +11,8 @@
-
+
+