import gradio as gr from transformers import AutoModelForCausalLM import torch # Загрузка модели DeepSeek-Coder-1.3b-instruct model_name = "deepseek-ai/deepseek-coder-1.3b-instruct" model = AutoModelForCausalLM.from_pretrained(model_name) # Проверка доступности GPU device = "cuda" if torch.cuda.is_available() else "cpu" model.to(device) # Функция для генерации кода def generate_code(prompt, file_type): if file_type in ["Gradio", "Vercel", "Streamlit"]: # Генерация кода для платформ prompt_with_file_type = f"Write a configuration or setup code for {file_type} to: {prompt}" else: # Генерация кода для языков программирования prompt_with_file_type = f"Write a {file_type} code for: {prompt}" # Генерация кода с использованием модели inputs = prompt_with_file_type # Передаем текст напрямую outputs = model.generate( inputs, # Модель должна поддерживать прямой ввод текста max_length=200, # Ограничение длины вывода num_return_sequences=1, # Один вариант ответа temperature=0.7, # Контроль случайности top_p=0.9, # Контроль разнообразия ) # Возвращаем сгенерированный код return outputs[0] # Предполагаем, что модель возвращает текст напрямую # Функция для обновления кода def update_code(existing_code, update_prompt): # Объединение существующего кода и нового запроса prompt_with_update = f"Rewrite the following code to: {update_prompt}\n\nExisting Code:\n{existing_code}" # Генерация обновленного кода outputs = model.generate( prompt_with_update, max_length=250, # Увеличен для обновления кода num_return_sequences=1, temperature=0.7, top_p=0.9, ) # Возвращаем обновленный код return outputs[0] # Примеры для интерфейса examples = [ ["Write a function to calculate factorial", "Python"], ["Create a simple interface for a calculator", "Gradio"], ["Deploy a Next.js app", "Vercel"], ["Create a data visualization app", "Streamlit"], ["Write a program to reverse a string", "JavaScript"], ["Create a responsive navbar", "HTML"], ] # Gradio интерфейс with gr.Blocks(theme='Nymbo/Nymbo-Theme') as demo: gr.Markdown("# AI Code Generator with Update Feature") gr.Markdown("Enter a prompt and select the file type or platform to generate code. You can also update the generated code with a new prompt.") with gr.Row(): input_prompt = gr.Textbox(label="Input Prompt", placeholder="e.g., Write a function to calculate factorial...") file_type = gr.Dropdown( label="File Type / Platform", choices=["Python", "JavaScript", "HTML", "CSS", "Java", "C++", "Gradio", "Vercel", "Streamlit"], value="Python" ) # Панель для кода с очень большим количеством строк output_code = gr.Textbox(label="Generated Code", lines=30, interactive=False) # Кнопка "Скопировать" copy_button = gr.Button("Скопировать код") copy_button.click( None, # Не требует Python-функции inputs=[output_code], # Входные данные — текст из output_code outputs=None, # Нет выходных данных js="""(text) => { navigator.clipboard.writeText(text); alert('Код скопирован в буфер обмена!'); }""" ) generate_button = gr.Button("Generate Code") generate_button.click(fn=generate_code, inputs=[input_prompt, file_type], outputs=output_code) # Секция для обновления кода with gr.Row(): update_prompt = gr.Textbox(label="Update Prompt", placeholder="e.g., Add error handling to the code...") update_button = gr.Button("Update Code") update_button.click(fn=update_code, inputs=[output_code, update_prompt], outputs=output_code) # Добавление примеров gr.Examples( examples=examples, inputs=[input_prompt, file_type], outputs=output_code, fn=generate_code, cache_examples=True, # Кэширование для ускорения label="Click on an example to get started!" ) # Запуск интерфейса demo.launch()