Packages
fnord
0.4.35
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.
- Focus primarily on the next immediate step(s) that the Coordinating Agent should take.
- 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.
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
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. 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