frontend-candidate-explorer / src /lib /scoring-service.ts
Yvonne Priscilla
update for fix implement agentic
f59d2a5
// lib/scoring-service.ts
import { authFetch } from "@/lib/api"
import { CalculateWeightPayload, WeightBody } from "@/types/calculate"
import { FilterFormValues } from "@/types/candidate-table"
const BASE_URL = "https://byteriot-candidateexplorer.hf.space/CandidateExplorer/agentic"
function toFilterBody(filters: FilterFormValues) {
return {
gpa_edu_1: filters.educations[0]?.gpa || null,
univ_edu_1: filters.educations[0]?.university || null,
major_edu_1: filters.educations[0]?.major || null,
gpa_edu_2: filters.educations[1]?.gpa || null,
univ_edu_2: filters.educations[1]?.university || null,
major_edu_2: filters.educations[1]?.major || null,
gpa_edu_3: filters.educations[2]?.gpa || null,
univ_edu_3: filters.educations[2]?.university || null,
major_edu_3: filters.educations[2]?.major || null,
domicile: filters.domicile || null,
yoe: filters.yoe || null,
hardskills: filters.hardskills?.length ? [filters.hardskills] : null,
softskills: filters.softskills?.length ? [filters.softskills] : null,
certifications: filters.certifications?.length ? [filters.certifications] : null,
business_domain: filters.businessDomain?.length ? [filters.businessDomain] : null,
}
}
function toWeightBody(value: CalculateWeightPayload): WeightBody {
const edu = (i: number) => value.education[i] ?? { university: 0, major: 0, gpa: 0 }
return {
univ_edu_1: edu(0).university / 100, major_edu_1: edu(0).major / 100, gpa_edu_1: edu(0).gpa / 100,
univ_edu_2: edu(1).university / 100, major_edu_2: edu(1).major / 100, gpa_edu_2: edu(1).gpa / 100,
univ_edu_3: edu(2).university / 100, major_edu_3: edu(2).major / 100, gpa_edu_3: edu(2).gpa / 100,
domicile: value.others.domicile / 100,
yoe: value.others.yearOfExperiences / 100,
hardskills: value.others.hardskills / 100,
softskills: value.others.softskills / 100,
certifications: value.others.certifications / 100,
business_domain: value.others.businessDomain / 100,
}
}
async function postJSON(url: string, body?: unknown) {
const res = await authFetch(url, {
method: "POST",
...(body ? { body: JSON.stringify(body) } : {}),
})
if (!res.ok) throw new Error(`Request failed: ${url} (${res.status})`)
return res.json()
}
export async function createAndCalculateScore(
filters: FilterFormValues,
weights: CalculateWeightPayload
): Promise<{ criteriaId: string }> {
const res = await postJSON("/api/agentic", {
filters,
weights
})
return { criteriaId: res.data.criteria_id }
}