Gaykar commited on
Commit
52f16ba
·
1 Parent(s): 7833f17

changes in structure

Browse files
app/graph.py CHANGED
@@ -22,7 +22,7 @@ from app.database.connection import pool
22
  from app.utils.embeddings import remote_embeddings
23
  from langgraph.checkpoint.postgres import PostgresSaver
24
  from langgraph.store.postgres import PostgresStore
25
- from app.tools.email_writing_agent_tools import email_writing_agent_tools
26
 
27
  # Define a standard retry policy for database-heavy nodes
28
  db_retry_policy = RetryPolicy(
@@ -129,6 +129,7 @@ builder.add_conditional_edges(
129
  )
130
 
131
 
 
132
  builder.add_edge("store_memory_and_data_node", END)
133
  builder.add_edge("unsafe_emails_node", END)
134
  builder.add_edge("archive_node", END)
 
22
  from app.utils.embeddings import remote_embeddings
23
  from langgraph.checkpoint.postgres import PostgresSaver
24
  from langgraph.store.postgres import PostgresStore
25
+
26
 
27
  # Define a standard retry policy for database-heavy nodes
28
  db_retry_policy = RetryPolicy(
 
129
  )
130
 
131
 
132
+
133
  builder.add_edge("store_memory_and_data_node", END)
134
  builder.add_edge("unsafe_emails_node", END)
135
  builder.add_edge("archive_node", END)
app/nodes/email_writing_node.py CHANGED
@@ -40,23 +40,10 @@ def email_writing_agent_node(state: EmailAgentState) -> dict:
40
 
41
 
42
 
43
- def route_after_tools(state: EmailAgentState):
44
- # Iterate backwards to find the latest ToolMessage
45
- # This handles cases where the LLM might have sent a text follow-up
46
- last_tool_msg = next((m for m in reversed(state["messages"])
47
- if isinstance(m, ToolMessage)), None)
48
-
49
- if not last_tool_msg:
50
- return "email_writing_agent"
51
-
52
- content_upper = last_tool_msg.content.upper()
53
-
54
- # logic 1: If we just successfully SENT the email, go to Parser -> Memory
55
- if last_tool_msg.name == "send_draft_by_id" and "SUCCESS" in content_upper:
56
- print("--- ROUTER: Send successful. Moving to Parse/Memory. ---")
57
  return "store_memory_and_data_node"
58
-
59
- # logic 2: If we just created a DRAFT (or the send failed)
60
- # Go back to agent to talk to the user
61
- print("--- ROUTER: Draft created or Tool failed. Returning to Agent. ---")
62
  return "email_writing_agent"
 
40
 
41
 
42
 
43
+ def route_after_tools(state):
44
+
45
+ if state.get("sent_message_id"):
46
+ print("--- ROUTER: Send successful. Moving to Memory. ---")
 
 
 
 
 
 
 
 
 
 
47
  return "store_memory_and_data_node"
48
+
 
 
 
49
  return "email_writing_agent"
app/tools/email_writing_agent_tools.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from langgraph.types import interrupt
2
  from googleapiclient.errors import HttpError
3
  from app.schemas.email_writing_agent_tools_schema import CreateDraftSchema, SendDraftSchema
@@ -9,8 +10,8 @@ from langchain.tools import ToolRuntime
9
  from langgraph.types import Command
10
  from langgraph.graph import END
11
  from langchain_core.messages import ToolMessage,SystemMessage, HumanMessage
12
-
13
  from app.gmail_auth import gmail_toolkit ,api_resource
 
14
  @tool(args_schema=CreateDraftSchema)
15
  def create_gmail_draft(
16
  to: Union[str, list],
@@ -49,7 +50,8 @@ def create_gmail_draft(
49
  "draft_id": draft_id,
50
  "reply_subject": subject,
51
  "reply_email_body": body,
52
- "messages": [ToolMessage(content, tool_call_id=tool_call_id)]
 
53
  },goto=END
54
  )
55
  except IndexError:
@@ -81,13 +83,14 @@ def send_draft(
81
  return Command(
82
  update={
83
  "sent_message_id": sent_id,
84
- "messages": [ToolMessage(content, tool_call_id=tool_call_id)]
 
85
  }
86
  )
87
  except HttpError as error:
88
  error_msg = f"ERROR: {error}"
89
  return Command(
90
- update={"messages": [ToolMessage(error_msg, tool_call_id=tool_call_id)]}
91
  )
92
 
93
 
 
1
+ from os import name
2
  from langgraph.types import interrupt
3
  from googleapiclient.errors import HttpError
4
  from app.schemas.email_writing_agent_tools_schema import CreateDraftSchema, SendDraftSchema
 
10
  from langgraph.types import Command
11
  from langgraph.graph import END
12
  from langchain_core.messages import ToolMessage,SystemMessage, HumanMessage
 
13
  from app.gmail_auth import gmail_toolkit ,api_resource
14
+
15
  @tool(args_schema=CreateDraftSchema)
16
  def create_gmail_draft(
17
  to: Union[str, list],
 
50
  "draft_id": draft_id,
51
  "reply_subject": subject,
52
  "reply_email_body": body,
53
+ "messages": [ToolMessage(content, tool_call_id=tool_call_id)],
54
+ "name": "create_gmail_draft"
55
  },goto=END
56
  )
57
  except IndexError:
 
83
  return Command(
84
  update={
85
  "sent_message_id": sent_id,
86
+ "messages": [ToolMessage(content, tool_call_id=tool_call_id)],
87
+ "name": "send_draft"
88
  }
89
  )
90
  except HttpError as error:
91
  error_msg = f"ERROR: {error}"
92
  return Command(
93
+ update={"messages": [ToolMessage(error_msg, tool_call_id=tool_call_id)], "name": "send_draft"}
94
  )
95
 
96