Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -13,7 +13,7 @@ from reportlab.lib.pagesizes import letter
|
|
| 13 |
from reportlab.pdfgen import canvas
|
| 14 |
from fastapi import FastAPI, Form, File, UploadFile
|
| 15 |
from fastapi.middleware.cors import CORSMiddleware
|
| 16 |
-
from fastapi.responses import JSONResponse
|
| 17 |
from fastapi.staticfiles import StaticFiles
|
| 18 |
from dotenv import load_dotenv
|
| 19 |
|
|
@@ -314,7 +314,7 @@ def gradio_interface(boq_file, weather, workforce, location, project_title):
|
|
| 314 |
if not update_result:
|
| 315 |
logger.warning("Failed to update record with PDF URL, but record was created")
|
| 316 |
|
| 317 |
-
image_content_id = upload_file_to_salesforce(
|
| 318 |
image_url = None
|
| 319 |
if image_content_id:
|
| 320 |
sf = get_salesforce_connection()
|
|
@@ -332,6 +332,31 @@ def gradio_interface(boq_file, weather, workforce, location, project_title):
|
|
| 332 |
shutil.rmtree(temp_dir)
|
| 333 |
logger.debug(f"Cleaned up temporary directory: {temp_dir}")
|
| 334 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
# Create a FastAPI app with CORS support
|
| 336 |
app = FastAPI()
|
| 337 |
app.add_middleware(
|
|
@@ -345,32 +370,6 @@ app.add_middleware(
|
|
| 345 |
# Mount directory for temporary files (e.g., Gantt chart PNGs)
|
| 346 |
app.mount("/static", StaticFiles(directory=tempfile.gettempdir()), name="static")
|
| 347 |
|
| 348 |
-
# Fallback route for root path (in case Gradio is not used)
|
| 349 |
-
@app.get("/", response_class=HTMLResponse)
|
| 350 |
-
async def root():
|
| 351 |
-
return """
|
| 352 |
-
<html>
|
| 353 |
-
<head>
|
| 354 |
-
<title>AI Civil Work Planner API</title>
|
| 355 |
-
</head>
|
| 356 |
-
<body>
|
| 357 |
-
<h1>AI Civil Work Planner API</h1>
|
| 358 |
-
<p>The web interface is available via Gradio or use the API endpoint at <code>/api/gradio_interface</code>.</p>
|
| 359 |
-
<p>Example using curl:</p>
|
| 360 |
-
<pre>
|
| 361 |
-
curl -X POST \
|
| 362 |
-
-F "boq_file=@path/to/your/boq_data.csv" \
|
| 363 |
-
-F "weather=sunny" \
|
| 364 |
-
-F "workforce=10" \
|
| 365 |
-
-F "location=New York" \
|
| 366 |
-
-F "project_title=Test Project" \
|
| 367 |
-
http://your-server:7860/api/gradio_interface
|
| 368 |
-
</pre>
|
| 369 |
-
<p>For more details, contact the administrator.</p>
|
| 370 |
-
</body>
|
| 371 |
-
</html>
|
| 372 |
-
"""
|
| 373 |
-
|
| 374 |
# Health check endpoint to verify server status
|
| 375 |
@app.get("/health")
|
| 376 |
async def health_check():
|
|
@@ -476,34 +475,6 @@ async def api_gradio_interface(
|
|
| 476 |
shutil.rmtree(temp_dir)
|
| 477 |
logger.debug(f"Cleaned up temporary directory: {temp_dir}")
|
| 478 |
|
| 479 |
-
# Create Gradio interface
|
| 480 |
-
demo = gr.Blocks(theme="default")
|
| 481 |
-
with demo:
|
| 482 |
-
gr.Markdown("## AI Civil Work Planner")
|
| 483 |
-
gr.Markdown("Generate a project timeline (Gantt chart) and risk tags based on BOQ data and site parameters.")
|
| 484 |
-
|
| 485 |
-
with gr.Row():
|
| 486 |
-
with gr.Column():
|
| 487 |
-
boq_file = gr.File(label="Upload BOQ Data (CSV format)")
|
| 488 |
-
weather = gr.Dropdown(label="Weather", choices=["sunny", "rainy", "cloudy"], value="sunny")
|
| 489 |
-
workforce = gr.Number(label="Workforce Size", value=10, precision=0)
|
| 490 |
-
location = gr.Textbox(label="Location", placeholder="Enter project location")
|
| 491 |
-
project_title = gr.Textbox(label="Project Title", placeholder="Enter project title")
|
| 492 |
-
submit_btn = gr.Button("Generate Timeline")
|
| 493 |
-
|
| 494 |
-
with gr.Column():
|
| 495 |
-
output_image = gr.Image(label="Gantt Chart")
|
| 496 |
-
risk_tags = gr.Textbox(label="Risk Tags and Salesforce Status")
|
| 497 |
-
|
| 498 |
-
submit_btn.click(
|
| 499 |
-
fn=gradio_interface,
|
| 500 |
-
inputs=[boq_file, weather, workforce, location, project_title],
|
| 501 |
-
outputs=[output_image, risk_tags],
|
| 502 |
-
)
|
| 503 |
-
|
| 504 |
-
# Mount Gradio app on FastAPI
|
| 505 |
-
app = gr.mount_gradio_app(app, demo, path="/gradio")
|
| 506 |
-
|
| 507 |
if __name__ == "__main__":
|
| 508 |
-
|
| 509 |
-
|
|
|
|
| 13 |
from reportlab.pdfgen import canvas
|
| 14 |
from fastapi import FastAPI, Form, File, UploadFile
|
| 15 |
from fastapi.middleware.cors import CORSMiddleware
|
| 16 |
+
from fastapi.responses import JSONResponse
|
| 17 |
from fastapi.staticfiles import StaticFiles
|
| 18 |
from dotenv import load_dotenv
|
| 19 |
|
|
|
|
| 314 |
if not update_result:
|
| 315 |
logger.warning("Failed to update record with PDF URL, but record was created")
|
| 316 |
|
| 317 |
+
image_content_id = upload_file_to_salesforce(fileLf_path, f"{project_title}_Gantt_Chart.png", record_id)
|
| 318 |
image_url = None
|
| 319 |
if image_content_id:
|
| 320 |
sf = get_salesforce_connection()
|
|
|
|
| 332 |
shutil.rmtree(temp_dir)
|
| 333 |
logger.debug(f"Cleaned up temporary directory: {temp_dir}")
|
| 334 |
|
| 335 |
+
# Create Gradio interface
|
| 336 |
+
demo = gr.Blocks(theme="default")
|
| 337 |
+
with demo:
|
| 338 |
+
gr.Markdown("## AI Civil Work Planner")
|
| 339 |
+
gr.Markdown("Generate a project timeline (Gantt chart) and risk tags based on BOQ data and site parameters.")
|
| 340 |
+
|
| 341 |
+
with gr.Row():
|
| 342 |
+
with gr.Column():
|
| 343 |
+
boq_file = gr.File(label="Upload BOQ Data (CSV format)")
|
| 344 |
+
weather = gr.Dropdown(label="Weather", choices=["sunny", "rainy", "cloudy"], value="sunny")
|
| 345 |
+
workforce = gr.Number(label="Workforce Size", value=10, precision=0)
|
| 346 |
+
location = gr.Textbox(label="Location", placeholder="Enter project location")
|
| 347 |
+
project_title = gr.Textbox(label="Project Title", placeholder="Enter project title")
|
| 348 |
+
submit_btn = gr.Button("Generate Timeline")
|
| 349 |
+
|
| 350 |
+
with gr.Column():
|
| 351 |
+
output_image = gr.Image(label="Gantt Chart")
|
| 352 |
+
risk_tags = gr.Textbox(label="Risk Tags and Salesforce Status")
|
| 353 |
+
|
| 354 |
+
submit_btn.click(
|
| 355 |
+
fn=gradio_interface,
|
| 356 |
+
inputs=[boq_file, weather, workforce, location, project_title],
|
| 357 |
+
outputs=[output_image, risk_tags],
|
| 358 |
+
)
|
| 359 |
+
|
| 360 |
# Create a FastAPI app with CORS support
|
| 361 |
app = FastAPI()
|
| 362 |
app.add_middleware(
|
|
|
|
| 370 |
# Mount directory for temporary files (e.g., Gantt chart PNGs)
|
| 371 |
app.mount("/static", StaticFiles(directory=tempfile.gettempdir()), name="static")
|
| 372 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 373 |
# Health check endpoint to verify server status
|
| 374 |
@app.get("/health")
|
| 375 |
async def health_check():
|
|
|
|
| 475 |
shutil.rmtree(temp_dir)
|
| 476 |
logger.debug(f"Cleaned up temporary directory: {temp_dir}")
|
| 477 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 478 |
if __name__ == "__main__":
|
| 479 |
+
# Run Gradio UI
|
| 480 |
+
demo.launch(server_name="0.0.0.0", server_port=7860)
|