Closed-loop account-intelligence system: harvest -> relevance filter vs. Capability Library -> synthesize -> score -> deliver -> feedback. - 40-capability Broadcom + VMware library - Live Exa.ai news connector with hard free-plan request ceilings - Provider-agnostic LLM layer (Gemini/Anthropic) with offline mock fallback - LLM confidence wired into composite scoring + low-confidence floor - 7-account pilot list Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
25 lines
878 B
Python
25 lines
878 B
Python
"""Job posting harvester (v1 placeholder -> JSearch/Adzuna in production)."""
|
|
from __future__ import annotations
|
|
|
|
from ..types import RawSignal
|
|
from . import account_fixture
|
|
|
|
|
|
def harvest(account: dict) -> list[RawSignal]:
|
|
out: list[RawSignal] = []
|
|
for item in account_fixture(account["accountId"]).get("jobs", []):
|
|
count = item.get("count", 1)
|
|
prefix = f"[{count} openings] " if count > 1 else ""
|
|
out.append(
|
|
RawSignal(
|
|
account_id=account["accountId"],
|
|
source="jobs",
|
|
signal_type="hiring_surge" if count > 1 else "job_posting",
|
|
content=f"{prefix}{item['title']}: {item['content']}",
|
|
published_at=item["publishedAt"],
|
|
url=item["url"],
|
|
extra={"title": item["title"], "count": count},
|
|
)
|
|
)
|
|
return out
|