Multichatplayground is a cool wrapper for Gradio that makes it super easy to build chatbot demos that use multiple local and remote models concurrently.
![image](https://private-user-images.githubusercontent.com/1688838/325529060-62d21aee-59c2-469d-bda2-2bca79d30c0a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNjYzMDUsIm5iZiI6MTczOTM2NjAwNSwicGF0aCI6Ii8xNjg4ODM4LzMyNTUyOTA2MC02MmQyMWFlZS01OWMyLTQ2OWQtYmRhMi0yYmNhNzlkMzBjMGEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMTMxMzI1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2VhMzIwZTEzMjkxNTgwMGVmNzFlODk3MjAxMzMxMGJmYzc2MDk0ODdkNDBkZDUxNGYyMWI1MTU1ODdjNWNlNSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.5xUvsQgv9DX7KGXQVl2SE3XkAhLPQEkdIeS47WH-uHA)
![image](https://private-user-images.githubusercontent.com/1688838/325530347-04c31c58-6750-48fb-a44e-7e8936ed2107.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNjYzMDUsIm5iZiI6MTczOTM2NjAwNSwicGF0aCI6Ii8xNjg4ODM4LzMyNTUzMDM0Ny0wNGMzMWM1OC02NzUwLTQ4ZmItYTQ0ZS03ZTg5MzZlZDIxMDcucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMTMxMzI1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Yjk4N2NkNjllMzQ5ZDNmY2UzMmZiMzdkZWI3ZGRmY2U3ZTc3YWYyY2Y4ZTk5OGY1NTgwMGJlZjBlMzllZmEzMSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.ow7sxgILFrQhGcL5EblCQZH0vHxn56Lubfz7wM_MF_0)
![image](https://private-user-images.githubusercontent.com/1688838/325530528-51b6958f-c5cb-4c66-a626-25c19aa65758.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNjYzMDUsIm5iZiI6MTczOTM2NjAwNSwicGF0aCI6Ii8xNjg4ODM4LzMyNTUzMDUyOC01MWI2OTU4Zi1jNWNiLTRjNjYtYTYyNi0yNWMxOWFhNjU3NTgucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMTMxMzI1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OTM3NDMyZjQ0ZTVjZjg1YzU0NTAzMzA1OTYxM2U5ODBkZDI0NTA3MjNhYWJhYTc4M2Y2OWRkMDg5MDI5OWZiNSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.zu_1HBdEdLVLNmKZ7eL-Gg93VX4j4xeVXEfdJ44EW9M)
The user can enter in a prompt once and it will concurerntly execute on all models, using langchain to maintain appropriate conversational content. For non-local models, API keys will be required, and local models use ollama to execute.
More models can easily be added by adding to the modelindex.py function. In addition, conversations can be saved, loaded and removed by changing the name of the active chat.
Further, this building tool has playground like functionality where the user can go back and edit a previous response of the agent and have that updated context be used for the next prompt. For example:
![image](https://private-user-images.githubusercontent.com/1688838/325531285-0551ef13-fb49-4d22-ad20-44fcc680c264.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNjYzMDUsIm5iZiI6MTczOTM2NjAwNSwicGF0aCI6Ii8xNjg4ODM4LzMyNTUzMTI4NS0wNTUxZWYxMy1mYjQ5LTRkMjItYWQyMC00NGZjYzY4MGMyNjQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTJUMTMxMzI1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YzgwYjlmNGU3ZWQ5MjJmNmI0NjY3MzllYjgxOTU1ZDA5ZjVmYTFkYWJhM2RlNzc1MWU1NjdjMWE1MjEzN2NlNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.IhIMz6CXUQySr_mNW_z7D5qcSM6EIwR22EBbGpi3WF4)
The sample code can be found at gradiosample.py.
After setting up the UI code according to preference, the only additional code required for this multi-chatbox functionality is:
ThreadText = ChatBot(full_path = "savedChats.json", json_object = {},full_json_object = {}, name_text_box=activeThread,
dropdown = thread_choice, clear_button= clear_chat, save_button = save_button, remove_button = remove_button,
primary_chatbot=chatbot,secondary_chatbots=model_chatbots, model_specs = model_specs, model_choice=model_choice,
temp_slider=temp_slider, msg = msg,sys_msg_text= "System: You are a helpful assistant")
ThreadText.bind_event_handlers()
ThreadText.initialize()