Spaces:
Runtime error
Runtime error
import pandas as pd | |
import numpy as np | |
import matplotlib as plt | |
import openai | |
import gradio as gr | |
import time | |
import os | |
# Importing required components directly from gradio | |
from gradio import components | |
SECRET_TOKEN = os.getenv('openai.api_key') | |
messages = [{"role": "system", "content": "You are a doctor"}] | |
def send_message(message): | |
response = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo", | |
messages=message, | |
api_key=SECRET_TOKEN | |
) | |
ChatGPT_reply = response["choices"][0]["message"]["content"] | |
return ChatGPT_reply | |
def adaptive_truncate(message, token_limit): | |
# Truncate the message content to fit within the token limit | |
tokens = message["content"].split() | |
truncated_tokens = [] | |
total_tokens = 0 | |
for token in tokens: | |
total_tokens += len(token.split()) | |
if total_tokens <= token_limit: | |
truncated_tokens.append(token) | |
else: | |
break | |
message["content"] = " ".join(truncated_tokens) | |
return message | |
def CustomChatGPT(enter_your_question): | |
# Adaptive token limit to leave some space for response | |
token_limit = 4000 | |
# Initialize the messages list | |
messages = [{"role": "system", "content": "You are a doctor"}] | |
# Send user input as separate messages to the model | |
user_input_tokens = enter_your_question.split() | |
current_message = {"role": "user", "content": ""} | |
current_token_count = len("You are a doctor".split()) | |
for token in user_input_tokens: | |
token_tokens = len(token.split()) | |
if current_token_count + token_tokens <= token_limit: | |
current_message["content"] += token + " " | |
current_token_count += token_tokens | |
else: | |
# Truncate the current message to fit within token limit | |
current_message = adaptive_truncate(current_message, token_limit) | |
# Send the current message and get the response | |
reply = send_message(messages + [current_message]) | |
messages.append({"role": "user", "content": " ".join(current_message["content"].split())}) | |
messages[-1]["content"] = reply | |
# Start the next message with the remaining token | |
current_message = {"role": "user", "content": token + " "} | |
current_token_count = token_tokens | |
# Truncate and send the last message | |
current_message = adaptive_truncate(current_message, token_limit) | |
reply = send_message(messages + [current_message]) | |
messages.append({"role": "user", "content": " ".join(current_message["content"].split())}) | |
messages[-1]["content"] = reply | |
return reply | |
# Set up Gradio interface | |
iface = gr.Interface( | |
fn=CustomChatGPT, | |
inputs=components.Textbox(lines=1, label="Enter your question"), | |
outputs=components.Textbox(label="Doctor's advice"), | |
title="Doctor's desk. Ask any help related to health?", | |
examples=[ | |
["What are the symptoms of flu?"], | |
["How can I prevent a cold?"], | |
["Is it safe to take antibiotics for a viral infection?"], | |
], | |
live=False, # Removed 'live' mode so that action is taken only after submit button is clicked | |
allow_flagging="never", | |
) | |
iface.launch(inline=False) | |