eliza555beth2002 commited on
Commit
c066f5b
·
verified ·
1 Parent(s): 7aaeeb9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -72
app.py CHANGED
@@ -1,85 +1,57 @@
1
- from llama_cpp import Llama
2
  import gradio as gr
 
3
  import os
4
 
5
- # Локальный путь, куда будет скачана модель при запуске
6
- MODEL_PATH = "unsloth.Q4_K_M.gguf"
7
-
8
- # Если модели ещё нет — скачиваем
9
- if not os.path.exists(MODEL_PATH):
10
- import requests
11
-
12
- url = "https://huggingface.co/eliza555beth2002/DeepSeek-R1-Distill-Text2SQL-OneEpoch-GGUF-q4/resolve/main/unsloth.Q4_K_M.gguf"
13
- print("📥 Скачиваю модель из Hugging Face...")
14
- r = requests.get(url, stream=True)
15
- with open(MODEL_PATH, "wb") as f:
16
- for chunk in r.iter_content(chunk_size=8192):
17
- f.write(chunk)
18
- print("Модель скачана успешно!")
19
-
20
- # Загружаем модель Llama.cpp
21
- llm = Llama(
22
- model_path=MODEL_PATH,
23
- n_ctx=4096,
24
- n_threads=4,
25
- n_gpu_layers=0, # если на CPU — ставим 0
26
- verbose=False,
27
  )
28
 
29
- # Основная функция
30
- def text2sql(question):
31
- schema = """
32
- create table Authors(
33
- AuthorID integer not null primary key check(AuthorID>0),
34
- AuthorFIO varchar(40) not null
35
- );
36
- create table Books(
37
- Cipher integer not null primary key check(Cipher>0),
38
- BookName varchar(4000) not null,
39
- BookTheme varchar(30) not null
40
- check(BookTheme in('Любовь','Дружба','Смерть','Общественные проблемы','Внутренние противоречия')),
41
- BookGenre varchar(15) not null
42
- check(BookGenre in('Роман','Поэма','Рассказ','Пьеса','Эпопея','Драма'))
43
- );
44
- create table Wrote(
45
- IDAuthor integer not null check(IDAuthor>0),
46
- BookCipher integer not null check(BookCipher>0),
47
- foreign key(IDAuthor) references Authors(AuthorID),
48
- foreign key(BookCipher) references Books(Cipher),
49
- primary key(IDAuthor, BookCipher)
50
- );
51
- """
52
 
53
- prompt = f"""Ты — помощник, который преобразует естественный язык в SQL.
54
- Используй приведённую схему таблиц.
55
- Вопрос: {question}
56
- Контекст базы данных:
57
- {schema}
58
 
59
- Ответь ТОЛЬКО SQL-запросом в формате:
60
- ```sql
61
- SELECT ...
62
- ```"""
63
 
64
- # Генерация
 
65
  output = llm(
66
  prompt,
67
- max_tokens=512,
68
- temperature=0.2,
69
- stop=["```"],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  )
71
-
72
- text = output["choices"][0]["text"].strip()
73
- return text
74
-
75
- # Интерфейс Gradio
76
- demo = gr.Interface(
77
- fn=text2sql,
78
- inputs=gr.Textbox(label="Введите вопрос на естественном языке"),
79
- outputs=gr.Textbox(label="Сгенерированный SQL-запрос"),
80
- title="🧠 DeepSeek Text2SQL Demo",
81
- description="Модель DeepSeek-R1-Distill преобразует текст в SQL-запрос по заданной схеме."
82
- )
83
 
84
  if __name__ == "__main__":
85
- demo.launch()
 
 
1
  import gradio as gr
2
+ from llama_cpp import Llama
3
  import os
4
 
5
+ # Загрузка модели (GGUF из HF)
6
+ model_path = "eliza555beth2002/DeepSeek-R1-Distill-Text2SQL-OneEpoch-GGUF-q4"
7
+ llm = Llama.from_pretrained(
8
+ model_path,
9
+ n_ctx=2048, # Контекст для схемы БД
10
+ n_gpu_layers=-1, # Использовать GPU, если доступно
11
+ verbose=False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  )
13
 
14
+ def generate_sql(natural_query, db_schema):
15
+ # Шаблон промпта для Text2SQL (адаптируйте, если у модели другой)
16
+ prompt = f"""You are a SQL expert. Given the database schema below, generate a valid SQL query for the natural language question.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ Database Schema:
19
+ {db_schema}
 
 
 
20
 
21
+ Question: {natural_query}
 
 
 
22
 
23
+ SQL Query:"""
24
+
25
  output = llm(
26
  prompt,
27
+ max_tokens=150,
28
+ stop=[";", "\n\n"],
29
+ echo=False
30
+ )
31
+ sql_query = output['choices'][0]['text'].strip()
32
+ return sql_query
33
+
34
+ # Gradio интерфейс
35
+ with gr.Blocks(title="Text2SQL Demo") as demo:
36
+ gr.Markdown("# Text2SQL: Преобразование текста в SQL")
37
+ with gr.Row():
38
+ natural_input = gr.Textbox(label="Вопрос на естественном языке", placeholder="Найди всех пользователей старше 30 лет")
39
+ schema_input = gr.Textbox(label="Схема БД (таблицы и поля)", placeholder="CREATE TABLE users (id INT, name VARCHAR, age INT);")
40
+ output = gr.Textbox(label="Сгенерированный SQL")
41
+ submit_btn = gr.Button("Генерировать SQL")
42
+
43
+ submit_btn.click(
44
+ fn=generate_sql,
45
+ inputs=[natural_input, schema_input],
46
+ outputs=output
47
+ )
48
+ gr.Examples(
49
+ examples=[
50
+ ["Сколько продуктов дороже 100?", "CREATE TABLE products (id INT, name VARCHAR, price DECIMAL);"],
51
+ ["Пользователи из Москвы", "CREATE TABLE users (id INT, name VARCHAR, city VARCHAR);"]
52
+ ],
53
+ inputs=[natural_input, schema_input]
54
  )
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  if __name__ == "__main__":
57
+ demo.launch()