Download climateqa/engine/chains/chitchat_categorization.py from Ekimetrics/climate-question-answering: direct link, hf CLI and curl.
- Browser
- Download file 1.75 kB
-
https://huggingface.co/spaces/Ekimetrics/climate-question-answering/resolve/5bb55d9e89f932b6b2b42879aa18aeff00e051b9/climateqa/engine/chains/chitchat_categorization.py
- Command line
-
hf download hf://spaces/Ekimetrics/climate-question-answering@5bb55d9e89f932b6b2b42879aa18aeff00e051b9/climateqa/engine/chains/chitchat_categorization.py
-
curl -L -o chitchat_categorization.py https://huggingface.co/spaces/Ekimetrics/climate-question-answering/resolve/5bb55d9e89f932b6b2b42879aa18aeff00e051b9/climateqa/engine/chains/chitchat_categorization.py
1.75 kB
| from langchain_core.pydantic_v1 import BaseModel, Field | |
| from typing import List | |
| from typing import Literal | |
| 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 IntentCategorizer(BaseModel): | |
| """Analyzing the user message input""" | |
| environment: bool = Field( | |
| description="Return 'True' if the question relates to climate change, the environment, nature, etc. (Example: should I eat fish?). Return 'False' if the question is just chit chat or not related to the environment or climate change.", | |
| ) | |
| def make_chitchat_intent_categorization_chain(llm): | |
| openai_functions = [convert_to_openai_function(IntentCategorizer)] | |
| llm_with_functions = llm.bind(functions = openai_functions,function_call={"name":"IntentCategorizer"}) | |
| prompt = ChatPromptTemplate.from_messages([ | |
| ("system", "You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided"), | |
| ("user", "input: {input}") | |
| ]) | |
| chain = prompt | llm_with_functions | JsonOutputFunctionsParser() | |
| return chain | |
| def make_chitchat_intent_categorization_node(llm): | |
| categorization_chain = make_chitchat_intent_categorization_chain(llm) | |
| def categorize_message(state): | |
| output = categorization_chain.invoke({"input": state["user_input"]}) | |
| print(f"\n\nChit chat output intent categorization: {output}\n") | |
| state["search_graphs_chitchat"] = output["environment"] | |
| print(f"\n\nChit chat output intent categorization: {state}\n") | |
| return state | |
| return categorize_message | |