Executor / download_messages_log_helper.py
Soumik Bose
go
f161586
Raw
History Blame Contribute Delete
2.93 kB
# ---------------------------------------------------------
# HELPER METHOD FOR QUICK PDF GENERATION
# ---------------------------------------------------------
from typing import Dict, List, Optional
import logging
from pydantic import BaseModel, Field
from typing import List, Dict, Any, Optional
class ChatLogRequest(BaseModel):
chatId: str = Field(..., description="Unique identifier for the chat session")
messages: List[Dict[str, Any]] = Field(..., description="List of message objects containing content, role, etc.")
title: Optional[str] = "Chat Conversation Log"
class ChatLogResponse(BaseModel):
success: bool
pdf_url: str
request_id: str
message: Optional[str] = None
from download_messages_service import ChatLogGenerator
logger = logging.getLogger(__name__)
def generate_chat_pdf(messages: List[Dict],
title: str = "Chat Conversation Log",
chat_id: str = None,
output_dir: str = "chat_pdfs",
participants: List[str] = None,
date_range: str = None,
cover_page: bool = True,
include_stats: bool = True) -> Optional[str]:
"""
Quick helper method to generate a chat PDF and return the file path.
Args:
messages: List of message dictionaries
title: Title of the chat log
chat_id: Unique chat identifier
output_dir: Directory to save PDF
participants: List of participant names
date_range: Date range of conversation
cover_page: Whether to include cover page
include_stats: Whether to include statistics
Returns:
Full path to generated PDF file, or None if failed
Example:
messages = [{"role": "user", "content": "Hello", "createdAt": "2026-01-10T09:00:00Z"}]
pdf_path = generate_chat_pdf(messages, title="My Chat", chat_id="abc123")
logger.info(f"PDF saved at: {pdf_path}")
"""
try:
logger.info(f"Generating chat PDF: {title}")
generator = ChatLogGenerator(
title=title,
chat_id=chat_id,
participants=participants,
date_range=date_range,
output_dir=output_dir
)
# Generate unique filename
filename = generator._generate_unique_filename()
# Generate PDF
success = generator.generate(
messages=messages,
filename=filename,
cover_page=cover_page,
include_stats=include_stats
)
if success:
logger.info(f"PDF successfully generated: {filename}")
return filename
else:
logger.error("PDF generation failed")
return None
except Exception as e:
logger.exception(f"Error generating PDF: {e}")
return None