-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathapp.py
More file actions
51 lines (35 loc) · 1.13 KB
/
app.py
File metadata and controls
51 lines (35 loc) · 1.13 KB
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
import os
import openai
from dotenv import load_dotenv
from flask import Flask
from flask import Response
from flask import render_template
from flask import request
load_dotenv()
app = Flask(__name__)
openai.api_key = os.getenv("OPENAI_API_KEY")
@app.route('/')
def home():
return render_template('index.html')
@app.route('/prompt', methods=['POST'])
def prompt():
messages = request.json['messages']
conversation = build_conversation_dict(messages=messages)
return Response(event_stream(conversation), mimetype='text/event-stream')
def event_stream(conversation: list[dict]) -> str:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=conversation,
stream=True
)
for line in response:
text = line.choices[0].delta.get('content', '')
if len(text):
yield text
def build_conversation_dict(messages: list) -> list[dict]:
return [
{"role": "user" if i % 2 == 0 else "assistant", "content": message}
for i, message in enumerate(messages)
]
if __name__ == "__main__":
app.run(debug=True, host='127.0.0.1', port=5000)