Spaces:
Sleeping
Sleeping
andrewchernish1-ui
commited on
Commit
·
2802a07
1
Parent(s):
c46cc16
feat: llm report with recommendations
Browse files- app/agent.py +7 -0
- 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"
|
| 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
|
| 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]:
|