[docs]classCreateDraftSchema(BaseModel):"""Input for CreateDraftTool."""message:str=Field(...,description="The message to include in the draft.",)to:List[str]=Field(...,description="The list of recipients.",)subject:str=Field(...,description="The subject of the message.",)cc:Optional[List[str]]=Field(None,description="The list of CC recipients.",)bcc:Optional[List[str]]=Field(None,description="The list of BCC recipients.",)
[docs]classGmailCreateDraft(GmailBaseTool):# type: ignore[override, override]"""Tool that creates a draft email for Gmail."""name:str="create_gmail_draft"description:str=("Use this tool to create a draft email with the provided message fields.")args_schema:Type[CreateDraftSchema]=CreateDraftSchemadef_prepare_draft_message(self,message:str,to:List[str],subject:str,cc:Optional[List[str]]=None,bcc:Optional[List[str]]=None,)->dict:draft_message=EmailMessage()draft_message.set_content(message)draft_message["To"]=", ".join(to)draft_message["Subject"]=subjectifccisnotNone:draft_message["Cc"]=", ".join(cc)ifbccisnotNone:draft_message["Bcc"]=", ".join(bcc)encoded_message=base64.urlsafe_b64encode(draft_message.as_bytes()).decode()return{"message":{"raw":encoded_message}}def_run(self,message:str,to:List[str],subject:str,cc:Optional[List[str]]=None,bcc:Optional[List[str]]=None,run_manager:Optional[CallbackManagerForToolRun]=None,)->str:try:create_message=self._prepare_draft_message(message,to,subject,cc,bcc)draft=(self.api_resource.users().drafts().create(userId="me",body=create_message).execute())output=f"Draft created. Draft Id: {draft['id']}"returnoutputexceptExceptionase:raiseException(f"An error occurred: {e}")