Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
import datetime as dt | |
import pytz | |
from openai import OpenAI | |
from dotenv import load_dotenv | |
load_dotenv() | |
# Get the api key from the environment variable | |
open_ai_api_key = os.environ.get("OPENAI_API_KEY") | |
if not open_ai_api_key: | |
raise ValueError("OPENAI_API_KEY environment variable is not set") | |
#intialize openai client | |
client = OpenAI(api_key = os.environ.get("OPENAI_API_KEY")) | |
System_msg = "act as an experienced blockchain developer,you have been working in this field from the past 15 years.help me understand some concepts, assume i am a complete begineer" | |
ipAddress = None | |
def nowInISt(): | |
return dt.datetime.now(pytz.timezone("Asia/Kolkata")) | |
def attachIp(): | |
global ipAddress | |
x_forwarded_for = request.headers.get("x-forwarded-for") | |
if x_forwarded_for: | |
ipAddress = x_forwarded_for | |
def pprint(log: str): | |
now = nowInISt() | |
now = now.strftime("%Y-%m-%d %H:%M:%S") | |
print(f"[{now}] [{ipAddress}] {log}") | |
def predict(message,history): | |
history_list = [{"role": "system", "content": System_msg}] | |
for human,ai in history: | |
history_list.append({"role": "user", "content": human}) | |
history_list.append({"role": "assistant", "content": ai}) | |
history_list.append({"role": "user", "content": message}) | |
response = client.chat.completions.create( | |
model = "gpt-4o-mini", | |
message = history_list, | |
temperature = 1.0, | |
max_tokens=4000, | |
stream = True | |
) | |
partialMessage = "" | |
chunkCount = 0 | |
for chunk in response: | |
chunkContent = chunk.choices[0].delta.content | |
if chunkContent: | |
chunkCount+=1 | |
partialMessage= partialMessage + chunkContent | |
yield partialMessage | |
pprint(f"[tokens = {chunkCount}] {message}") | |
with gr.interface( | |
predict, | |
title = "blockchain teacher", | |
theme = gr.themes.Soft(), | |
chatbot = gr.Chatbot(label ="learn about blochchain technology") | |
textbox = gr.Textbox( | |
placeholder = "ask me anything about blochchain", | |
scale = 7 | |
max_lines = 2, | |
) | |
) as demo: | |
demo.load(attachIp,None,None) | |
demo.launch() |