from typing import List | |
from typing import Literal | |
from langchain_core.pydantic_v1 import BaseModel, Field | |
from langchain.prompts import ChatPromptTemplate | |
from langchain_core.utils.function_calling import convert_to_openai_function | |
from langchain.output_parsers.openai_functions import JsonOutputFunctionsParser | |
class KeywordsOutput(BaseModel): | |
"""Analyzing the user query to get keywords for a search engine""" | |
keywords: list = Field( | |
description=""" | |
Generate 1 or 2 relevant keywords from the user query to ask a search engine for scientific research papers. Answer only with English keywords. | |
Do not use special characters or accents. | |
Example: | |
- "What is the impact of deep sea mining ?" -> ["deep sea mining"] | |
- "Quel est l'impact de l'exploitation minière en haute mer ?" -> ["deep sea mining"] | |
- "How will El Nino be impacted by climate change" -> ["el nino"] | |
- "Is climate change a hoax" -> [Climate change","hoax"] | |
""" | |
) | |
def make_keywords_chain(llm): | |
functions = [convert_to_openai_function(KeywordsOutput)] | |
llm_functions = llm.bind(functions = functions,function_call={"name":"KeywordsOutput"}) | |
chain = llm_functions | JsonOutputFunctionsParser() | |
return chain |