Spaces:
Build error
Build error
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) |