AiCoderv2's picture
Create app.py
ff1152e verified
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Load the model and tokenizer once to avoid reloading
model_name = "moonshotai/Kimi-K2-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def chat_with_kimi_k2(input_text, chat_history=None):
if chat_history is None:
chat_history = []
# Append user input to chat history
chat_history.append(f"User: {input_text}")
# Prepare prompt
prompt = "\n".join(chat_history) + "\nAI:"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=150, do_sample=True, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Extract AI response
response_text = response.split("AI:")[-1].strip()
chat_history.append(f"AI: {response_text}")
return response_text, chat_history
# Main menu interface
def main_menu():
return gr.Interface(
fn=show_model_selection,
title="AI Models Hub",
description="Select an AI model to chat with:",
inputs=[],
outputs=gr.Button("Kimi K2"),
live=True
)
# Show model options
def show_model_selection():
with gr.Row():
kimi_button = gr.Button("Chat with Kimi K2")
return kimi_button
# Chat interface for Kimi K2
def kimi_chat():
chat_history = []
def respond(user_input, history):
response, chat_history_updated = chat_with_kimi_k2(user_input, chat_history=history)
return response, chat_history_updated
with gr.Blocks():
gr.Markdown("### Chat with Kimi K2")
chatbox = gr.Textbox(placeholder="Type your message...", label="You")
response_box = gr.Textbox(label="Kimi K2")
chat_history_state = gr.State([])
back_button = gr.Button("Back to Menu")
def back():
return "Back", None
back_button.click(fn=main_menu, inputs=None, outputs=None)
user_input = chatbox
user_input.submit(respond, [user_input, chat_history_state], [response_box, chat_history_state])
back_button.click(lambda: None, None, None)
return gr.Column([chatbox, response_box, back_button])
# Assemble the main app
def app():
with gr.Blocks() as demo:
menu = gr.Button("Go to Main Menu")
kimichat = gr.Button("Chat with Kimi K2")
def show_kimi():
return kimi_chat()
menu.click(show_kimi)
kimichat.click(show_kimi)
return demo
# Run the app
demo = app()
demo.launch()