Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, Request | |
from fastapi.responses import Response | |
from fastapi.responses import FileResponse | |
from pydantic import BaseModel | |
import random | |
import re | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from matplotlib.backends.backend_pdf import PdfPages | |
import pandas as pd | |
import io | |
app = FastAPI() | |
# Define the ticket schema using Pydantic | |
class Ticket(BaseModel): | |
name: str | |
department: str | |
category: str | |
description: str | |
service_category: str | |
difficulty: int # Adjust type as needed (e.g., int or str) | |
class Code(BaseModel): | |
code: str | |
project_id: str | |
chain_id: str | |
session_id: str | |
def greet_json(): | |
return {"Hello": "World!"} | |
async def create_ticket(ticket: Ticket): | |
# Here you can process the ticket, e.g., save it to a database. | |
# For now, we simply return the received ticket data. | |
tick = ticket.dict() | |
tick["number"] = random.randint(1000, 9999) | |
return { | |
"message": "Ticket created successfully", | |
"ticket": tick | |
} | |
async def run_code(code: Code, request: Request): | |
# img_buffer = io.BytesIO() | |
pattern = f"""```python([\s\S]*?)```""" | |
codes = re.findall(pattern, code.code) | |
if codes: | |
print(codes) | |
exec("\n".join(codes)) | |
else: | |
print(code.code) | |
exec(code.code) | |
# img_buffer.seek(0) # Reset buffer position | |
file_path = f"graphs_{code.project_id}_{code.chain_id}_{code.session_id}.pdf" | |
# if "plt.subplots(" in code.code: | |
# print("SUBPLOTS DETECTED") | |
# exec(code.code + "\nfig.savefig(file_path)\nplt.close()") | |
# else: | |
# print("NO SUBPLOTS") | |
# exec(code.code + "\nplt.savefig(file_path)\nplt.close()") | |
# plt.close() | |
# plt.savefig(file_path) | |
# plt.close() | |
# Get all open figures | |
figures = [plt.figure(i) for i in plt.get_fignums()] | |
# Save all figures in a single PDF using PdfPages | |
# pdf_filename = "all_graphs.pdf" | |
with PdfPages(file_path) as pdf: | |
for fig in figures: | |
pdf.savefig(fig) # Save each figure as a page in the PDF | |
plt.close(fig) # Close the figure to free memory | |
print(f"Saved all figures to {file_path}") | |
# return Response(content=img_buffer.getvalue(), media_type="image/png") | |
# return FileResponse(file_path, media_type="image/png") | |
# return FileResponse(file_path, media_type="application/pdf", filename="graph.pdf") | |
return { | |
"message": "Graph created succesfully!", | |
"url": str(request.base_url) + f"chart/{code.project_id}/{code.chain_id}/{code.session_id}" | |
} | |
async def get_chart(project_id: str, chain_id: str, session_id: str): | |
pdf_path = f"graphs_{project_id}_{chain_id}_{session_id}.pdf" | |
return FileResponse(pdf_path, media_type="application/pdf") |