| # 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 | |
| # # https://livingdatalab.com/posts/2023-11-05-openai-function-calling-with-langchain.html | |
| # class Location(BaseModel): | |
| # country:str = Field(...,description="The country if directly mentioned or inferred from the location (cities, regions, adresses), ex: France, USA, ...") | |
| # location:str = Field(...,description="The specific place if mentioned (cities, regions, addresses), ex: Marseille, New York, Wisconsin, ...") | |
| # class QueryAnalysis(BaseModel): | |
| # """Analyzing the user query""" | |
| # language: str = Field( | |
| # description="Find the language of the query in full words (ex: French, English, Spanish, ...), defaults to English" | |
| # ) | |
| # intent: str = Field( | |
| # enum=[ | |
| # "Environmental impacts of AI", | |
| # "Geolocated info about climate change", | |
| # "Climate change", | |
| # "Biodiversity", | |
| # "Deep sea mining", | |
| # "Chitchat", | |
| # ], | |
| # description=""" | |
| # Categorize the user query in one of the following category, | |
| # Examples: | |
| # - Geolocated info about climate change: "What will be the temperature in Marseille in 2050" | |
| # - Climate change: "What is radiative forcing", "How much will | |
| # """, | |
| # ) | |
| # sources: List[Literal["IPCC", "IPBES", "IPOS"]] = Field( | |
| # ..., | |
| # description=""" | |
| # Given a user question choose which documents would be most relevant for answering their question, | |
| # - IPCC is for questions about climate change, energy, impacts, and everything we can find the IPCC reports | |
| # - IPBES is for questions about biodiversity and nature | |
| # - IPOS is for questions about the ocean and deep sea mining | |
| # """, | |
| # ) | |
| # date: str = Field(description="The date or period mentioned, ex: 2050, between 2020 and 2050") | |
| # location:Location | |
| # # query: str = Field( | |
| # # description = """ | |
| # # Translate to english and reformulate the following user message to be a short standalone question, in the context of an educational discussion about climate change. | |
| # # The reformulated question will used in a search engine | |
| # # By default, assume that the user is asking information about the last century, | |
| # # Use the following examples | |
| # # ### Examples: | |
| # # La technologie nous sauvera-t-elle ? -> Can technology help humanity mitigate the effects of climate change? | |
| # # what are our reserves in fossil fuel? -> What are the current reserves of fossil fuels and how long will they last? | |
| # # what are the main causes of climate change? -> What are the main causes of climate change in the last century? | |
| # # Question in English: | |
| # # """ | |
| # # ) | |
| # openai_functions = [convert_to_openai_function(QueryAnalysis)] | |
| # llm2 = llm.bind(functions = openai_functions,function_call={"name":"QueryAnalysis"}) |