Skip to content

Commit 610f1f6

Browse files
committed
add graph runner cli
1 parent 0f92f14 commit 610f1f6

File tree

7 files changed

+162
-171
lines changed

7 files changed

+162
-171
lines changed

docs/index.md

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,23 @@ uv run python scripts/elasticsearch_operator.py --help
1717
uv run python scripts/elasticsearch_operator.py add-documents --index-name docs_kabuto --verbose
1818
uv run python scripts/elasticsearch_operator.py search-documents --index-name docs_kabuto --query "禅モード" --verbose
1919

20-
# Run Kabuto Helpdesk Agent
21-
uv run python -m template_langgraph.tasks.run_kabuto_helpdesk_agent "KABUTOの起動時に、画面全体が紫色に点滅し、システムがフリーズします。"
22-
uv run python -m template_langgraph.tasks.run_kabuto_helpdesk_agent "KABUTOのマニュアルから禅モードに関する情報を教えて下さい"
20+
# Agents
2321

24-
# ChatWithToolsAgent
25-
uv run python -m template_langgraph.tasks.run_chat_with_tools_agent
22+
## Draw agent graph
23+
AGENT_NAME=chat_with_tools_agent
24+
uv run python scripts/graph_runner.py png --name $AGENT_NAME --verbose --output data/$AGENT_NAME.png
25+
26+
## Run agents
27+
AGENT_NAME=chat_with_tools_agent
28+
AGENT_NAME=kabuto_helpdesk_agent
29+
uv run python scripts/graph_runner.py run --name $AGENT_NAME --verbose --question "KABUTOのマニュアルから禅モードに関する情報を教えて下さい"
2630
# KABUTOの起動時に、画面全体が紫色に点滅し、システムがフリーズします。KABUTO のマニュアルから、関連する情報を取得したり過去のシステムのトラブルシュート事例が蓄積されたデータベースから、関連する情報を取得して質問に答えてください
2731
# 天狗のいたずら という現象について KABUTO のマニュアルから、関連する情報を取得したり過去のシステムのトラブルシュート事例が蓄積されたデータベースから、関連する情報を取得して質問に答えてください
32+
# KABUTOの起動時に、画面全体が紫色に点滅し、システムがフリーズします。
33+
# KABUTOのマニュアルから禅モードに関する情報を教えて下さい
2834

