notsakeeb's picture
Update Utils/handle_file.py
02ac450 verified
raw
history blame
2.7 kB
import os
import mimetypes
from langchain_core.messages import HumanMessage, SystemMessage
from pathlib import Path
from fetch_question import get_files_by_task_id
# Function to handle attachments based on file type
def handle_attachment(task_id, file_name):
"""
Handles file attachments for a task.
Args:
task_id: The ID of the task
file_name: The name of the attachment file
Returns:
Dictionary with attachment details, including how it should be handled
"""
if not file_name or file_name.strip() == "":
return {"status": "no_attachment"}
# Get file content using existing function
file_data = get_files_by_task_id(task_id)
if file_data["status"] == "error":
print(f"Error fetching attachment: {file_data.get('error')}")
return {"status": "error", "message": file_data.get("error")}
content_type = file_data["content_type"]
raw_content = file_data["content"]
# Determine if this file type can be directly processed by Claude
# Images, spreadsheets, and PDFs can be processed directly
direct_process = (
content_type.startswith("image/") or
"spreadsheet" in content_type or
"excel" in content_type or
content_type == "application/pdf" or
"csv" in content_type
)
if direct_process:
# For files that Claude can handle directly, return content for direct inclusion
print(f"Attachment {file_name} (type: {content_type}) will be passed directly to Claude")
return {
"status": "success",
"handling": "direct",
"content_type": content_type,
"raw_content": raw_content,
"file_name": file_name
}
else:
# For other files, save to disk and return path
save_dir = os.path.join(os.getcwd(), "task_files")
os.makedirs(save_dir, exist_ok=True)
# Determine file extension
file_extension = Path(file_name).suffix
if not file_extension:
extension = mimetypes.guess_extension(content_type) or ".bin"
file_path = os.path.join(save_dir, f"{task_id}{extension}")
else:
file_path = os.path.join(save_dir, file_name)
# Save the file
with open(file_path, 'wb') as f:
f.write(raw_content)
print(f"Attachment {file_name} (type: {content_type}) saved to {file_path}")
return {
"status": "success",
"handling": "tool",
"content_type": content_type,
"file_path": file_path,
"file_name": file_name
}