import os from google.oauth2.credentials import Credentials from googleapiclient.discovery import build from smolagents import tool # HF agents framework def get_gmail_service(): creds = Credentials( token=None, refresh_token=os.environ["GMAIL_REFRESH_TOKEN"], client_id=os.environ["GMAIL_CLIENT_ID"], client_secret=os.environ["GMAIL_CLIENT_SECRET"], token_uri="https://oauth2.googleapis.com/token", ) return build("gmail", "v1", credentials=creds) @tool def read_latest_emails(max_results: int = 5) -> str: """Reads the latest emails from Gmail inbox. Args: max_results: Number of emails to fetch (default 5) Returns: A summary of recent emails """ service = get_gmail_service() results = service.users().messages().list( userId="me", maxResults=max_results, labelIds=["INBOX"] ).execute() messages = results.get("messages", []) summaries = [] for msg in messages: detail = service.users().messages().get( userId="me", id=msg["id"], format="metadata", metadataHeaders=["From", "Subject", "Date"] ).execute() headers = {h["name"]: h["value"] for h in detail["payload"]["headers"]} summaries.append( f"From: {headers.get('From')}\n" f"Subject: {headers.get('Subject')}\n" f"Date: {headers.get('Date')}" ) return "\n\n".join(summaries) @tool def send_email(to: str, subject: str, body: str) -> str: """Sends an email via Gmail. Args: to: Recipient email address subject: Email subject body: Email body text Returns: Success or error message """ import base64 from email.mime.text import MIMEText service = get_gmail_service() message = MIMEText(body) message["to"] = to message["subject"] = subject raw = base64.urlsafe_b64encode(message.as_bytes()).decode() service.users().messages().send( userId="me", body={"raw": raw} ).execute() return f"Email sent to {to} successfully!"