Spaces:
Sleeping
Sleeping
from flask import Flask, request, jsonify | |
from transformers import pipeline | |
from simple_salesforce import Salesforce | |
import datetime | |
import os | |
from dotenv import load_dotenv | |
# Load environment variables from .env file (Salesforce creds, etc) | |
load_dotenv() | |
app = Flask(__name__) | |
# Initialize Hugging Face text generation pipeline | |
generator = pipeline("text-generation", model="distilgpt2") | |
# Initialize Salesforce connection | |
sf = Salesforce( | |
username=os.getenv("SF_USERNAME"), | |
password=os.getenv("SF_PASSWORD"), | |
security_token=os.getenv("SF_SECURITY_TOKEN") | |
) | |
def generate_ai_data(): | |
try: | |
data = request.json | |
supervisor_id = data.get('supervisor_id') | |
project_id = data.get('project_id') | |
if not supervisor_id or not project_id: | |
return jsonify({"status": "error", "message": "Missing supervisor_id or project_id"}), 400 | |
# Fetch supervisor data from Salesforce | |
supervisor_data = sf.Supervisor_Profile__c.get(supervisor_id) | |
# Fetch project data from Salesforce | |
project_data = sf.Project_Details__c.get(project_id) | |
# Construct prompt for AI | |
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']}." | |
) | |
# Generate AI response | |
ai_response = generator(prompt, max_length=500, num_return_sequences=1)[0]['generated_text'] | |
# For demo: Simple static parsing; customize as needed | |
daily_checklist = "1. Conduct safety inspection of site (Safety, Pending)" | |
suggested_tips = "1. Prioritize safety checks due to upcoming weather risks." | |
risk_alerts = "Risk of delay: Rain expected on May 22, 2025." | |
upcoming_milestones = project_data['Milestones__c'].split(';')[0] | |
performance_trends = "Task completion rate: 75% this week (initial estimate)." | |
# Save AI data to Salesforce object 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': datetime.datetime.now().strftime('%Y-%m-%d') | |
} | |
sf.AI_Coaching_Data__c.create(ai_data) | |
# Optionally generate a performance report and save to Report_Download__c | |
report_data = { | |
'Supervisor_ID__c': supervisor_id, | |
'Project_ID__c': project_id, | |
'Report_Type__c': 'Performance', | |
'Report_Data__c': f"Performance Report: Task completion rate: 75% this week. Engagement score: 80%.", | |
'Download_Link__c': 'https://salesforce-site.com/reports/RPT-0001.pdf', | |
'Generated_Date__c': datetime.datetime.now().strftime('%Y-%m-%d') | |
} | |
sf.Report_Download__c.create(report_data) | |
return jsonify({ | |
"status": "success", | |
"message": "AI coaching data and report generated successfully", | |
"ai_data": ai_data, | |
"report_data": report_data | |
}) | |
except Exception as e: | |
return jsonify({"status": "error", "message": str(e)}), 500 | |
if __name__ == "__main__": | |
# Run Flask app on all interfaces, port 7860 (or your choice) | |
app.run(host="0.0.0.0", port=7860) | |