File size: 5,603 Bytes
780c251
59fdb92
 
 
2d7117e
 
8136580
780c251
 
2d7117e
 
0d3b455
2d7117e
59fdb92
49c0f36
2d7117e
8b2877d
 
 
 
 
 
 
 
 
2d7117e
780c251
 
2d7117e
 
780c251
2d7117e
8b2877d
 
 
 
 
 
2d7117e
780c251
 
 
 
 
 
 
 
 
 
 
 
 
 
2d7117e
 
 
 
 
780c251
 
 
2d7117e
 
 
 
 
780c251
 
2d7117e
780c251
 
 
 
 
 
 
2d7117e
 
780c251
 
 
2d7117e
780c251
2d7117e
780c251
2d7117e
 
 
 
 
 
 
 
 
 
780c251
2d7117e
 
 
 
 
 
 
780c251
 
 
 
 
2d7117e
 
 
780c251
2d7117e
 
 
 
780c251
2d7117e
 
780c251
2d7117e
 
780c251
2d7117e
 
8b2877d
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from flask import Flask, request, jsonify
from transformers import pipeline
from simple_salesforce import Salesforce
import datetime
import os
from dotenv import load_dotenv

app = Flask(__name__)

# Load environment variables from .env file
load_dotenv()

# Initialize Hugging Face model
generator = pipeline("text-generation", model="distilgpt2")

# Initialize Salesforce connection using environment variables
try:
    sf = Salesforce(
        username=os.getenv("SF_USERNAME"),
        password=os.getenv("SF_PASSWORD"),
        security_token=os.getenv("SF_SECURITY_TOKEN")
    )
except Exception as e:
    print(f"Error connecting to Salesforce: {str(e)}")
    sf = None

@app.route('/generate-ai-data', methods=['POST'])
def generate_ai_data():
    """
    Generate AI coaching data and reports based on supervisor and project data.
    This endpoint is called by Salesforce when a new project is created or during daily refresh.
    """
    if sf is None:
        return jsonify({
            "status": "error",
            "message": "Salesforce connection failed. Check credentials in .env file."
        }), 500

    try:
        data = request.get_json()
        supervisor_id = data['supervisor_id']
        project_id = data['project_id']
        supervisor_data = data['supervisor_data']
        project_data = data['project_data']

        # Fetch existing checklists to determine progress
        checklists = sf.query(
            f"SELECT Task_Name__c, Status__c FROM Daily_Checklist__c WHERE Project_ID__c = '{project_id}' AND Date__c = TODAY"
        )['records']
        completed_tasks = [c['Task_Name__c'] for c in checklists if c['Status__c'] == 'Completed']
        pending_tasks = [c['Task_Name__c'] for c in checklists if c['Status__c'] == 'Pending']
        completion_rate = len(completed_tasks) / (len(completed_tasks) + len(pending_tasks)) * 100 if (len(completed_tasks) + len(pending_tasks)) > 0 else 0

        # Construct prompt for AI generation
        prompt = (
            f"Generate daily checklist, tips, risk alerts, upcoming milestones, and performance trends for a "
            f"{supervisor_data['Role__c']} at {supervisor_data['Location__c']} working on project "
            f"{project_data['Name']} with milestones {project_data['Milestones__c']} and schedule "
            f"{project_data['Project_Schedule__c']}. "
            f"Current completion rate: {completion_rate:.1f}%. Completed tasks: {', '.join(completed_tasks) if completed_tasks else 'None'}. "
            f"Pending tasks: {', '.join(pending_tasks) if pending_tasks else 'None'}."
        )

        # Generate AI output
        ai_response = generator(prompt, max_length=500, num_return_sequences=1)[0]['generated_text']

        # Parse AI response (more dynamic parsing based on project progress)
        today = datetime.datetime.now().strftime('%Y-%m-%d')
        daily_checklist = (
            f"1. Review pending tasks from yesterday (General, Pending)\n"
            f"2. Conduct daily safety inspection for {project_data['Name']} (Safety, Pending)\n"
            f"3. Schedule progress meeting (General, Pending)"
        ) if not pending_tasks else (
            f"1. Complete pending task: {pending_tasks[0]} (General, Pending)\n"
            f"2. Conduct daily safety inspection for {project_data['Name']} (Safety, Pending)\n"
            f"3. Schedule progress meeting (General, Pending)"
        )
        suggested_tips = (
            f"1. Focus on completing pending tasks to improve completion rate.\n"
            f"2. Monitor weather conditions in {supervisor_data['Location__c']}.\n"
            f"3. Prepare for upcoming milestone."
        )
        risk_alerts = f"Risk of delay: Weather risks in {supervisor_data['Location__c']} on {today}."
        upcoming_milestones = project_data['Milestones__c'].split(';')[0]  # Take the first milestone
        performance_trends = f"Task completion rate: {completion_rate:.1f}% (updated {today})."

        # Save AI data to AI_Coaching_Data__c
        ai_data = {
            'Supervisor_ID__c': supervisor_id,
            'Project_ID__c': project_id,
            'Daily_Checklist__c': daily_checklist,
            'Suggested_Tips__c': suggested_tips,
            'Risk_Alerts__c': risk_alerts,
            'Upcoming_Milestones__c': upcoming_milestones,
            'Performance_Trends__c': performance_trends,
            'Generated_Date__c': today
        }
        sf.AI_Coaching_Data__c.create(ai_data)

        # Generate a report for Report_Download__c
        report_data = {
            'Supervisor_ID__c': supervisor_id,
            'Project_ID__c': project_id,
            'Report_Type__c': 'Daily Progress',
            'Report_Data__c': f"Daily Progress Report ({today}): Completion rate: {completion_rate:.1f}%. "
                             f"Pending tasks: {len(pending_tasks)}. Completed tasks: {len(completed_tasks)}.",
            'Download_Link__c': 'https://your-salesforce-site.com/reports/RPT-' + project_id + '.pdf',  # Update with actual Salesforce Site URL
            'Generated_Date__c': today
        }
        sf.Report_Download__c.create(report_data)

        return jsonify({
            "status": "success",
            "message": "AI data and report generated successfully",
            "ai_data": ai_data,
            "report_data": report_data
        })

    except Exception as e:
        return jsonify({
            "status": "error",
            "message": f"Error generating AI data: {str(e)}"
        }), 500

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7860)