Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import pandas as pd | |
| import joblib | |
| import os | |
| import google.generativeai as genai | |
| # Load models | |
| try: | |
| rf_ferti_name = joblib.load("rf_ferti_name.pkl") | |
| rf_ferti_value = joblib.load("rf_ferti_value.pkl") | |
| except Exception as e: | |
| raise RuntimeError(f"Model loading failed: {e}") | |
| # Encodings | |
| soil_type_encodings = { | |
| 'Black': 0, 'Clayey': 1, 'Loamy': 2, 'Red': 3, 'Sandy': 4 | |
| } | |
| crop_type_encodings = { | |
| 'Barley': 0, 'Cotton': 1, 'Ground Nuts': 2, 'Maize': 3, 'Millets': 4, | |
| 'Oil seeds': 5, 'Other Variety': 6, 'Paddy': 7, 'Pulses': 8, 'Sugarcane': 9, | |
| 'Tobacco': 10, 'Wheat': 11 | |
| } | |
| fertilizer_name_encodings = { | |
| '10-26-26': 0, '14-35-14': 1, '15-15-15': 2, '17-17-17': 3, '20-20': 4, | |
| '20-20-20': 5, '28-28': 6, 'Ammonium sulfate': 7, 'Biofertilizer (e.g., Rhizobium)': 8, | |
| 'Calcium nitrate': 9, 'DAP': 10, 'Ferrous sulfate': 11, 'Magnesium sulfate': 12, | |
| 'Potassium chloride/Muriate of potash (MOP)': 13, | |
| 'Potassium sulfate/Sulfate of potash (SOP)': 14, 'Rock phosphate (RP)': 15, | |
| 'Single superphosphate (SSP)': 16, 'Triple superphosphate (TSP)': 17, | |
| 'Urea': 18, 'Zinc sulfate': 19 | |
| } | |
| inv_fert_name_encodings = {v: k for k, v in fertilizer_name_encodings.items()} | |
| # Setup Gemini API | |
| genai.configure(api_key=os.getenv("GEMINI_API")) | |
| model = genai.GenerativeModel("gemini-1.5-flash") | |
| def generate_ai_suggestions(fertilizer_name): | |
| prompt = ( | |
| f"For {fertilizer_name} fertilizer, generate 3β4 short suggestions. " | |
| "Each on a new line. Text should be justified and not contain special characters." | |
| ) | |
| try: | |
| response = model.generate_content(prompt) | |
| return response.text.strip() | |
| except Exception as e: | |
| return f"AI suggestion error: {str(e)}" | |
| def predict_fertilizer(temp, humidity, moisture, soil_type, crop_type, nitrogen, potassium, phosphorous): | |
| # Encode input | |
| soil_encoded = soil_type_encodings.get(soil_type, -1) | |
| crop_encoded = crop_type_encodings.get(crop_type, -1) | |
| input_df = pd.DataFrame([{ | |
| "Temperature": temp, | |
| "Humidity": humidity, | |
| "Moisture": moisture, | |
| "Nitrogen": nitrogen, | |
| "Potassium": potassium, | |
| "Phosphorous": phosphorous, | |
| "Soil Type": soil_encoded, | |
| "Crop Type": crop_encoded, | |
| }]) | |
| try: | |
| # Predict | |
| pred_name_encoded = rf_ferti_name.predict(input_df)[0] | |
| fert_name = inv_fert_name_encodings[pred_name_encoded] | |
| fert_qty = rf_ferti_value.predict(input_df)[0] | |
| except Exception as e: | |
| return f"β Model prediction failed: {str(e)}" | |
| # Gemini suggestions | |
| ai_info = generate_ai_suggestions(fert_name) | |
| result = ( | |
| f"πΎ **Recommended Fertilizer**: `{fert_name}`\n" | |
| f"π¦ **Estimated Quantity**: `{fert_qty:.2f} units`\n\n" | |
| f"π **AI Suggestions**:\n{ai_info}" | |
| ) | |
| return result | |
| # Dropdown options | |
| soil_list = list(soil_type_encodings.keys()) | |
| crop_list = list(crop_type_encodings.keys()) | |
| # Gradio Interface | |
| interface = gr.Interface( | |
| fn=predict_fertilizer, | |
| inputs=[ | |
| gr.Slider(0, 50, label="π‘οΈ Temperature (Β°C)"), | |
| gr.Slider(0, 100, label="π§ Humidity (%)"), | |
| gr.Slider(0, 100, label="π± Moisture (%)"), | |
| gr.Dropdown(soil_list, label="π§± Soil Type"), | |
| gr.Dropdown(crop_list, label="πΎ Crop Type"), | |
| gr.Number(label="π§ͺ Nitrogen Level"), | |
| gr.Number(label="π§ͺ Potassium Level"), | |
| gr.Number(label="π§ͺ Phosphorous Level") | |
| ], | |
| outputs=gr.Markdown(label="π§Ύ Result"), | |
| title="πΏ Fertilizer Recommendation System", | |
| description="Enter environmental and soil parameters to get fertilizer suggestions powered by AI.", | |
| allow_flagging="never" | |
| ) | |
| # Launch for Hugging Face | |
| interface.launch() | |