File size: 2,142 Bytes
5d94b57
9f8186b
 
93885cf
9f8186b
 
 
93885cf
9f8186b
 
 
 
 
 
93885cf
9f8186b
 
 
 
 
 
 
93885cf
c9f8cf6
ae4a9b6
9f8186b
93885cf
9f8186b
b1711fb
9f8186b
 
 
 
b1711fb
93885cf
 
 
 
9f8186b
 
 
 
93885cf
9f8186b
 
 
93885cf
 
cc17c3b
 
93885cf
 
 
 
cc17c3b
93885cf
cc17c3b
93885cf
 
 
cc17c3b
93885cf
 
 
cc17c3b
93885cf
 
 
 
cc17c3b
93885cf
cc17c3b
549f944
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
from flask import Flask, request, jsonify
from langchain_community.llms import LlamaCpp
from sentence_transformers import SentenceTransformer
from transformers import AutoModel
import torch
from torch.nn.functional import cosine_similarity
import os 

app = Flask(__name__)

n_gpu_layers = 0
n_batch = 1024

llm = LlamaCpp(
    model_path="Phi-3-mini-4k-instruct-q4.gguf",  
    temperature=0.1,
    n_gpu_layers=n_gpu_layers,
    n_batch=n_batch,
    verbose=True,
    n_ctx=4096
)

# Initializing sentence transformer model
model = SentenceTransformer('sentence-transformers/paraphrase-TinyBERT-L6-v2')

file_size = os.stat('Phi-3-mini-4k-instruct-q4.gguf')
print("Model size: ", file_size.st_size, "bytes")


@app.route('/cv', methods=['POST'])
def get_skills():
    cv_body = request.json.get('cv_body')

    output = llm(
        f"\n{cv_body}\nCan you list the skills mentioned in the CV?",
        max_tokens=256,  
        stop=[""], 
        echo=True,  
    )

    return jsonify({'skills': output})


@app.get('/')
def health():
    return jsonify({'status': 'Worked'})


@app.route('/compare', methods=['POST'])
def compare():
    employee_skills = request.json.get('employee_skills')
    jobs_skills = request.json.get('jobs_skills')

    # Validation
    if not isinstance(jobs_skills, list) or not all(isinstance(skill, str) for skill in jobs_skills):
        raise ValueError("jobs_skills must be a list of strings")

    # Encoding skills into embeddings
    job_embeddings = model.encode(jobs_skills)
    employee_embeddings = model.encode(employee_skills)

    # Computing cosine similarity between employee skills and each job
    similarity_scores = []
    employee_embeddings_tensor = torch.from_numpy(employee_embeddings).unsqueeze(0)

    for i, job_e in enumerate(job_embeddings):
        job_e_tensor = torch.from_numpy(job_e).unsqueeze(0)
        similarity_score = cosine_similarity(employee_embeddings_tensor, job_e_tensor, dim=1)
        similarity_scores.append({"job": jobs_skills[i], "similarity_score": similarity_score.item()})

    return jsonify(similarity_scores)
if __name__ == '__main__':
    app.run()