File size: 3,667 Bytes
8adda05
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5bcf82b
8adda05
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import openai
import json

def initialize_openai(api_key):
    openai.api_key = api_key

def prepare_training_data(training_data):
    training_prompts = []
    for index, row in training_data.iterrows():
        job_description = row['role']
        candidateA_resume = row['candidateAResume']
        candidateB_resume = row['candidateBResume']
        candidateA_transcript = row['candidateATranscript']
        candidateB_transcript = row['candidateBTranscript']
        winner_id = row['winnerId']
        
        prompt = f"Job Description:\n{job_description}\n\nCandidate A Resume:\n{candidateA_resume}\n\nCandidate B Resume:\n{candidateB_resume}\n\nCandidate A Transcript:\n{candidateA_transcript}\n\nCandidate B Transcript:\n{candidateB_transcript}\n\nPreferred Candidate:"
        completion = f"{winner_id}"
        
        training_prompts.append({"prompt": prompt, "completion": completion})
    
    with open("training_data.jsonl", "w") as f:
        for item in training_prompts:
            f.write(json.dumps(item) + "\n")

def upload_training_data(file_path):
    with open(file_path, "rb") as f:
        response = openai.files.create(
            file=f,
            purpose='fine-tune'
        )
    print("response-upload--->", response)
    return response.id

def create_fine_tuning_job(file_id):
    response = openai.fine_tuning.jobs.create(
        training_file=file_id,
        model="gpt-3.5-turbo",
    )
    print("response-create--->",response)
    return response.fine_tuned_model

def fine_tune_model(training_data):
    # Prepare training data
    prepare_training_data(training_data)
    
    # Upload training data
    file_id = upload_training_data("training_data.jsonl")
    
    # Create fine-tuning job
    fine_tuned_model = create_fine_tuning_job(file_id)
    
    return fine_tuned_model

def extract_keywords(resume, job_description, model):
    prompt = f"Extract key skills and qualifications from the following resume based on the job description:\n\nJob Description:\n{job_description}\n\nResume:\n{resume}\n\nKey Skills and Qualifications:"
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ]
    response = openai.chat.completions.create(model=model, messages=messages, max_tokens=100)
    return response.choices[0].message.content

def rate_skills(transcript, job_description, model):
    prompt = f"Rate the skills of the candidate based on the following interview transcript and job description:\n\nJob Description:\n{job_description}\n\nInterview Transcript:\n{transcript}\n\nSkill Ratings:"
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ]
    response = openai.chat.completions.create(model=model, messages=messages, max_tokens=100)
    return response.choices[0].message.content

def compare_candidates(candidateA, candidateB, job_description, model):
    prompt = f"Based on the following details, return the candidate_id of the candidate which is the best fit for the role:\n\nJob Description:\n{job_description}\n\nCandidate A:\n{candidateA}\n\nCandidate B:\n{candidateB}\n\nPreferred Candidate:, ONLY RETURN THE CANDIDATE ID which would be of format '8ab47434-09a9-44e6-8c77-f9fd20c57765'"
    messages = [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt},
        {"role": "system", "content": "<candidate_id>"}
    ]
    response = openai.chat.completions.create(model=model, messages=messages, max_tokens=100)
    return response.choices[0].message.content