Packages

fnord

0.5.0

AI code archaeology

Current section

Files

Jump to
fnord lib ai util.ex
Raw

lib/ai/util.ex

defmodule AI.Util do
@role_system "system"
@role_user "user"
@role_assistant "assistant"
@role_tool "tool"
def agent_to_agent_prompt do
"""
You are communicating with another AI agent.
Optimize token usage and efficiency using the following guidelines:
- Avoid human-specific language conventions like articles, connecting phrases, or redundant words.
- Use a structured, non-linear format with concise key-value pairs, hierarchical lists, or markup-like tags.
- Prioritize key information first, followed by secondary details as needed.
- Use shorthand or domain-specific terms wherever possible.
- Ensure the output is unambiguous but not necessarily human-readable.
For example:
- "The database query returned an error because the schema was not updated."
- Agent-Optimized: {event db error, cause outdated schema}
- "Use the search_tool to identify examples of existing implementations of X that the user can reference."
- Agent-Optimized: {search_tool, query X implementation}
- "The user requested information about 'X', which appears to have multiple meanings in the context of the project."
- Agent-Optimized: {disambiguate X, respond multiple meaning}
"""
end
# Computes the cosine similarity between two vectors
def cosine_similarity(vec1, vec2) do
dot_product = Enum.zip(vec1, vec2) |> Enum.reduce(0.0, fn {a, b}, acc -> acc + a * b end)
magnitude1 = :math.sqrt(Enum.reduce(vec1, 0.0, fn x, acc -> acc + x * x end))
magnitude2 = :math.sqrt(Enum.reduce(vec2, 0.0, fn x, acc -> acc + x * x end))
if magnitude1 == 0.0 or magnitude2 == 0.0 do
0.0
else
dot_product / (magnitude1 * magnitude2)
end
end
# -----------------------------------------------------------------------------
# Messages
# -----------------------------------------------------------------------------
@doc """
Creates a system message object, used to define the assistant's behavior for
the conversation.
"""
def system_msg(msg) do
%{
role: @role_system,
content: msg
}
end
@doc """
Creates a user message object, representing the user's input prompt.
"""
def user_msg(msg) do
%{
role: @role_user,
content: msg
}
end
@doc """
Creates an assistant message object, representing the assistant's response.
"""
def assistant_msg(msg) do
%{
role: @role_assistant,
content: msg
}
end
@doc """
This is the tool outputs message, which must come immediately after the
`assistant_tool_msg/3` message with the same `tool_call_id` (`id`).
"""
def tool_msg(id, func, output) do
%{
role: @role_tool,
name: func,
tool_call_id: id,
content: output
}
end
@doc """
This is the tool call message, which must come immediately before the
`tool_msg/3` message with the same `tool_call_id` (`id`).
"""
def assistant_tool_msg(id, func, args) do
%{
role: @role_assistant,
content: nil,
tool_calls: [
%{
id: id,
type: "function",
function: %{
name: func,
arguments: args
}
}
]
}
end
end