File size: 3,637 Bytes
b7f426b 7e42f7f b7f426b 7e42f7f 9176bca 016c388 725f763 7e42f7f 4cd8d7e 016c388 4cd8d7e 042d9eb 016c388 4cd8d7e 016c388 4cd8d7e 016c388 4cd8d7e 9176bca 4cd8d7e 016c388 4cd8d7e 016c388 4cd8d7e b7f426b 4cd8d7e 016c388 4cd8d7e 016c388 4cd8d7e 016c388 4cd8d7e 016c388 4cd8d7e 725f763 4cd8d7e 725f763 4cd8d7e 725f763 4cd8d7e 725f763 016c388 4cd8d7e 042d9eb a2dcfac 4cd8d7e b7f426b 9176bca a2dcfac 4cd8d7e 725f763 9176bca 4cd8d7e 9176bca 4cd8d7e 9176bca b7f426b 4cd8d7e 9176bca 4cd8d7e 9176bca b7f426b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import os
import gradio as gr
from huggingface_hub import InferenceClient
# Setup clients for each provider
llama_client = InferenceClient(provider="sambanova", api_key=os.environ["HF_TOKEN"])
minimax_client = InferenceClient(provider="novita", api_key=os.environ["HF_TOKEN"])
mistral_client = InferenceClient(provider="together", api_key=os.environ["HF_TOKEN"])
# Context-aware response function
def chat_with_model(model_choice, prompt, image_url, chat_history):
if not prompt:
return "Please enter a text prompt.", chat_history
if chat_history is None:
chat_history = []
try:
# === LLaMA 4 ===
if model_choice == "LLaMA 4 (SambaNova)":
user_msg = [{"type": "text", "text": prompt}]
if image_url:
user_msg.append({"type": "image_url", "image_url": {"url": image_url}})
chat_history.append({"role": "user", "content": user_msg})
response = llama_client.chat.completions.create(
model="meta-llama/Llama-4-Maverick-17B-128E-Instruct",
messages=chat_history
)
bot_msg = response.choices[0].message.content
chat_history.append({"role": "assistant", "content": bot_msg})
return bot_msg, chat_history
# === MiniMax ===
elif model_choice == "MiniMax M1 (Novita)":
chat_history.append({"role": "user", "content": prompt})
response = minimax_client.chat.completions.create(
model="MiniMaxAI/MiniMax-M1-80k",
messages=chat_history
)
bot_msg = response.choices[0].message.content
chat_history.append({"role": "assistant", "content": bot_msg})
return bot_msg, chat_history
# === Mistral ===
elif model_choice == "Mistral Mixtral-8x7B (Together)":
chat_history.append({"role": "user", "content": prompt})
response = mistral_client.chat.completions.create(
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
messages=chat_history
)
bot_msg = response.choices[0].message.content
chat_history.append({"role": "assistant", "content": bot_msg})
return bot_msg, chat_history
else:
return "Unsupported model selected.", chat_history
except Exception as e:
return f"Error: {e}", chat_history
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🤖 Multi-Model Context-Aware Chatbot")
gr.Markdown("Supports LLaMA 4 (with optional image), MiniMax, and Mistral. Conversation memory is preserved.")
model_dropdown = gr.Dropdown(
choices=[
"LLaMA 4 (SambaNova)",
"MiniMax M1 (Novita)",
"Mistral Mixtral-8x7B (Together)"
],
value="LLaMA 4 (SambaNova)",
label="Select Model"
)
prompt_input = gr.Textbox(label="Text Prompt", placeholder="Ask something...", lines=2)
image_url_input = gr.Textbox(label="Optional Image URL (for LLaMA only)", placeholder="https://example.com/image.jpg")
submit_btn = gr.Button("Generate Response")
reset_btn = gr.Button("🔄 Reset Conversation")
output_box = gr.Textbox(label="Response", lines=8)
state = gr.State([])
submit_btn.click(
fn=chat_with_model,
inputs=[model_dropdown, prompt_input, image_url_input, state],
outputs=[output_box, state]
)
reset_btn.click(
fn=lambda: ("Conversation reset. You can start a new one.", []),
inputs=[],
outputs=[output_box, state]
)
demo.launch()
|