(citation: Dict[str, Any])
| 4397 | lowered_node_id = node_id.lower() |
| 4398 | exact = next( |
| 4399 | ( |
| 4400 | hit |
| 4401 | for hit in hits |
| 4402 | if str(hit.get("node_id") or "").lower() == lowered_node_id |
| 4403 | or str(hit.get("title") or "").lower() == lowered_title |
| 4404 | ), |
| 4405 | None, |
| 4406 | ) |
| 4407 | node = exact or (hits[0] if hits else None) |
| 4408 | |
| 4409 | if not node: |
| 4410 | unresolved.append({"title": title, "node_id": node_id}) |
| 4411 | continue |
| 4412 | |
| 4413 | resolved_node_id = str(node.get("node_id") or "").strip() |
| 4414 | if not resolved_node_id or resolved_node_id in seen_nodes: |
| 4415 | continue |
| 4416 | seen_nodes.add(resolved_node_id) |
| 4417 | resolved_nodes.append(node) |
| 4418 | payload = _wiki_node_payload(node) |
| 4419 | payload["mention"] = title or node.get("title") or resolved_node_id |
| 4420 | payload["selected"] = True |
| 4421 | resolved_payloads.append(payload) |
| 4422 | |
| 4423 | return resolved_nodes, resolved_payloads, unresolved |
| 4424 | |
| 4425 | |
| 4426 | def _question_route(question: str, scope: str, resolved_mentions: List[Dict[str, Any]]) -> Tuple[str, str]: |
no test coverage detected