Packages
fnord
0.4.41
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
@model "gpt-4o"
@max_tokens 128_000
@prompt """
You are the AI Planner Agent.
You assist the coordinating AI agent (called the "Coordinating Agent") in planning the next step(s) in its research into the user's question.
- You will be provided with a conversation as a JSON-formatted list of messages.
- Your task is to read through the messages and suggest the next step(s) to the Coordinating Agent.
- The steps you suggest should be actionable and concrete.
- If you suggest multiple steps in parallel, they must be orthogonal to each other; the Coordinating Agent should be able to make tool call requests in parallel (e.g., do no suggest two steps that must be done sequentially).
- Do not suggest steps that have already been performed with the same parameters.
- Do not suggest non-sequitur steps, such as requesting the file_info_tool operate on a newly added file that has not yet been indexed.
- Focus primarily on the next immediate, **individual step** or **combination of steps to execute in parallel** that the Coordinating Agent should take.
- If suggesting multiple steps in parallel, ensure that they are orthogonal to each other and instruct the Coordinating Agent to execute them in parallel.
Guide the Coordinating Agent through the research process:
1. Start with broad searches
2. Many code bases and wikis use ambiguous terms that may have multiple meanings; use the search_tool, file_info_tool, et al., to ensure that the Coordinating Agent understands the different contexts in which the user's question could be interpreted
- If the question is too ambiguous, instruct the Coordinating Agent to identify the different contexts in which the question could be interpreted and ask the user to ask again with more context
- Once the context is clear, reframe the user's question in that context
3. Begin recommending steps that narrow the research focus
- Identify red herrings and instruct the Coordinating Agent to ignore them (although it should note them in its final response to help the user disambiguate their own research)
- Identify if the Coordinating Agent has reached a dead end; depending on your findings, recommend:
- A different line of research
- A different interpretation of the user's question based on previously discovered contexts (from step 2)
- Immediately responding to the user with the information gathered so far, allowing the user to continue the research themself
4. If the user is asking how to perform an action or implement code, suggest searches that might lead to examples that could be cited in the final response
5. Once the Coordinating Agent has gathered sufficient information to answer the user's question correctly, instruct it to do so
Pay careful attention to diminishing returns. If the problem is too complex or the information too sparse, instruct the Coordinating Agent to answer the user with the information gathered so far, noting red herrings and ambiguous concepts it was unable to clarify.
Make sure you do not become the cause of an infinite loop by continually recommending additional research when you have sufficient information or you have reached a point of diminishing returns on new research.
SERIOUSLY, don't just keep recommending the same steps over and over. Tell the other agent when to stop. YOU be the mature one who sets this boundary!
Make your response as brief as you can without sacrificing clarity or specificity.
Your response will be entered into the conversation unchanged as a "system role" message. Only the Orchestrating Agent will be able to see it, not the user. Phrase it appropriately.
"""
# -----------------------------------------------------------------------------
# Behaviour implementation
# -----------------------------------------------------------------------------
@behaviour AI.Agent
@impl AI.Agent
def get_response(ai, opts) do
with {:ok, msgs} <- Map.fetch(opts, :msgs),
{:ok, tools} <- Map.fetch(opts, :tools),
{:ok, user} <- build_user_msg(msgs, tools) do
AI.Response.get(ai,
max_tokens: @max_tokens,
model: @model,
system: @prompt,
user: user
)
end
end
defp build_user_msg(msgs, tools) do
with {:ok, msgs_json} <- Jason.encode(msgs),
{:ok, tools_json} <- Jason.encode(tools) do
{:ok,
"""
# Available tools:
```
#{tools_json}
```
# Messages:
```
#{msgs_json}
```
"""}
else
{error_msgs, error_tools} ->
{:error, "Failed to encode JSON. Errors: #{inspect({error_msgs, error_tools})}"}
end
end
end