Spaces:
Sleeping
Sleeping
| """Blueprint mapping administrative topics to the right staff contacts.""" | |
| from __future__ import annotations | |
| import re | |
| from typing import Any, List | |
| from .base import AnalysisContext, Blueprint, BlueprintResult, Fact | |
| class StaffSupportBlueprint(Blueprint): | |
| """Suggest staff contacts for administrative questions.""" | |
| name = "staff_support" | |
| def run(self, context: AnalysisContext, **kwargs: Any) -> BlueprintResult: | |
| query = (kwargs.get("topic") or kwargs.get("need") or kwargs.get("keyword") or "").strip() | |
| if not query: | |
| return BlueprintResult(self.name, kwargs, facts=[], notes=["Let me know what kind of help you need (e.g., reimbursements, travel, advising)."]) | |
| staff = context.catalog.try_get("staff") | |
| if not staff: | |
| return BlueprintResult(self.name, kwargs, facts=[], notes=["Staff directory is unavailable right now."]) | |
| query_terms = [term for term in re.split(r"[^a-z0-9]+", query.lower()) if term] | |
| matches = [] | |
| for row in staff.records: | |
| haystack = " ".join(str(row.get(field, "")).lower() for field in ("Role", "Title")) | |
| if all(term in haystack for term in query_terms): | |
| matches.append(row) | |
| facts: List[Fact] = [] | |
| origin = staff.origin | |
| for row in matches: | |
| facts.append( | |
| Fact( | |
| subject=row.get("Name", "Unknown"), | |
| predicate="staff_support", | |
| value={ | |
| "title": row.get("Title"), | |
| "role": row.get("Role"), | |
| "location": row.get("Room Location"), | |
| }, | |
| source=origin, | |
| confidence=0.85, | |
| ) | |
| ) | |
| notes: List[str] = [] | |
| if not facts: | |
| notes.append(f"I couldn't find a staff contact that mentions '{query}'.") | |
| return BlueprintResult(self.name, kwargs, facts=facts, notes=notes) | |