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