geethareddy commited on
Commit
1e013de
·
verified ·
1 Parent(s): 58c9a81

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -5
app.py CHANGED
@@ -11,9 +11,9 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(
11
  logger = logging.getLogger(__name__)
12
 
13
  # Salesforce credentials (use environment variables for security)
14
- SF_USERNAME = os.getenv('[email protected]')
15
- SF_PASSWORD = os.getenv('Teja90325@')
16
- SF_SECURITY_TOKEN = os.getenv('clceSdBgQ30Rx9BSC66gAcRx')
17
  SF_DOMAIN = os.getenv('SF_DOMAIN', 'login') # Default to 'login' if not set
18
  HUGGINGFACE_API_KEY = os.getenv('HUGGINGFACE_API_KEY')
19
 
@@ -184,7 +184,7 @@ def generate_outputs(role, project_id, milestones, reflection):
184
  quote = generated_text[quote_start:].strip()
185
  except Exception as e:
186
  logger.error(f"Error parsing output: {e}")
187
- -return f"Error parsing output: {e}", "", ""
188
 
189
  return checklist, suggestions, quote
190
 
@@ -227,6 +227,42 @@ def store_in_salesforce(project, role, project_id, milestones, reflection, check
227
  logger.error(f"Error storing data in Salesforce: {e}")
228
  return f"Error storing data in Salesforce: {e}"
229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  def on_role_change(role):
231
  """Handle role selection change, fetch Salesforce data, generate outputs, and store in Salesforce."""
232
  # Fetch data from Salesforce based on the selected role
@@ -248,7 +284,7 @@ def create_interface():
248
  gr.Markdown("### Construction Supervisor AI Coach")
249
  with gr.Row():
250
  role = gr.Dropdown(choices=["Supervisor", "Foreman", "Project Manager"], label="Role", value="Supervisor")
251
- project_id = gr.Textbox(label="Project ID", placeholder="e.g., PROJ-123")
252
  milestones = gr.Textbox(
253
  label="Milestones (comma-separated)",
254
  placeholder="e.g., Foundation complete, Framing started, Roof installed"
@@ -258,6 +294,10 @@ def create_interface():
258
  lines=3,
259
  placeholder="e.g., Facing delays due to weather and equipment issues."
260
  )
 
 
 
 
261
  checklist_output = gr.Textbox(label="Checklist", lines=4)
262
  suggestions_output = gr.Textbox(label="Suggestions", lines=4)
263
  quote_output = gr.Textbox(label="Quote", lines=2)
@@ -270,6 +310,22 @@ def create_interface():
270
  outputs=[checklist_output, suggestions_output, quote_output, sf_output, project_id, milestones, reflection]
271
  )
272
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  return demo
274
 
275
  if __name__ == "__main__":
 
11
  logger = logging.getLogger(__name__)
12
 
13
  # Salesforce credentials (use environment variables for security)
14
+ SF_USERNAME = os.getenv('SF_USERNAME')
15
+ SF_PASSWORD = os.getenv('SF_PASSWORD')
16
+ SF_SECURITY_TOKEN = os.getenv('SF_SECURITY_TOKEN')
17
  SF_DOMAIN = os.getenv('SF_DOMAIN', 'login') # Default to 'login' if not set
18
  HUGGINGFACE_API_KEY = os.getenv('HUGGINGFACE_API_KEY')
19
 
 
184
  quote = generated_text[quote_start:].strip()
185
  except Exception as e:
186
  logger.error(f"Error parsing output: {e}")
187
+ return f"Error parsing output: {e}", "", ""
188
 
189
  return checklist, suggestions, quote
190
 
 
227
  logger.error(f"Error storing data in Salesforce: {e}")
228
  return f"Error storing data in Salesforce: {e}"
229
 
230
+ def fetch_and_process_salesforce_data():
231
+ """Fetch Project__c records from Salesforce and generate AI outputs."""
232
+ if sf is None:
233
+ logger.error("Salesforce connection not initialized")
234
+ return "Error: Salesforce connection not initialized"
235
+
236
+ try:
237
+ # Query Project__c records
238
+ query = """
239
+ SELECT Id, Name, Project_Name__c, Milestones__c, Weather_Log__c,
240
+ Supervisor__r.Role__c, Supervisor__r.Name, Supervisor__c
241
+ FROM Project__c
242
+ WHERE Milestones__c != null
243
+ LIMIT 10
244
+ """
245
+ projects = sf.query(query)['records']
246
+ logger.info(f"Fetched {len(projects)} Project__c records")
247
+
248
+ for project in projects:
249
+ role = project['Supervisor__r']['Role__c'] if project['Supervisor__r'] is not None else 'Supervisor'
250
+ project_id = project['Name']
251
+ milestones = project['Milestones__c'] or 'No milestones'
252
+ reflection = f"Weather: {project['Weather_Log__c'] or 'Sunny, 25°C'}"
253
+
254
+ # Generate AI outputs
255
+ checklist, suggestions, quote = generate_outputs(role, project_id, milestones, reflection)
256
+ logger.info(f"Generated outputs for Project {project_id}")
257
+
258
+ # Store in Salesforce
259
+ store_in_salesforce(project, role, project_id, milestones, reflection, checklist, suggestions, quote)
260
+
261
+ return f"Processed {len(projects)} projects successfully"
262
+ except Exception as e:
263
+ logger.error(f"Error processing Salesforce data: {e}")
264
+ return f"Error processing Salesforce data: {e}"
265
+
266
  def on_role_change(role):
267
  """Handle role selection change, fetch Salesforce data, generate outputs, and store in Salesforce."""
268
  # Fetch data from Salesforce based on the selected role
 
284
  gr.Markdown("### Construction Supervisor AI Coach")
285
  with gr.Row():
286
  role = gr.Dropdown(choices=["Supervisor", "Foreman", "Project Manager"], label="Role", value="Supervisor")
287
+ project_id = gr.Textbox(label="Project ID", placeholder="e.g., PROJ-123")
288
  milestones = gr.Textbox(
289
  label="Milestones (comma-separated)",
290
  placeholder="e.g., Foundation complete, Framing started, Roof installed"
 
294
  lines=3,
295
  placeholder="e.g., Facing delays due to weather and equipment issues."
296
  )
297
+ with gr.Row():
298
+ submit = gr.Button("Generate")
299
+ clear = gr.Button("Clear")
300
+ sf_button = gr.Button("Process Salesforce Data")
301
  checklist_output = gr.Textbox(label="Checklist", lines=4)
302
  suggestions_output = gr.Textbox(label="Suggestions", lines=4)
303
  quote_output = gr.Textbox(label="Quote", lines=2)
 
310
  outputs=[checklist_output, suggestions_output, quote_output, sf_output, project_id, milestones, reflection]
311
  )
312
 
313
+ submit.click(
314
+ fn=generate_outputs,
315
+ inputs=[role, project_id, milestones, reflection],
316
+ outputs=[checklist_output, suggestions_output, quote_output]
317
+ )
318
+ clear.click(
319
+ fn=lambda: ("Supervisor", "", "", ""),
320
+ inputs=None,
321
+ outputs=[role, project_id, milestones, reflection]
322
+ )
323
+ sf_button.click(
324
+ fn=fetch_and_process_salesforce_data,
325
+ inputs=None,
326
+ outputs=sf_output
327
+ )
328
+
329
  return demo
330
 
331
  if __name__ == "__main__":