cjber's picture
refactor to use langgraph + dagster
a9ae09a
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
from src.common.settings import cfg
_ = load_dotenv()
class GradeDocuments(BaseModel):
"""Binary score for relevance check on retrieved documents."""
binary_score: str = Field(
description="Documents are relevant to the query, 'yes' or 'no'"
)
llm = ChatOpenAI(model=cfg.model.llm, temperature=0)
structured_llm_grader = llm.with_structured_output(GradeDocuments)
system = """
You are a grader assessing relevance of a retrieved document to a user query. \n
It does not need to be a stringent test. The goal is to filter out erroneous retrievals. \n
If the document contains keyword(s) or semantic meaning related to the user query, grade it as relevant. \n
Give a binary score 'yes' or 'no' score to indicate whether the document is relevant to the query.
"""
grade_prompt = ChatPromptTemplate.from_messages(
[
("system", system),
("human", "Retrieved document: \n\n {document} \n\n User query: {query}"),
]
)
retrieval_grader = grade_prompt | structured_llm_grader