File size: 2,022 Bytes
b20698b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Stage 4: Farmer Translator - Natural Language Output
"""

import json
from typing import Dict, Any
from openai import OpenAI


class FarmerTranslator:
    """Stage 4: Convert technical data to farmer-friendly advice"""

    def __init__(self, client: OpenAI):
        self.client = client

    def translate(self, query: str, compiled_data: Dict[str, Any], location: Dict[str, Any]) -> str:
        """
        Generate farmer-friendly response from technical data
        
        Returns:
            str: Natural language advice for farmers
        """
        data_summary = json.dumps(compiled_data.get("data", {}), indent=2)

        system_prompt = f"""You are an agricultural advisor for farmers in {location['name']}.

Task: Convert technical data into clear, actionable advice.

Guidelines:
1. Use simple language (avoid jargon)
2. Provide specific, actionable recommendations
3. Include risk levels (LOW/MODERATE/HIGH) when relevant
4. Explain WHY you're making recommendations
5. If data is missing, acknowledge it but provide useful advice

Structure:
- Clear summary
- Current conditions
- Risk assessment (if applicable)
- Specific recommendations
- Action items

Data from {len(compiled_data.get('successful_servers', []))} sources:
{data_summary}
"""

        if compiled_data.get("failed_servers"):
            system_prompt += f"\n\nNote: Some sources failed: {compiled_data['failed_servers']}"
            system_prompt += "\nWork with available data, note limitations."

        try:
            response = self.client.chat.completions.create(
                model="gpt-4o",
                messages=[
                    {"role": "system", "content": system_prompt},
                    {"role": "user", "content": f"Farmer query: {query}\n\nProvide advice based on the data."}
                ],
                temperature=0.7
            )

            return response.choices[0].message.content

        except Exception as e:
            return f"⚠️ Unable to generate advice: {str(e)}"