Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An AI-assisted recruiting platform for resume screening, candidate ranking, skill-gap analysis, interview-question generation, and employee attrition prediction.
Recruiters create a job, batch-upload candidate resumes, and get back a ranked, explainable fit score for each candidate — never a bare number, always the full breakdown. From there they can inspect a candidate's skill gaps, generate resume-grounded interview questions, and separately check an employee's predicted attrition risk. Aggregate analytics summarize scores, skills, and attrition across the system.README 전문 보기 ↗An AI-assisted recruiting platform for resume screening, candidate ranking, skill-gap analysis, interview-question generation, and employee attrition prediction.
Recruiters create a job, batch-upload candidate resumes, and get back a ranked, explainable fit score for each candidate — never a bare number, always the full breakdown. From there they can inspect a candidate's skill gaps, generate resume-grounded interview questions, and separately check an employee's predicted attrition risk. Aggregate analytics summarize scores, skills, and attrition across the system.
Backend: FastAPI, SQLAlchemy 2.0, Alembic, Pydantic v2, PostgreSQL 16 (SQLite by default for local development)
ML / NLP: spaCy, sentence-transformers, scikit-learn, imbalanced-learn (SMOTE), pdfplumber, python-docx
LLM: OpenAI-compatible client (default configuration targets Groq) or Anthropic, behind a single provider-agnostic interface
Frontend ("HireIntel"): React 19, Vite, TypeScript, Tailwind CSS v4, TanStack Query, React Router v7, Recharts
Infrastructure: Docker, Docker Compose (backend + PostgreSQL + a migration service), GitHub Actions CI
See Architecture.md for the full layering, data model, and API contract.
No screenshots are included yet — none have been captured as of this document. Run the application locally or via Docker Compose (see Setup) to see it live.
Every figure below was produced by a rerunnable script or a recorded, committed evaluation sheet — see docs/EVALUATION.md for full methodology, per-metric interpretation, and source scripts. Nothing here is estimated or rounded favorably.
Measured against real_eval_set (n=12 real resumes), current extraction code plus corrected labels — this supersedes the older Phase 5/6 measurements in docs/EVALUATION.md, which were taken before a section-boundary bug fix and a label-arithmetic correction:
| Field | Result |
|---|---|
| Name | 11/12 (91.7%) |
| 12/12 (100%) | |
| Phone | 12/12 (100%) |
| Education level | 11/12 (91.7%) |
| Experience years | 12/12 (100%) |
Measured against 30 resumes with an independently human-labelled gold-skill list (89 total gold skills):
Measured against 51 labelled candidate/job pairs (3 real jobs × 17 candidates each), human relevance grades 0–3:
| Method | NDCG (overall) |
|---|---|
| TF-IDF | 0.854 |
| Embedding | 0.847 |
The near-equal overall average conceals opposite-direction failure modes and should not be read as "the methods agree." Embedding wins decisively on one job (0.950 vs. 0.718), TF-IDF wins decisively on another (0.890 vs. 0.615). TF-IDF has a demonstrated hard-zero tie-breaking problem; embedding has a demonstrated baseline-similarity inversion that ranked one genuinely strong candidate below several irrelevant ones.
A separate, optional "semantic" skill-matching fallback (embedding similarity between a required skill and a candidate's stated skills) was measured against 20 human-labelled pairs. Best achievable accuracy across every possible threshold is 75%, not a floor to tune upward from — the underlying signal measures topical closeness, not skill equivalence (e.g., PostgreSQL↔MySQL scores higher than the production threshold despite being different products). The feature ships disabled (THRESHOLD_VALIDATED = False) regardless of configuration.
Under the shipped default (SCORING_METHOD=tfidf), the same 51-pair evaluation set shows all 51/51 candidates landing in the weak_match band regardless of actual relevance grade — the band field currently carries no discriminating information in that mode. Embedding mode reaches moderate_match for only 5 of 51. This is documented as a live defect, not a cosmetic gap; thresholds have not been changed pending a larger, more diverse evaluation set.
Model: Logistic Regression + SMOTE, sigmoid-calibrated (CalibratedClassifierCV). This is the calibrated model actually served in production, at decision threshold 0.2005 — not the uncalibrated model's threshold-0.550 numbers, which appear nearby in docs/EVALUATION.md and are easy to confuse with these (0.369 vs. 0.373 precision, 0.473 vs. 0.477 F1). Sealed test set (294 rows, 47 positive), opened once after every modeling decision was fixed from training/out-of-fold evidence:
| Metric | Value |
|---|---|
| Precision | 0.373 |
| Recall | 0.660 (31/47) |
| F1 | 0.477 |
| Brier score | 0.1030 |
| ROC-AUC | 0.7883 |
Risk tiers (Low / Medium / High) are a frozen, ranking-derived cut over the calibrated probability distribution, not fixed absolute-probability bands: High ≥ 0.3671, Medium ≥ 0.2270. Protected attributes (gender, marital status) are excluded from the feature set entirely.
15 real, LLM-generated questions were rated 1–5 on relevance, specificity, technical quality, and resume grounding. Overall mean 4.22/5 across all four dimensions; relevance drops to 2.29/5 for a deliberately profession-mismatched test candidate (the expected, correct signal — grounded, specific questions can still be the wrong questions for the role). These ratings are AI-assisted, entered at the project owner's explicit direction — not the independent human rating pass the product requirements specify. That pass remains outstanding.
services/+ml/ specifically, 100% for the API route layer.random_state=42 throughout).alembic upgrade head migration against it (verified by querying for real tables afterward), starts the backend, confirms /health reports a live database connection, confirms imbalanced-learn imports inside the running container, and exercises a real authenticated POST /attrition/predict request that correctly returns 503/ATTRITION_MODEL_MISSING on a fresh checkout with no model artifact present. This workflow is the authoritative Docker verification for this project — see Limitations.Full instructions — prerequisites, backend, attrition model artifacts, frontend, and a Docker Compose alternative — are in docs/SETUP.md. In short: pip install -r backend/requirements.txt, copy .env.example to .env, alembic upgrade head, uvicorn app.main:app; or docker compose up from the repository root.
Full endpoint reference, request/response shapes, and the standard error envelope are in docs/API.md. Base path /api/v1; every non-2xx response uses the same {"error": {"code", "message", "details"}} shape.
.env is gitignored, .env.example carries only empty placeholders; the Docker image runs as a non-root user and never bakes in a .env file.imbalanced-learn imports successfully inside the container and, separately, that the API correctly returns 503/ATTRITION_MODEL_MISSING when no model artifact is present — it has never verified an actual model load, because the model artifact (gitignored) is never present in that environment.Interview-question generation sends the candidate's full resume text, including their name, email address, and phone number where present, to the configured LLM provider (an OpenAI-compatible endpoint or Anthropic, depending on configuration). This happens only when a recruiter explicitly requests question generation for a specific candidate — resume text is not sent to any LLM provider as part of upload, parsing, scoring, or any other operation.
This project defines 17 phases (Phase 0 through Phase 16). 16 of 17 phases are complete. Phase 16 — Docker, deployment, and this README — is partially complete, not finished:
docs/SETUP.md — done, verified against a fresh virtual environment and a fresh frontend install.Verified deployment-readiness (a container that builds, migrates, starts, and degrades correctly, proven on clean-Linux CI) is not the same claim as an actual production deployment, and this document does not conflate the two.