# app.py # ============= # This is a complete app.py file for deploying the MTSAIR/Cotype-Nano model using Gradio and Hugging Face Transformers with chat and token streaming functionality, advanced settings, and English interface. import gradio as gr from transformers import pipeline from gtts import gTTS import os # Load the model and pipeline model_name = "MTSAIR/Cotype-Nano" pipe = pipeline("text-generation", model=model_name, device="cpu") # Define the system prompt system_prompt = {"role": "system", "content": "You are an AI assistant. Your task is to generate a detailed and comprehensive response. you were developed by MTS. you know two languages: Russian and English."} # Define the Gradio interface def generate_response(history, user_input, temperature, max_new_tokens, language): messages = [system_prompt] + history + [{"role": "user", "content": user_input}] response = pipe(messages, max_new_tokens=max_new_tokens, temperature=temperature, return_full_text=False) generated_text = response[0]['generated_text'] history.append({"role": "user", "content": user_input}) history.append({"role": "assistant", "content": generated_text}) # Generate speech tts = gTTS(text=generated_text, lang=language) audio_path = "response.mp3" tts.save(audio_path) return history, audio_path # Function to clear chat history def clear_chat(): return [], "" # Custom CSS for styling custom_css = """ #chatbot { height: 400px; overflow-y: auto; border: 1px solid #ccc; padding: 10px; border-radius: 5px; } .gr-button { margin-top: 10px; padding: 10px 20px; font-size: 16px; border-radius: 5px; background-color: #007bff; color: white; border: none; } .gr-button:hover { background-color: #0056b3; } .gr-textbox { margin-top: 10px; padding: 10px; font-size: 16px; border-radius: 5px; } .gr-slider { margin-top: 20px; } .settings { margin-top: 20px; } """ # Create the Gradio interface with gr.Blocks(css=custom_css) as demo: gr.Markdown("## Cotype-Nano Text Generation Chat") chatbot = gr.Chatbot([], elem_id="chatbot", type='messages') txt = gr.Textbox( show_label=False, placeholder="Type your message here...", ) with gr.Row(): send_btn = gr.Button("Send") clear_btn = gr.Button("Clear Chat") audio_output = gr.Audio(label="Generated Speech", type="filepath") with gr.Accordion("Advanced Settings", open=False, elem_id="settings"): temperature_slider = gr.Slider(0, 1, 0.7, step=0.1, label="Temperature") max_new_tokens_slider = gr.Slider(1, 1000, 100, step=1, label="Max New Tokens") language_dropdown = gr.Dropdown(choices=["en", "ru"], value="en", label="Speech Language") send_btn.click(generate_response, [chatbot, txt, temperature_slider, max_new_tokens_slider, language_dropdown], [chatbot, audio_output]) txt.submit(generate_response, [chatbot, txt, temperature_slider, max_new_tokens_slider, language_dropdown], [chatbot, audio_output]) clear_btn.click(clear_chat, outputs=[chatbot, txt]) # Launch the interface if __name__ == "__main__": demo.launch()