Extract entities from the latest exchange into the knowledge graph (the original's /knowledge auto-learning). Best-effort; gated by the flag.
(self)
| 547 | return "" |
| 548 | |
| 549 | def _record_knowledge(self) -> None: |
| 550 | """Extract entities from the latest exchange into the knowledge graph |
| 551 | (the original's /knowledge auto-learning). Best-effort; gated by the flag.""" |
| 552 | if not self._knowledge_enabled or self.session is None: |
| 553 | return |
| 554 | try: |
| 555 | from src.knowledge import KnowledgeGraph |
| 556 | |
| 557 | if self._knowledge is None: |
| 558 | self._knowledge = KnowledgeGraph.load() |
| 559 | msgs = self.session.conversation.messages |
| 560 | text = "\n".join(self._message_text(m) for m in msgs[-2:]) # last user+assistant |
| 561 | recorded = False |
| 562 | if self._knowledge_semantic and self.provider is not None: |
| 563 | from src.knowledge import extract_entities_semantic |
| 564 | |
| 565 | ents = extract_entities_semantic(text, self.provider) |
| 566 | for name, etype in ents: |
| 567 | self._knowledge.add(name, etype, now=time.time()) |
| 568 | recorded = bool(ents) |
| 569 | if not recorded: # heuristic (default, and fallback if semantic yields nothing) |
| 570 | recorded = bool(self._knowledge.record_from_text(text, now=time.time())) |
| 571 | if recorded: |
| 572 | self._knowledge.save() |
| 573 | except Exception: # noqa: BLE001 — knowledge must never break a turn |
| 574 | logger.debug("[agent-server] knowledge record failed", exc_info=True) |
| 575 | |
| 576 | def _do_set_provider(self, request_id: object, name: object) -> None: |
| 577 | """Switch the LLM provider mid-session (the original's /provider). Rebuilds |
no test coverage detected