Spaces:
Sleeping
Sleeping
| 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=1000, 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() |