gaia / utils /summary.py
Rim BACCOUR
add prompt to compare both scenarii with and without ombrage
9c23216 unverified
raw
history blame
3.23 kB
import os
import pandas as pd
from datetime import datetime
from dotenv import load_dotenv
from langchain_core.output_parsers import StrOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from prompts.summary_prompt import (
meterological_data_summary_prompt,
agricultural_yield_comparison_prompt
)
load_dotenv()
def get_meterological_summary(scenario: str, temperature_df: pd.DataFrame, rain_df: pd.DataFrame, irradiance_df: pd.DataFrame) -> str:
today = datetime.today().strftime("%Y/%m/%d")
temp_data = temperature_df.head(len(temperature_df)).to_string(index=False)
rain_data = rain_df.head(len(rain_df)).to_string(index=False)
irradiance_data = irradiance_df.head(len(irradiance_df)).to_string(index=False)
llm = ChatOpenAI(
model="gpt-4o",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
api_key=os.environ.get("OPENAI_API_KEY")
)
output_parser = StrOutputParser()
prompt = ChatPromptTemplate.from_messages(
[
("system", meterological_data_summary_prompt),
("human", "Je veux un résumé de ces prévisions métérologique: les données de temperature {temp_data}, les données de précipitation {rain_data}, les données de radiance solaire {irradiance_data}")
]
)
chain = prompt | llm | output_parser
response = chain.invoke({
"scenario": scenario,
"today": today,
"temp_data": temp_data,
"rain_data": rain_data,
"irradiance_data": irradiance_data
})
return output_parser.parse(response)
def get_agricultural_yield_comparison(culture: str, region:str, agri_yield_df: pd.DataFrame, soil_df: pd.DataFrame, climate_df: pd.DataFrame, water_df: pd.DataFrame):
agricultural_yield = agri_yield_df.head(len(agri_yield_df)).to_string(index=False)
soil_data = soil_df.head(len(soil_df)).to_string(index=False)
water_data = water_df.head(len(water_df)).to_string(index=False)
climate_data = climate_df.head(len(climate_df)).to_string(index=False)
llm = ChatOpenAI(
model="gpt-4o",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
api_key=os.environ.get("OPENAI_API_KEY")
)
output_parser = StrOutputParser()
prompt = ChatPromptTemplate.from_messages(
[
("system", agricultural_yield_comparison_prompt),
("human", "Je suis agriculteur et je cultive de la {culture} à {region}. Voilà les caractéristiques du sol dans ma région {soil_data} et voilà l'historique et projections du rendement ma culture avec et sans ombrage {agricultural_yield}. J'ai aussi les donnés historiques et prévisions du stress hydrique {water_data} et des données climatiques {climate_data}. " )
]
)
chain = prompt | llm | output_parser
response = chain.invoke({
"culture": culture,
"region": region,
"soil_data": soil_data,
"water_data": water_data,
"climate_data": climate_data,
"agricultural_yield": agricultural_yield
})
return output_parser.parse(response)