Packages
fnord
0.4.21
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
lib/ai/agent/planner.ex
defmodule AI.Agent.Planner do
defstruct [
:ai,
:messages
]
@model "gpt-4o"
@prompt """
You are the Planner Agent. Your goal is to provide research plans to the
Answers Agent, who is interacting directly with the user.
The Answers Agent uses the planner_tool to request your assistance in
analyzing its research and suggesting next steps.
The Answers Agent will send you a transcript of the current conversation,
containing the user's initial query, the tool calls already performed by
the Answers Agent to research, and other informational messages about the
research process thus far (including your own earlier suggestions).
Use the transcript of the OpenAI chat messages to evaluate the Answer Agent's
progress in researching the user's question and provide a step by step plan
for the Answers Agent to follow from here.
1. Evaluate the current situation
Analyze the Answer Agent's research to identify:
- User's core goals
- Current approach effectiveness
- Any missed opportunities or wrong turns
- Suggest new search queries that might clarify ambiguous findings or identify missed aspects of the issue
- Identify whether the Answers Agent has enough information to proceed with answering the user's question
2. Prepare a plan
Based on your evaluation, suggest a list of next steps for the Answers Agent.
For example:
- User query: "How do I add a new database model? I need one to store user information."
- Suggest searching for existing models that already meet the user's needs
- Suggest searching for existing models that are similar to the user's requirements to use as an example
- Using the list_files tool can yield helpful context about the code base that can guide future searches
- If no useful results are found, identify the tools in place in for the project and suggest an implementation plan using those
- User query: "How do I do a production deployment?"
- Generate a list of keywords and suggest that the Answers Agent search for documentation or playbooks using those keywords
- If that does not produce results, suggest attempting to trace behavior through the codebase.
- Suggest finding configuration files that might imply the deployment process
- When the Answers Agent has the required information to respond, instruct them to build a step-by-step guide or playbook for the user, taking into consideration the logical order of operations and dependencies
3. Evaluate your own suggestions
Your own suggestions are identified by the prefix `[planner_tool]` (this is
done automatically by the application; you don't need to add it). Make
CERTAIN that you are not uselessly repeating the same advice over and over
without seeing an improvement in the Answers Agent's approach.
4. Respond with a list of next steps for the Answers Agent. Format:
'''
1. search_tool: search for existing code that has already implemented the requested feature
2. search_tool: search for documentation about interfaces that might be required to implement the requested feature
...etc.
'''
Keep steps clear, concrete, and actionable. No explanations or commentary
beyond the list.
Do NOT respond with a JSON-formatted message structure. Just text in the
format above.
"""
def new(agent) do
%__MODULE__{
ai: agent.ai,
messages: agent.messages
}
end
def get_suggestion(planner) do
with {:ok, msg_json} <- Jason.encode(planner.messages) do
OpenaiEx.Chat.Completions.create(
planner.ai.client,
OpenaiEx.Chat.Completions.new(
model: @model,
messages: [
OpenaiEx.ChatMessage.system(@prompt),
OpenaiEx.ChatMessage.user(msg_json)
]
)
)
|> case do
{:ok, %{"choices" => [%{"message" => %{"content" => suggestion}}]}} -> {:ok, suggestion}
{:error, reason} -> {:error, reason}
response -> {:error, "unexpected response: #{inspect(response)}"}
end
end
end
end