natalieac commited on
Commit
0e7f7f3
·
verified ·
1 Parent(s): ae1872c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -10
app.py CHANGED
@@ -9,9 +9,47 @@ from backend.llm_local import generate
9
  from backend.summarizer import extractive_sents, map_reduce
10
 
11
 
 
12
  for p in [settings.RAW_DIR, settings.INDEX_DIR, settings.MODEL_DIR]:
13
  p.mkdir(parents=True, exist_ok=True)
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  STATE_INDEXED = False
16
 
17
 
@@ -81,27 +119,32 @@ def build_index():
81
  """Ingestão (parse) + construção e carga do índice. Mostra erro detalhado no UI."""
82
  global STATE_INDEXED
83
  try:
 
 
 
 
 
84
  if not (settings.INDEX_DIR / "meta.jsonl").exists():
85
- ingest_all() # extrai textos e cria meta.jsonl
86
- retriever.build() # cria/atualiza FAISS
87
- retriever.load() # carrega o índice em memória
 
88
  STATE_INDEXED = True
89
  return "Índice criado/carregado. Vá para **Conversar** ou **Resumir**."
90
  except Exception as e:
91
  STATE_INDEXED = False
92
  return f"Falha ao indexar/carregar: **{type(e).__name__}** — {e}"
93
 
 
94
  def chat_answer(history, message):
95
- """Carrega o índice se preciso e responde; se falhar, mostra o motivo em vez de 'ERRO!'."""
96
  if not history:
97
  history = []
98
 
99
- try:
100
- if not STATE_INDEXED:
101
- retriever.load()
102
- except Exception as e:
103
- return history + [("system", f"Índice não está pronto: **{type(e).__name__}** {e}\n"
104
- "Vá na aba **Upload & Indexar** e clique em **Indexar**.")], ""
105
 
106
  try:
107
  hits = retriever.search(message, top_k=settings.TOP_K)
 
9
  from backend.summarizer import extractive_sents, map_reduce
10
 
11
 
12
+
13
  for p in [settings.RAW_DIR, settings.INDEX_DIR, settings.MODEL_DIR]:
14
  p.mkdir(parents=True, exist_ok=True)
15
 
16
+ def _index_files_exist() -> bool:
17
+ """Checa se o índice FAISS e o cache existem."""
18
+ from backend.rag import retriever
19
+ return (retriever.index_path.exists() if hasattr(retriever, "index_path") else False) or \
20
+ (settings.INDEX_DIR / "faiss.index").exists()
21
+
22
+ def _raw_has_files() -> bool:
23
+ return any(settings.RAW_DIR.rglob("*.*"))
24
+
25
+ def try_autoload_index() -> str | None:
26
+ """
27
+ Se já houver índice, carrega. Se houver arquivos em RAW mas não índice,
28
+ tenta construir automaticamente.
29
+ """
30
+ global STATE_INDEXED
31
+ try:
32
+ if _index_files_exist():
33
+ retriever.load()
34
+ STATE_INDEXED = True
35
+ return None
36
+ elif _raw_has_files():
37
+
38
+ ingest_all()
39
+ retriever.build()
40
+ retriever.load()
41
+ STATE_INDEXED = True
42
+ return None
43
+ else:
44
+ STATE_INDEXED = False
45
+ return "Nenhum arquivo em backend/data/raw/. Envie arquivos (ou comite nessa pasta) e clique em Indexar."
46
+ except Exception as e:
47
+ STATE_INDEXED = False
48
+ return f"Falha ao preparar índice automaticamente: {type(e).__name__} — {e}"
49
+
50
+
51
+
52
+
53
  STATE_INDEXED = False
54
 
55
 
 
119
  """Ingestão (parse) + construção e carga do índice. Mostra erro detalhado no UI."""
120
  global STATE_INDEXED
121
  try:
122
+ if not _raw_has_files():
123
+ STATE_INDEXED = False
124
+ return "Nenhum arquivo encontrado em backend/data/raw/. Adicione arquivos ou faça upload."
125
+
126
+
127
  if not (settings.INDEX_DIR / "meta.jsonl").exists():
128
+ ingest_all()
129
+
130
+ retriever.build()
131
+ retriever.load()
132
  STATE_INDEXED = True
133
  return "Índice criado/carregado. Vá para **Conversar** ou **Resumir**."
134
  except Exception as e:
135
  STATE_INDEXED = False
136
  return f"Falha ao indexar/carregar: **{type(e).__name__}** — {e}"
137
 
138
+
139
  def chat_answer(history, message):
 
140
  if not history:
141
  history = []
142
 
143
+
144
+ if not STATE_INDEXED:
145
+ warn = try_autoload_index()
146
+ if warn:
147
+ return history + [("system", warn + "\nVá na aba **Upload & Indexar** e clique em **Indexar**.")], ""
 
148
 
149
  try:
150
  hits = retriever.search(message, top_k=settings.TOP_K)