Update app.py
Browse files
app.py
CHANGED
|
@@ -31,7 +31,7 @@ LLAMA_MODELS = {
|
|
| 31 |
|
| 32 |
MAX_TOKENS_MAP = {
|
| 33 |
"meta-llama/Llama-3.3-70B-Instruct": 900,
|
| 34 |
-
"meta-llama/Llama-3.1-8B-Instruct":
|
| 35 |
"Qwen/QwQ-32B": 8192
|
| 36 |
}
|
| 37 |
|
|
@@ -64,16 +64,13 @@ def create_engine_and_load_db(csv_path, sql_db_path):
|
|
| 64 |
df = pd.read_csv(csv_path, sep=";", on_bad_lines="skip")
|
| 65 |
df.to_sql("tabela", engine, index=False, if_exists="replace")
|
| 66 |
logging.info(f"[ENGINE] Banco criado com sucesso com {len(df)} linhas e {len(df.columns)} colunas")
|
|
|
|
| 67 |
return engine
|
| 68 |
|
| 69 |
def handle_csv_upload(file):
|
| 70 |
global engine, db, sql_agent
|
| 71 |
|
| 72 |
try:
|
| 73 |
-
if file is None or not hasattr(file, "name"):
|
| 74 |
-
logging.warning("[UPLOAD] Nenhum arquivo CSV foi carregado.")
|
| 75 |
-
return
|
| 76 |
-
|
| 77 |
file_path = file.name
|
| 78 |
shutil.copy(file_path, UPLOADED_CSV_PATH)
|
| 79 |
logging.info(f"[UPLOAD] CSV salvo como: {UPLOADED_CSV_PATH}")
|
|
@@ -104,13 +101,15 @@ def handle_csv_upload(file):
|
|
| 104 |
|
| 105 |
def reset_app():
|
| 106 |
global engine, db, sql_agent, query_cache, history_log, recent_history
|
|
|
|
| 107 |
try:
|
| 108 |
if os.path.exists(UPLOADED_CSV_PATH):
|
| 109 |
os.remove(UPLOADED_CSV_PATH)
|
| 110 |
logging.info("[RESET] CSV personalizado removido.")
|
|
|
|
| 111 |
engine = create_engine_and_load_db(DEFAULT_CSV_PATH, SQL_DB_PATH)
|
| 112 |
db = SQLDatabase(engine=engine)
|
| 113 |
-
sql_agent = create_sql_agent(ChatOpenAI(model="gpt-4o-mini", temperature=0), db=db, agent_type="openai-tools")
|
| 114 |
query_cache.clear()
|
| 115 |
history_log.clear()
|
| 116 |
recent_history.clear()
|
|
@@ -130,8 +129,8 @@ def generate_initial_context(db_sample):
|
|
| 130 |
f"Você é um assistente que gera queries SQL objetivas e eficientes. Sempre inclua LIMIT 10 nas queries. Aqui está o banco de dados:\n\n"
|
| 131 |
f"Exemplos do banco de dados:\n{db_sample.head().to_string(index=False)}\n\n"
|
| 132 |
"\n***IMPORTANTE***: Detecte automaticamente o idioma da pergunta do usuário e responda sempre no mesmo idioma.\n"
|
| 133 |
-
"Essa base de dados representa o sellout de 2025, janeiro, fevereiro e março até dia 11, de uma farmácia.\n"
|
| 134 |
-
"Cada linha representa a venda de um SKU em uma determinada data.\n"
|
| 135 |
"\nRetorne apenas a pergunta e a query SQL mais eficiente para entregar ao agent SQL do LangChain para gerar uma resposta. O formato deve ser:\n"
|
| 136 |
"\nPergunta: <pergunta do usuário>\n"
|
| 137 |
"\nOpção de Query SQL:\n<query SQL>"
|
|
@@ -232,11 +231,11 @@ def toggle_history():
|
|
| 232 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 233 |
with gr.Row():
|
| 234 |
with gr.Column(scale=1):
|
| 235 |
-
gr.Markdown("##
|
| 236 |
model_selector = gr.Dropdown(list(LLAMA_MODELS.keys()), value="LLaMA 70B", label="")
|
| 237 |
csv_file = gr.File(file_types=[".csv"], label="")
|
| 238 |
upload_feedback = gr.Markdown()
|
| 239 |
-
reset_btn = gr.Button("
|
| 240 |
|
| 241 |
with gr.Column(scale=4):
|
| 242 |
gr.Markdown("## Reasoning Agent")
|
|
|
|
| 31 |
|
| 32 |
MAX_TOKENS_MAP = {
|
| 33 |
"meta-llama/Llama-3.3-70B-Instruct": 900,
|
| 34 |
+
"meta-llama/Llama-3.1-8B-Instruct": 700,
|
| 35 |
"Qwen/QwQ-32B": 8192
|
| 36 |
}
|
| 37 |
|
|
|
|
| 64 |
df = pd.read_csv(csv_path, sep=";", on_bad_lines="skip")
|
| 65 |
df.to_sql("tabela", engine, index=False, if_exists="replace")
|
| 66 |
logging.info(f"[ENGINE] Banco criado com sucesso com {len(df)} linhas e {len(df.columns)} colunas")
|
| 67 |
+
|
| 68 |
return engine
|
| 69 |
|
| 70 |
def handle_csv_upload(file):
|
| 71 |
global engine, db, sql_agent
|
| 72 |
|
| 73 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
file_path = file.name
|
| 75 |
shutil.copy(file_path, UPLOADED_CSV_PATH)
|
| 76 |
logging.info(f"[UPLOAD] CSV salvo como: {UPLOADED_CSV_PATH}")
|
|
|
|
| 101 |
|
| 102 |
def reset_app():
|
| 103 |
global engine, db, sql_agent, query_cache, history_log, recent_history
|
| 104 |
+
|
| 105 |
try:
|
| 106 |
if os.path.exists(UPLOADED_CSV_PATH):
|
| 107 |
os.remove(UPLOADED_CSV_PATH)
|
| 108 |
logging.info("[RESET] CSV personalizado removido.")
|
| 109 |
+
|
| 110 |
engine = create_engine_and_load_db(DEFAULT_CSV_PATH, SQL_DB_PATH)
|
| 111 |
db = SQLDatabase(engine=engine)
|
| 112 |
+
sql_agent = create_sql_agent(ChatOpenAI(model="gpt-4o-mini", temperature=0), db=db, agent_type="openai-tools", verbose=True, max_iterations=40, return_intermediate_steps=True)
|
| 113 |
query_cache.clear()
|
| 114 |
history_log.clear()
|
| 115 |
recent_history.clear()
|
|
|
|
| 129 |
f"Você é um assistente que gera queries SQL objetivas e eficientes. Sempre inclua LIMIT 10 nas queries. Aqui está o banco de dados:\n\n"
|
| 130 |
f"Exemplos do banco de dados:\n{db_sample.head().to_string(index=False)}\n\n"
|
| 131 |
"\n***IMPORTANTE***: Detecte automaticamente o idioma da pergunta do usuário e responda sempre no mesmo idioma.\n"
|
| 132 |
+
#"Essa base de dados representa o sellout de 2025, janeiro, fevereiro e março até dia 11, de uma farmácia.\n"
|
| 133 |
+
#"Cada linha representa a venda de um SKU em uma determinada data.\n"
|
| 134 |
"\nRetorne apenas a pergunta e a query SQL mais eficiente para entregar ao agent SQL do LangChain para gerar uma resposta. O formato deve ser:\n"
|
| 135 |
"\nPergunta: <pergunta do usuário>\n"
|
| 136 |
"\nOpção de Query SQL:\n<query SQL>"
|
|
|
|
| 231 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 232 |
with gr.Row():
|
| 233 |
with gr.Column(scale=1):
|
| 234 |
+
gr.Markdown("## Configurações")
|
| 235 |
model_selector = gr.Dropdown(list(LLAMA_MODELS.keys()), value="LLaMA 70B", label="")
|
| 236 |
csv_file = gr.File(file_types=[".csv"], label="")
|
| 237 |
upload_feedback = gr.Markdown()
|
| 238 |
+
reset_btn = gr.Button("Resetar")
|
| 239 |
|
| 240 |
with gr.Column(scale=4):
|
| 241 |
gr.Markdown("## Reasoning Agent")
|