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()