andrewchernish1-ui commited on
Commit
2802a07
·
1 Parent(s): c46cc16

feat: llm report with recommendations

Browse files
Files changed (2) hide show
  1. app/agent.py +7 -0
  2. app/llm.py +8 -7
app/agent.py CHANGED
@@ -353,4 +353,11 @@ class InterviewAgent:
353
  return any(keyword in text for keyword in keywords)
354
 
355
  def _generate_report(self, state: SessionState) -> str:
 
 
 
 
 
 
 
356
  return build_markdown_report(state)
 
353
  return any(keyword in text for keyword in keywords)
354
 
355
  def _generate_report(self, state: SessionState) -> str:
356
+ if self._llm.available:
357
+ try:
358
+ report = self._llm.generate_report(state)
359
+ if report:
360
+ return report
361
+ except Exception as exc: # pragma: no cover - LLM may fail
362
+ logger.warning("LLM report generation failed: %s", exc)
363
  return build_markdown_report(state)
app/llm.py CHANGED
@@ -31,7 +31,6 @@ class LocalLLM:
31
  self._model = AutoModelForCausalLM.from_pretrained(
32
  path,
33
  torch_dtype=torch.float32,
34
- low_cpu_mem_usage=True,
35
  trust_remote_code=True,
36
  )
37
  if self._tokenizer.pad_token_id is None:
@@ -147,15 +146,17 @@ class LocalLLM:
147
  sections = []
148
  for question in state.questions:
149
  answer = state.transcripts.get(question.id, "Нет ответа")
150
- sections.append(f"### {question.prompt}\nОтвет: {answer}")
151
  convo = "\n".join(sections)
152
  return (
153
- "Ты - ассистент тренера. Составь структурированный текстовый отчёт:"\
154
- + "\nРазделы: Клиент, Здоровье, Цели, Режим и формат, Рекомендации."\
155
- + "\nТон деловой, по-русски. Не добавляй лишних комментариев."\
 
 
156
  + f"\nИмя клиента: {state.client.name}. Электронная почта: {state.client.email}. Формат: {state.client.preferred_format}."\
157
- + f"\nДиалог:\n{convo}"\
158
- + "\nВерни только текст с заголовками и списками."
159
  )
160
 
161
  def _topic_keys(self, block: BlockKey) -> list[str]:
 
31
  self._model = AutoModelForCausalLM.from_pretrained(
32
  path,
33
  torch_dtype=torch.float32,
 
34
  trust_remote_code=True,
35
  )
36
  if self._tokenizer.pad_token_id is None:
 
146
  sections = []
147
  for question in state.questions:
148
  answer = state.transcripts.get(question.id, "Нет ответа")
149
+ sections.append(f"- {question.prompt}\n Ответ: {answer}")
150
  convo = "\n".join(sections)
151
  return (
152
+ "Ты - ассистент тренера. Проанализируй ответы клиента и составь структурированный текстовый отчёт."\
153
+ + "\nНе пересказывай ответы дословно, делай выводы и рекомендации."\
154
+ + "\nФормат: заголовки и списки. Разделы: Краткий профиль, Риски и ограничения, Цели и метрики, Рекомендации, Следующие шаги."\
155
+ + "\nЕсли данных недостаточно, напиши, что нужно уточнить."\
156
+ + "\nТон деловой, по-русски. Без медицинских диагнозов и запугивания."\
157
  + f"\nИмя клиента: {state.client.name}. Электронная почта: {state.client.email}. Формат: {state.client.preferred_format}."\
158
+ + f"\nОтветы клиента:\n{convo}"\
159
+ + "\nВерни только отчёт, без пояснений."
160
  )
161
 
162
  def _topic_keys(self, block: BlockKey) -> list[str]: