Dropdead072 commited on
Commit
fd8cb04
·
verified ·
1 Parent(s): 4bc15ad

Update pipeline.py

Browse files
Files changed (1) hide show
  1. pipeline.py +34 -14
pipeline.py CHANGED
@@ -225,20 +225,36 @@ def check_completeness(state: GraphState):
225
  with log_step("check_completeness"):
226
  state["iteration"] += 1
227
 
228
- context_text = "\n\n".join(doc.page_content for doc in state["contexts"])[:6000]
 
 
 
 
 
 
 
 
 
 
229
 
230
  prompt = f"""
231
- Запрос пользователя: {state['query']}
 
232
 
233
- Текущий контекст имеет {len(state['contexts'])} документов.
234
 
235
- Проанализируй, достаточно ли материала для создания полноценного курса как по запросу пользователя.
236
 
237
- Верни JSON:
238
  {{
239
- "enough": true или false,
240
- "next_query": "если не enough — один хороший поисковый запрос, иначе пустая строка"
 
 
 
241
  }}
 
 
242
  """
243
 
244
  raw = llm_analyze(prompt)
@@ -248,23 +264,27 @@ def check_completeness(state: GraphState):
248
  data = json.loads(match.group(0)) if match else json.loads(raw)
249
 
250
  enough = data.get("enough", False)
251
- next_query = data.get("next_query", "").strip()
 
252
 
253
- print(f"Enough: {enough}")
254
- if next_query:
255
- print(f"→ New query: {next_query}")
256
 
257
- if not enough and next_query and state["iteration"] < 4:
 
258
  return {
259
  "retrieval_queries": state["retrieval_queries"] + [next_query],
260
  "recurse": True
261
  }
262
  else:
 
263
  return {"recurse": False}
264
 
265
  except Exception as e:
266
- print(f"Parse error in check_completeness: {e}")
267
- return {"recurse": False}
 
 
 
268
 
269
 
270
  def generate_weekly_plan(state: GraphState):
 
225
  with log_step("check_completeness"):
226
  state["iteration"] += 1
227
 
228
+ total_chars = sum(len(doc.page_content) for doc in state["contexts"])
229
+ num_docs = len(state["contexts"])
230
+
231
+ print(f"Iteration {state['iteration']} | Documents: {num_docs} | Chars: ~{total_chars//1000}k")
232
+
233
+ # Жёсткий лимит по размеру контекста
234
+ if total_chars > 25000 or state["iteration"] >= 8:
235
+ print("✅ Достаточно контекста по объёму → завершаем сбор")
236
+ return {"recurse": False}
237
+
238
+ context_preview = "\n\n".join([doc.page_content[:400] for doc in state["contexts"][-8:]])
239
 
240
  prompt = f"""
241
+ Текущий запрос пользователя:
242
+ {state['query']}
243
 
244
+ Уже собрано {num_docs} документов (~{total_chars//1000}k символов).
245
 
246
+ Проанализируй, достаточно ли материала, чтобы создать **качественный интенсивный курс**.
247
 
248
+ Ответь строго JSON:
249
  {{
250
+ "enough": true/false,
251
+ "reason": "короткое объяснение почему enough или нет",
252
+ "next_query": "если enough=false — один **конкретный** поисковый запрос для RAG.
253
+ Должен быть тематическим, а не 'составь план'.
254
+ Пример: 'аффинные алгебраические многообразия определение свойства примеры'"
255
  }}
256
+
257
+ Будь строгим. Если контекста уже много и основные темы покрыты — ставь enough: true.
258
  """
259
 
260
  raw = llm_analyze(prompt)
 
264
  data = json.loads(match.group(0)) if match else json.loads(raw)
265
 
266
  enough = data.get("enough", False)
267
+ next_query = (data.get("next_query") or "").strip()
268
+ reason = data.get("reason", "")
269
 
270
+ print(f"Enough: {enough} | Reason: {reason[:100]}...")
 
 
271
 
272
+ if not enough and next_query and state["iteration"] < 8:
273
+ print(f"→ New query: {next_query}")
274
  return {
275
  "retrieval_queries": state["retrieval_queries"] + [next_query],
276
  "recurse": True
277
  }
278
  else:
279
+ print("✅ Завершаем итерации, переходим к генерации плана")
280
  return {"recurse": False}
281
 
282
  except Exception as e:
283
+ print(f"Parse error: {e}")
284
+ # Если модель совсем не дала JSON — выходим после 6 итераций
285
+ if state["iteration"] >= 6:
286
+ return {"recurse": False}
287
+ return {"recurse": True} # попробуем ещё раз
288
 
289
 
290
  def generate_weekly_plan(state: GraphState):