Files
raulgupta 89ca9ad647 Initial commit: matchmaking-v2 on-demand multi-board job-search agent
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
2026-06-18 19:22:03 +05:30

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