Current section
Files
Jump to
Current section
Files
lib/core.ex
defmodule LLMRequest do
defstruct model: "llama3", messages: [], api_key: System.get_env("OPENAI_API_KEY"), temperature: 0.0
def dispatch(%LLMRequest{model: "gpt-4o"} = request) do
IO.puts "calling openai with: #{request.api_key}"
OpenAI.chat_completion(
[model: request.model, messages: request.messages, temperature: request.temperature],
%OpenAI.Config{api_key: request.api_key}
)
end
def dispatch(%LLMRequest{model: "gemini-1.5-flash"} = request) do
url = "https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent"
api_key = request.api_key
body = %{
"contents" => format_gemini_messages(request.messages)
}
response = Req.post!(
"#{url}?key=#{api_key}",
json: body,
headers: [{"Content-Type", "application/json"}]
)
if response.status == 200 do
response.body
|> Map.get("candidates")
|> Enum.at(0)
|> Map.get("content")
|> Map.get("parts")
|> Enum.at(0)
|> Map.get("text")
else
raise "Error: #{response.status} #{response.body}"
end
end
def dispatch(%LLMRequest{} = request) do
client = Ollama.init()
response =
Ollama.chat(client,
model: request.model,
messages: request.messages
)
{:ok, result} = response
{:ok, %{choices: [result]}}
end
def build_gemini_request(messages) do
%LLMRequest{model: "gemini-1.5-flash", messages: messages, api_key: System.get_env("GEMINI_API_KEY")}
end
def format_gemini_messages(messages) do
# https://ai.google.dev/api/rest/v1beta/Content
Enum.map(messages, fn message ->
%{
role: (if message.role == "user", do: "user", else: "model"),
parts: [%{text: message.content}]
}
end)
end
def populate_prompt(template, params) do
{result, _binding} = Code.eval_string(template, params)
result
end
end
defmodule Autogen.Tool do
defstruct name: "", description: "", jsonschema: ""
end
defmodule Autogen.Message do
defstruct content: "", sender: "", receiver: ""
end
defmodule Autogen.Thread do
defstruct max_turns: nil, chat_history: []
end