fabric/client/server/app/chatgpt/__init__.py

63 lines
2.1 KiB
Python

from openai import OpenAI, chat
from flask import jsonify, Blueprint
import os
from flask_socketio import send, emit
current_directory = os.path.dirname(os.path.abspath(__file__))
config_directory = os.path.expanduser("~/.config/fabric")
api_key_file = os.path.join(config_directory, ".env")
with open(api_key_file, "r") as f:
apiKey = f.read().split("=")[1]
client = OpenAI(api_key=apiKey)
bp = Blueprint('chatgpt', __name__)
def sendMessage(system: str, input_data: str, user=''):
system_message = {"role": "system", "content": system}
user_message = {"role": "user", "content": f"{user}\n{input_data}"}
messages = [system_message, user_message]
try:
response = client.chat.completions.create(
model="gpt-4-1106-preview",
messages=messages,
temperature=0.0,
top_p=1,
frequency_penalty=0.1,
presence_penalty=0.1
)
assistant_message = response.choices[0].message.content
return jsonify({"response": assistant_message})
except Exception as e:
return jsonify({"error": str(e)})
def streamMessage(input_data: str, wisdomFile: str):
# Similar logic as sendMessage but adapted for streaming
user_message = {"role": "user", "content": f"{input_data}"}
wisdom_File = os.path.join(
current_directory, wisdomFile)
with open(wisdom_File, "r") as f:
system = f.read()
system_message = {"role": "system", "content": system}
messages = [system_message, user_message]
try:
# Note: You need to modify the API call to support streaming
stream = client.chat.completions.create(
model="gpt-4-1106-preview",
messages=messages,
temperature=0.0,
top_p=1,
frequency_penalty=0.1,
presence_penalty=0.1,
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
send(chunk.choices[0].delta.content, end="")
except Exception as e:
emit('error', {'data': str(e)})
if 1 == 1:
from app.chatgpt import routes