Spaces:
Sleeping
Sleeping
from typing import List, Optional | |
from langchain.chains import create_structured_output_runnable | |
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
from langchain_core.pydantic_v1 import BaseModel, Field | |
from langchain_groq import ChatGroq | |
from langchain_anthropic import ChatAnthropic | |
from dotenv import load_dotenv | |
import os | |
from utils.job_desc_pydantic import JobDescription | |
# Set the LANGCHAIN_TRACING_V2 environment variable to 'true' | |
os.environ['LANGCHAIN_TRACING_V2'] = 'true' | |
# Set the LANGCHAIN_PROJECT environment variable to the desired project name | |
os.environ['LANGCHAIN_PROJECT'] = 'JobDescriptionProject' | |
load_dotenv() | |
def extract_desc_fields(raw_job_description, model_name="llama3-70b-8192"): | |
prompt = ChatPromptTemplate.from_messages( | |
[ | |
( | |
"system", | |
"""You are an expert at identifying key aspects of job descriptions. Your task is to extract important information from a raw job description and organize it into a structured format using the ResponsibilitiesAndQualifications class. | |
When parsing the job description, your goal is to capture as much relevant information as possible in the appropriate fields of the class. | |
The structured data you extract will be used for further analysis and insights downstream, so err on the side of including more information rather than less. The key is to make the unstructured job description data more organized and manageable while still retaining all the important details. | |
""", | |
), | |
("human", "{text}"), | |
] | |
) | |
# llm = ChatAnthropic(model_name="claude-3-sonnet-20240229") | |
llm = ChatGroq(model_name="llama3-70b-8192") | |
# llm = ChatGroq(model_name="llama3-8b-8192") | |
extractor = prompt | llm.with_structured_output( | |
schema=JobDescription, | |
method="function_calling", | |
include_raw=False, | |
) | |
clean_description = extractor.invoke(raw_job_description) | |
print(clean_description) | |
return clean_description | |