On-demand Scout service (replaces the nightly aggregator): - FastAPI agent-mesh service; card name "matchmaking-service" (HTTP /a2a/tasks + Redis-stream worker matching the sibling-service pattern) - run_search: parallel multi-board sweep (Naukri/blackfalcondata + Foundit + LinkedIn), city-filtered at the board, cheapest-per-result first - per-board adapters + normalizers -> ScoutJob with rich read-only details and offsite apply links; recall mode + MVQ guard - result cache for dev replay ($0); per-board cost knobs; retry-on-5xx - research/: engine design, board cost economics, India-actor shortlist, POC
24 lines
699 B
Python
24 lines
699 B
Python
"""
|
|
Adapter registry. pick_adapter(url) returns the first specialized adapter that claims the URL,
|
|
else the GenericAdapter (the master key's catch-all). Add new specialized adapters to _SPECIALIZED.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from .base import Adapter
|
|
from .generic import GenericAdapter
|
|
from .ashby import AshbyAdapter
|
|
|
|
# Specialized adapters, checked in order. Generic is the fallback.
|
|
_SPECIALIZED: list[Adapter] = [
|
|
AshbyAdapter(),
|
|
# GreenhouseAdapter(), LeverAdapter(), WorkdayAdapter(), ... ← grow here
|
|
]
|
|
_GENERIC = GenericAdapter()
|
|
|
|
|
|
def pick_adapter(url: str) -> Adapter:
|
|
for a in _SPECIALIZED:
|
|
if a.matches(url):
|
|
return a
|
|
return _GENERIC
|