ahmeds26
Add feature chatgpt and bard
4a6aa55
raw
history blame
3.99 kB
import gradio as gr
from transformers import pipeline
from transformers import T5Tokenizer, T5ForConditionalGeneration
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from openai_model import *
from bard_model import *
from llm_model import *
import tensorflow
import torch
import random
import time
import os
global default_model_name
default_model_name = "google/flan-t5-base"
def predict(input_text, input_prompt, input_model1, input_model2, input_model3):
if input_model1!="":
model_name = input_model1
response_text = llm_predict(input_text, model_name)
return response_text
elif input_model2!="":
model_name = input_model2
response_text = openai_predict(input_text, input_prompt, model_name)
return response_text
else:
model_name = input_model3
response_text = bard_predict(input_text, model_name)
return response_text
def select_choice(choice):
if choice == "Custom Large Language Model (LLM)":
return [gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)]
elif choice == "OpenAI 'GPT-3.5-Turbo' Model":
return [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)]
else:
return [gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)]
input_model1 = gr.Textbox(label="Enter LLM name:")
input_model2 = gr.Textbox(label="Enter OpenAI API KEY:")
input_model3 = gr.Textbox(label="Enter Google Bard API KEY:")
with gr.Blocks(theme=gr.themes.Glass(primary_hue="blue", secondary_hue="sky", neutral_hue="stone")) as demo:
gr.Markdown(
"""
# Chatbot to interact with different Large Language Models (LLMs)
[Here](https://huggingface.co/models?pipeline_tag=text2text-generation) are some popular custom text2text large lamguage models.
For example: **"google/flan-t5-base"**
OR Your **OPEN AI API KEY** to chat with **ChatGPT**
OR Your **Google Bard API KEY** to chat with **Google Bard**
""")
input_models = gr.Radio(choices=["Custom Large Language Model (LLM)", "OpenAI 'GPT-3.5-Turbo' Model",
"Google Bard Model"], label="Please Select which model you want to use:",
value="Custom Large Language Model (LLM):")
with gr.Row(visible=True) as row:
with gr.Column(visible=True) as col:
with gr.Row(visible=True) as rowA:
input_model1.render()
with gr.Row(visible=False) as rowB:
input_model2.render()
with gr.Row(visible=False) as rowC:
input_model3.render()
chatbot = gr.Chatbot(height=300, label="A chatbot to interact with LLM", avatar_images=((os.path.join(os.path.dirname(__file__), "user.png")), (os.path.join(os.path.dirname(__file__), "bot.png"))))
user_input = gr.Textbox(label="Enter a message:")
clear = gr.ClearButton(value="Clear")
custom_prompt = gr.Textbox(label="Enter a custom prompt to use:", lines=15, max_lines=20, placeholder="In just 150 words summarize this text...")
input_models.change(fn=select_choice, inputs=input_models, outputs=[rowA, rowB, rowC], queue=False)
def user(user_message, chat_history):
return "", chat_history + [[user_message, None]]
def respond(chat_history, custom_prompt, input_model1, input_model2, input_model3):
bot_message = predict(chat_history[-1][0], custom_prompt, input_model1, input_model2, input_model3)
chat_history[-1][1] = bot_message
time.sleep(2)
return chat_history
user_input.submit(user, [user_input, chatbot], [user_input, chatbot], queue=False).then(
respond, [chatbot, custom_prompt, input_model1, input_model2, input_model3], chatbot
)
clear.click(lambda: [None, None, None, None, None, None], outputs=[user_input, chatbot, custom_prompt, input_model1, input_model2, input_model3], queue=False)
demo.queue()
demo.launch()