|
import os |
|
|
|
from ctransformers import AutoModelForCausalLM |
|
from langchain.llms import OpenAI |
|
from langchain.prompts import PromptTemplate |
|
|
|
AVAILABLE_MODELS_GGUF = { |
|
"TheBloke/Marcoroni-7B-v3-GGUF": { |
|
"model_file": "marcoroni-7b-v3.Q4_K_M.gguf", |
|
"model_type": "marcoroni" |
|
}, |
|
"TheBloke/Mistral-7B-Instruct-v0.2-GGUF": { |
|
"model_file": "mistral-7b-instruct-v0.2.Q4_K_M.gguf", |
|
"model_type": "mistral" |
|
}, |
|
"TheBloke/LeoScorpius-7B-GGUF": { |
|
"model_file": "leoscorpius-7b.Q4_K_M.gguf", |
|
"model_type": "leoscorpius" |
|
} |
|
} |
|
|
|
AVAILABLE_MODELS_OPENAI = [ |
|
"gpt-4-1106-preview", "gpt-4-32k", "gpt-3.5-turbo-1106", |
|
] |
|
|
|
|
|
|
|
|
|
def generate_cover_letter_open_source(job_description, resume, selected_model, context_length=8000): |
|
print(f"selected_model: {selected_model}, " |
|
f"{AVAILABLE_MODELS_GGUF[selected_model]['model_file']}, {AVAILABLE_MODELS_GGUF[selected_model]['model_type']}") |
|
print(f"context_length: {context_length}") |
|
|
|
prompt = (f"Do the following steps: " |
|
f"1. Read the following job description," |
|
f"2. Read the following resume, " |
|
f"3. Write a formal cover letter to the hiring manager for the job description based on the given resume, " |
|
|
|
|
|
f"4. Return ONLY the cover letter ONCE, nothing else. " |
|
f"Job Description: '{job_description}'. Resume: '{resume}'") |
|
|
|
|
|
|
|
llm = AutoModelForCausalLM.from_pretrained(selected_model, |
|
model_file=AVAILABLE_MODELS_GGUF[selected_model]['model_file'], |
|
model_type=AVAILABLE_MODELS_GGUF[selected_model]['model_type'], |
|
context_length=context_length, |
|
max_new_tokens=1000, |
|
reset=True, |
|
stream=True, |
|
|
|
temperature=0.5, |
|
threads=(os.cpu_count()//2) |
|
) |
|
|
|
llm_response = llm(prompt) |
|
|
|
return llm_response |
|
|
|
|
|
def generate_cover_letter_openai(job_description, resume, selected_model, openai_key=None): |
|
os.environ["OPENAI_API_KEY"] = openai_key |
|
temp = "Do the following steps: " \ |
|
"1. Read the following job description," \ |
|
"2. Read the following resume, " \ |
|
"3. Write a formal cover letter to the hiring manager for the job description based on the given resume, " \ |
|
"4. Return ONLY the cover letter ONCE, nothing else. " \ |
|
"Job Description: '{job_description}'. Resume: '{resume}'" |
|
|
|
prompt = PromptTemplate( |
|
template=temp, |
|
input_variables=["job_description", "resume"] |
|
) |
|
|
|
model = OpenAI(model_name=selected_model) |
|
|
|
_input = prompt.format(job_description=job_description, resume=resume) |
|
output = model.stream(_input) |
|
|
|
return output |
|
|