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(request = gr.Request): 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.ChatInterface( 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()