from llama_cpp import Llama import gradio as gr import os # Локальный путь, куда будет скачана модель при запуске MODEL_PATH = "unsloth.Q4_K_M.gguf" # Если модели ещё нет — скачиваем if not os.path.exists(MODEL_PATH): import requests url = "https://huggingface.co/eliza555beth2002/DeepSeek-R1-Distill-Text2SQL-OneEpoch-GGUF-q4/resolve/main/unsloth.Q4_K_M.gguf" print("📥 Скачиваю модель из Hugging Face...") r = requests.get(url, stream=True) with open(MODEL_PATH, "wb") as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) print("Модель скачана успешно!") # Загружаем модель Llama.cpp llm = Llama( model_path=MODEL_PATH, n_ctx=4096, n_threads=4, n_gpu_layers=0, # если на CPU — ставим 0 verbose=False, ) # Основная функция def text2sql(question): schema = """ create table Authors( AuthorID integer not null primary key check(AuthorID>0), AuthorFIO varchar(40) not null ); create table Books( Cipher integer not null primary key check(Cipher>0), BookName varchar(4000) not null, BookTheme varchar(30) not null check(BookTheme in('Любовь','Дружба','Смерть','Общественные проблемы','Внутренние противоречия')), BookGenre varchar(15) not null check(BookGenre in('Роман','Поэма','Рассказ','Пьеса','Эпопея','Драма')) ); create table Wrote( IDAuthor integer not null check(IDAuthor>0), BookCipher integer not null check(BookCipher>0), foreign key(IDAuthor) references Authors(AuthorID), foreign key(BookCipher) references Books(Cipher), primary key(IDAuthor, BookCipher) ); """ prompt = f"""Ты — помощник, который преобразует естественный язык в SQL. Используй приведённую схему таблиц. Вопрос: {question} Контекст базы данных: {schema} Ответь ТОЛЬКО SQL-запросом в формате: ```sql SELECT ... ```""" # Генерация output = llm( prompt, max_tokens=512, temperature=0.2, stop=["```"], ) text = output["choices"][0]["text"].strip() return text # Интерфейс Gradio demo = gr.Interface( fn=text2sql, inputs=gr.Textbox(label="Введите вопрос на естественном языке"), outputs=gr.Textbox(label="Сгенерированный SQL-запрос"), title="🧠 DeepSeek Text2SQL Demo", description="Модель DeepSeek-R1-Distill преобразует текст в SQL-запрос по заданной схеме." ) if __name__ == "__main__": demo.launch()