29-
# IssueFormatterAgent
30-
uv run python -m template_langgraph.tasks.run_issue_formatter_agent
31-
# KABUTOにログインできない!パスワードは合ってるはずなのに…若手社員である山田太郎は、Windows 11 を立ち上げ、日課のように自社の業務システムKABUTOのログイン画面を開きます。しかし、そこには、意味をなさない「虚無」という文字だけがただひっそりと表示されていたのです。これは質問でもあり不具合の報告でもあります。岡本太郎さんに本件調査依頼します。
32-
33-
# Draw mermaid diagram for Agents
34-
AGENT_NAME=chat_with_tools_agent
35-
uv run python scripts/draw_mermaid_png.py \
36-
--name $AGENT_NAME \
37-
--output data/$AGENT_NAME.png
35+
AGENT_NAME=issue_formatter_agent
36+
uv run python scripts/graph_runner.py run --name $AGENT_NAME --verbose --question "KABUTOにログインできない!パスワードは合ってるはずなのに…若手社員である山田太郎は、Windows 11 を立ち上げ、日課のように自社の業務システムKABUTOのログイン画面を開きます。しかし、そこには、意味をなさない「虚無」という文字だけがただひっそりと表示されていたのです。これは質問でもあり不具合の報告でもあります。岡本太郎さんに本件調査依頼します。"
3837
```
3938

4039
## References

scripts/draw_mermaid_png.py

Lines changed: 0 additions & 65 deletions
This file was deleted.

scripts/graph_runner.py

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import logging
2+
3+
import typer
4+
from dotenv import load_dotenv
5+
6+
from template_langgraph.agents.chat_with_tools_agent.agent import graph as chat_with_tools_agent_graph
7+
from template_langgraph.agents.issue_formatter_agent.agent import graph as issue_formatter_agent_graph
8+
from template_langgraph.agents.kabuto_helpdesk_agent import graph as kabuto_helpdesk_agent_graph
9+
from template_langgraph.agents.task_decomposer_agent.agent import graph as task_decomposer_agent_graph
10+
from template_langgraph.loggers import get_logger
11+
12+
# Initialize the Typer application
13+
app = typer.Typer(
14+
add_completion=False,
15+
help="template-langgraph CLI",
16+
)
17+
18+
# Set up logging
19+
logger = get_logger(__name__)
20+
21+
22+
def get_agent_graph(name: str):
23+
if name == "chat_with_tools_agent":
24+
return chat_with_tools_agent_graph
25+
elif name == "issue_formatter_agent":
26+
return issue_formatter_agent_graph
27+
elif name == "task_decomposer_agent":
28+
return task_decomposer_agent_graph
29+
elif name == "kabuto_helpdesk_agent":
30+
return kabuto_helpdesk_agent_graph
31+
else:
32+
raise ValueError(f"Unknown agent name: {name}")
33+
34+
35+
@app.command()
36+
def png(
37+
name: str = typer.Option(
38+
"chat_with_tools_agent",
39+
"--name",
40+
"-n",
41+
help="Name of the agent to draw",
42+
),
43+
output_file_path: str = typer.Option(
44+
"output.png",
45+
"--output",
46+
"-o",
47+
help="Path to the output PNG file",
48+
),
49+
verbose: bool = typer.Option(
50+
False,
51+
"--verbose",
52+
"-v",
53+
help="Enable verbose output",
54+
),
55+
):
56+
# Set up logging
57+
if verbose:
58+
logger.setLevel(logging.DEBUG)
59+
60+
logger.debug(f"This is a debug message with name: {name}")
61+
typer.echo(f"Drawing agent: {name}")
62+
get_agent_graph(name).get_graph().draw_mermaid_png(
63+
output_file_path=output_file_path,
64+
)
65+
typer.echo(f"Graph saved to {output_file_path}")
66+
67+
68+
@app.command()
69+
def run(
70+
name: str = typer.Option(
71+
"chat_with_tools_agent",
72+
"--name",
73+
"-n",
74+
help="Name of the agent to draw",
75+
),
76+
question: str = typer.Option(
77+
"「鬼灯」を実行すると、KABUTOが急に停止します。原因と対策を教えてください。",
78+
"--question",
79+
"-q",
80+
help="Question to ask the agent",
81+
),
82+
verbose: bool = typer.Option(
83+
False,
84+
"--verbose",
85+
"-v",
86+
help="Enable verbose output",
87+
),
88+
):
89+
# Set up logging
90+
if verbose:
91+
logger.setLevel(logging.DEBUG)
92+
93+
if name == "chat_with_tools_agent":
94+
from template_langgraph.agents.chat_with_tools_agent.agent import (
95+
AgentState,
96+
)
97+
98+
for event in chat_with_tools_agent_graph.stream(
99+
input=AgentState(
100+
messages=[
101+
{
102+
"role": "user",
103+
"content": question,
104+
}
105+
],
106+
)
107+
):
108+
logger.info("-" * 20)
109+
logger.info(f"Event: {event}")
110+
111+
if name == "issue_formatter_agent":
112+
from template_langgraph.agents.issue_formatter_agent.agent import (
113+
AgentState,
114+
)
115+
116+
for event in issue_formatter_agent_graph.stream(
117+
input=AgentState(
118+
messages=[
119+
{
120+
"role": "user",
121+
"content": question,
122+
}
123+
],
124+
)
125+
):
126+
logger.info("-" * 20)
127+
logger.info(f"Event: {event}")
128+
129+
if name == "kabuto_helpdesk_agent":
130+
from template_langgraph.agents.kabuto_helpdesk_agent import KabutoHelpdeskAgent
131+
132+
agent = KabutoHelpdeskAgent(
133+
tools=None, # ツールはカスタムせず、デフォルトのツールを使用
134+
)
135+
response = agent.run(
136+
question=question,
137+
)
138+
logger.info(f"Agent result: {response}")
139+
140+
# エージェントの応答を表示
141+
logger.info(f"Answer: {response['messages'][-1].content}")
142+
143+
144+
if __name__ == "__main__":
145+
load_dotenv(
146+
override=True,
147+
verbose=True,
148+
)
149+
app()

template_langgraph/tasks/__init__.py

Whitespace-only changes.

template_langgraph/tasks/run_chat_with_tools_agent.py

Lines changed: 0 additions & 33 deletions
This file was deleted.

template_langgraph/tasks/run_issue_formatter_agent.py

Lines changed: 0 additions & 32 deletions
This file was deleted.

template_langgraph/tasks/run_kabuto_helpdesk_agent.py

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)