AI_Chatbot / app.py
yash
add description
b7de1ae
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import gradio as gr
# Set the random seed for reproducibility
torch.random.manual_seed(0)
# Load the model and tokenizer from Hugging Face
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3.5-mini-instruct",
device_map="cpu",
# device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3.5-mini-instruct")
# Create a text-generation pipeline
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
# Define the pipeline arguments
generation_args = {
"max_new_tokens": 500,
"return_full_text": False,
"temperature": 0.0,
"do_sample": False,
}
chat_session = {}
# Function to generate responses based on the entire chat history
def generate_response(chat_history):
messages = [{"role": "system", "content": "You are a helpful AI assistant."}]
# Append the chat history (user and assistant messages)
for user_message, assistant_message in chat_history:
messages.append({"role": "user", "content": user_message})
messages.append({"role": "assistant", "content": assistant_message})
# Generate response for the latest user message
user_input = chat_history[-1][0] # The latest user message
messages.append({"role": "user", "content": user_input})
response = pipe(messages, **generation_args)
# Append the assistant response to the chat history
assistant_response = response[0]["generated_text"]
return assistant_response
# Function to update chat
def chat(user_message,history,session):
if session == "":
return history, "Error: Session ID cannot be empty. Please start a new chat."
history = history or [] # Initialize history if empty
# Generate assistant response based on the history
assistant_message = generate_response(history + [(user_message, "")])
# Append user and assistant messages to history
history.append([user_message, assistant_message])
chat_session[session] = history
print("USER : ",user_message)
print("ASSISTANT : ",assistant_message)
return history, ""
def get_session_list():
return list(chat_session.keys())
# Function to create new chat and return updated session list
def new_chat():
session = f'session:{len(chat_session) + 1}'
chat_session[session] = [] # Initialize empty chat history for the new session
return [], "", session, get_session_list() # Return the new session and update session list
# Function to fetch old chat session history
def old_chat(sessions):
return chat_session.get(sessions, [])
# Function to reset chat history
def reset_button():
global chat_session # Access the global chat_session
chat_session = {} # Reset the global chat_session
return [], "", "",[],"" # Reset chat history, session, and input field
with gr.Blocks(css=".small-btn {width: 100px !important;} .large-textbox {width: 100% !important;}") as demo:
gr.Markdown("# πŸ€– AI Assistant")
# Add instructions to the UI
gr.Markdown("""
## Steps to Use the AI Assistant:
1. **Start a New Chat**: Click the **'Start New Chat'** button to create a new session.
2. **Send a Message**: Type your message in the input box and either press **Enter** or click **'Send'** to get a response from the AI.
3. **View Available Sessions**: Click **'Get Available Session'** to list all your chat sessions.
4. **Load an Old Session**: You can enter the previous session ID in the **'Load Session'** box and click **'Load Session'**.
5. **Reset All Chats**: Click the **'Reset All'** button to clear all chat sessions and start fresh.
**Session ID**: Every new chat has a unique session ID, which you can use to return to previous conversations.
""")
with gr.Column():
new_chat_button = gr.Button("Start New Chat")
with gr.Row():
with gr.Column(scale=3):
chatbot = gr.Chatbot(elem_id="chatbot")
with gr.Row():
with gr.Column(scale=5):
user_input = gr.Textbox(
show_label=False,
placeholder="Type your message here...",
container=False,
elem_classes="large-textbox"
)
with gr.Column(scale=1):
send_button = gr.Button("Send", variant="primary", elem_classes="small-btn")
with gr.Column(scale=1):
session = gr.Textbox(label="Current Session", interactive=False)
session_list = gr.Dropdown(label="Available Sessions", choices=get_session_list(), allow_custom_value=True)
load_session = gr.Textbox(label="Load Session", interactive=True)
with gr.Row():
get_old_session_button = gr.Button("Load Session")
avail_session = gr.Button("Get Available Session")
reset_button_ = gr.Button("Reset All", variant="secondary")
# Button click actions
user_input.submit(chat, [user_input, chatbot, session], [chatbot, user_input])
send_button.click(chat, [user_input, chatbot, session], [chatbot, user_input]) # Send button
new_chat_button.click(new_chat, [], [chatbot, user_input, session, session_list]) # Also update the session list
get_old_session_button.click(old_chat, [load_session], [chatbot])
reset_button_.click(reset_button, [], [chatbot, session, user_input, session_list, load_session])
avail_session.click(get_session_list, [], [session_list])
# Launch the Gradio app
demo.launch()