Spaces:
Sleeping
Sleeping
import os | |
import shutil | |
from fastapi import APIRouter, UploadFile, File, HTTPException | |
from typing import Dict, Any | |
from app.services.embedding_service import process_and_create_embeddings | |
router = APIRouter() | |
async def create_embeddings(file: UploadFile = File(...)): | |
""" | |
Create embeddings from an uploaded Excel or CSV file containing question-answer pairs. | |
- **file**: The Excel or CSV file containing questions and answers | |
Returns a success message if embeddings are created successfully. | |
""" | |
# Get file extension | |
file_extension = os.path.splitext(file.filename)[1].lower() | |
# Determine file type based on extension | |
if file_extension == ".xlsx" or file_extension == ".xls": | |
file_type = "excel" | |
elif file_extension == ".csv": | |
file_type = "csv" | |
else: | |
raise HTTPException( | |
status_code=400, | |
detail="Unsupported file type. Please upload an Excel (.xlsx, .xls) or CSV (.csv) file.", | |
) | |
# Ensure temp directory exists | |
temp_dir = "/app/temp" | |
if not os.path.exists(temp_dir): | |
os.makedirs(temp_dir, exist_ok=True) | |
# Create a temporary file to store the uploaded file | |
safe_filename = os.path.basename(file.filename).replace(" ", "_") | |
temp_file_path = os.path.join(temp_dir, f"temp_{safe_filename}") | |
try: | |
# Save the uploaded file | |
with open(temp_file_path, "wb") as buffer: | |
shutil.copyfileobj(file.file, buffer) | |
# Process the file and create embeddings | |
result = process_and_create_embeddings(temp_file_path, file_type) | |
if result["status"] == "error": | |
raise HTTPException(status_code=400, detail=result["message"]) | |
return result | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
finally: | |
# Clean up the temporary file | |
if os.path.exists(temp_file_path): | |
try: | |
os.remove(temp_file_path) | |
except Exception as e: | |
print( | |
f"Warning: Could not remove temporary file {temp_file_path}: {str(e)}" | |
) | |