File size: 5,381 Bytes
b68fd85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"""
Offline rule-based Tamil intent matcher — mirrors IntentParser.java from the Android app.
Add more keyword variants as you test with real farmer speech.
"""

INTENT_KEYWORDS = {
    "SOIL_MOISTURE_QUERY": ["மண் ஈரப்பதம்", "மண்ணின் ஈரப்பதம்", "நிலத்தில் தண்ணீர்", "மண் எப்படி"],
    "TEMPERATURE_QUERY": ["வெப்பநிலை", "சூடு எவ்வளவு", "எவ்வளவு சூடு"],
    "HUMIDITY_QUERY": ["காற்றின் ஈரப்பதம்", "ஈரப்பதம் எவ்வளவு"],
    "PUMP_ON_COMMAND": ["பம்ப் ஆன்", "மோட்டார் ஆன்", "தண்ணீர் விடு", "பம்ப் இயக்கு"],
    "PUMP_OFF_COMMAND": ["பம்ப் ஆஃப்", "மோட்டார் ஆஃப்", "தண்ணீர் நிறுத்து", "பம்ப் நிறுத்து"],
    "PUMP_STATUS_QUERY": ["பம்ப் இயங்குகிறதா", "மோட்டார் நிலை", "பம்ப் நிலை"],
    "WEATHER_QUERY": ["வானிலை", "மழை பெய்யுமா", "இன்று வானிலை"],
    "MARKET_PRICE_QUERY": ["சந்தை விலை", "விலை என்ன", "இன்றைய விலை"],
    "DISEASE_DETECTION_REQUEST": ["நோய் பரிசோதனை", "தாவர நோய்", "இலை பார்"],
    "CROP_RECOMMENDATION_REQUEST": ["பயிர் பரிந்துரை", "என்ன பயிர் போடலாம்", "எந்த பயிர்"],
    "GREETING": ["வணக்கம்", "ஹலோ", "எப்படி இருக்க"],
}


def parse_intent(spoken_text: str) -> str:
    """Returns the matched intent name, or 'UNKNOWN' if nothing matches."""
    if not spoken_text or not spoken_text.strip():
        return "UNKNOWN"

    normalized = spoken_text.strip()

    for intent, keywords in INTENT_KEYWORDS.items():
        for keyword in keywords:
            if keyword in normalized:
                return intent

    return "UNKNOWN"


def generate_answer(intent: str, sensor_data: dict) -> str:
    """
    Generates the Tamil spoken answer for a given intent.
    sensor_data is a dict like:
      {"soilMoisture": 45.0, "temperature": 29.5, "humidity": 60.0, "pumpStatus": False}
    """

    if intent == "SOIL_MOISTURE_QUERY":
        val = sensor_data.get("soilMoisture")
        if val is None:
            return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
        return f"மண் ஈரப்பதம் தற்போது {round(val)} சதவீதம்."

    if intent == "TEMPERATURE_QUERY":
        val = sensor_data.get("temperature")
        if val is None:
            return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
        return f"வெப்பநிலை தற்போது {round(val)} டிகிரி செல்சியஸ்."

    if intent == "HUMIDITY_QUERY":
        val = sensor_data.get("humidity")
        if val is None:
            return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
        return f"காற்றின் ஈரப்பதம் தற்போது {round(val)} சதவீதம்."

    if intent == "PUMP_STATUS_QUERY":
        pump_on = sensor_data.get("pumpStatus", False)
        return "பம்ப் தற்போது இயங்குகிறது." if pump_on else "பம்ப் தற்போது நிறுத்தப்பட்டுள்ளது."

    if intent == "PUMP_ON_COMMAND":
        sensor_data["pumpStatus"] = True
        return "பம்ப் இயக்கப்படுகிறது."

    if intent == "PUMP_OFF_COMMAND":
        sensor_data["pumpStatus"] = False
        return "பம்ப் நிறுத்தப்படுகிறது."

    if intent == "WEATHER_QUERY":
        return "வானிலை தகவலை இப்போது பெறுகிறேன். (weather API integration pending)"

    if intent == "MARKET_PRICE_QUERY":
        return "சந்தை விலை தகவலை இப்போது பெறுகிறேன். (market API integration pending)"

    if intent == "DISEASE_DETECTION_REQUEST":
        return "தாவர நோய் கண்டறிதலுக்கு புகைப்படம் எடுக்கவும்."

    if intent == "CROP_RECOMMENDATION_REQUEST":
        return "பயிர் பரிந்துரைக்கு மண் தகவலை உள்ளிடவும்."

    if intent == "GREETING":
        return "வணக்கம்! நான் உங்கள் விவசாய உதவியாளர். எப்படி உதவ முடியும்?"

    return "மன்னிக்கவும், எனக்கு புரியவில்லை. மீண்டும் சொல்லுங்கள்."