{"gateway":"SimuHire Rwanda API Gateway","version":"1.0.0","port":8880,"docs":"http://localhost:8880/docs","services":{"hybrid":{"name":"Hybrid Job Recommender + ML Job Search (merged)","description":"Content (semantic-only) + collaborative-filtering (PyTorch MF) + behavior (semantic-only) hybrid job recommendations, merged in-process with the 5-level priority job search (formerly ml_search.py)- one process now serves the /hybrid/* and /search/* prefixes (see route_search below). The standalone 4-factor AI Job Matcher (/matcher/*) has been retired- ContentBasedModel's own skills/qualifications/experience_text/preferences pairs already call the exact same shared scoring functions internally, so /hybrid/score(/combined) and /hybrid/recommend already include everything it used to add. Search shares this process's SemanticEncoder instance instead of loading its own separate sentence-transformer model.","prefix":"/hybrid","internal_port":9990,"current_status":"up","log_file":"/home/ubuntu/mpuza-recommender-v1/hybrid_service.log","endpoints":["POST /hybrid/score              - Ranked jobs for a candidate_id (hybrid only)","POST /hybrid/score/combined     - The real candidate feed","POST /hybrid/recommend          - Score one candidate against one or more jobs, upserting any side inline","POST /hybrid/upsert/candidate   - Add/update one candidate directly from provided data","POST /hybrid/upsert/job         - Add/update one job directly from provided data","GET  /hybrid/jobs/sync-status   - Check whether the loaded model is in sync with the live DB","POST /hybrid/refresh            - Retrain hybrid models from current DB state","GET  /hybrid/health             - Hybrid health check","GET  /search/search?q=query     - Search jobs (5-level priority + semantic)","GET  /search/health             - Search health check","POST /search/refresh            - Refresh search job index","GET  /search/logs/all           - View all search logs"]}}}