Spaces:
Runtime error
Runtime error
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, | |
historical_yield_df: pd.DataFrame, | |
forecast_yield_df: pd.DataFrame, | |
soil_df: pd.DataFrame, | |
climate_df: pd.DataFrame, | |
water_df: pd.DataFrame, | |
water_df_pv: pd.DataFrame): | |
historical_yield = historical_yield_df.head(len(historical_yield_df)).to_string(index=False) | |
agricultural_yield = forecast_yield_df.head(len(forecast_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) | |
water_data_pv = water_df_pv.head(len(water_df_pv)).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 de mon rendement {historical_yield} et projections du rendement ma culture avec et sans ombrage {agricultural_yield}. J'ai aussi les prévisions du stress hydrique sans ombrage {water_data} et avec ombrage {water_data_pv} 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, | |
"water_data_pv": water_data_pv, | |
"climate_data": climate_data, | |
"agricultural_yield": agricultural_yield, | |
"historical_yield": historical_yield | |
}) | |
return output_parser.parse(response) |