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) |