Current section

Files

Jump to
genai_local lib local_llama.ex
Raw

lib/local_llama.ex

defmodule GenAI.Provider.LocalLLama do
@moduledoc """
This module implements the GenAI provider for Local AI.
"""
use GenAI.InferenceProviderBehaviour
@doc """
Retrieves a list of available Local models.
This function calls the Local API to retrieve a list of models and returns them as a list of `GenAI.Model` structs.
"""
def models(settings \\ [])
def models(settings) do
GenAI.Provider.LocalLLamaManager.models(settings)
end
def do_run(session, context, options \\ nil) do
with {:ok, {model = %{external: runner}, session}} <- GenAI.ThreadProtocol.effective_model(session, context, options),
{:ok, model_encoder} <- GenAI.ModelProtocol.encoder(model),
{:ok, provider} <- GenAI.ModelProtocol.provider(model),
{:ok, {effective, session}} <-
effective_settings(model, session, context, options),
{:ok, {tools, session}} <-
GenAI.ThreadProtocol.effective_tools(session, model, context, options),
{:ok, {messages, session}} <-
GenAI.ThreadProtocol.effective_messages(session, model, context, options) do
# Build Request
with {:ok, {req_body, session}} <-
request_body(model, messages, tools, effective, session, context, options)
do
with {:ok, completion = %GenAI.ChatCompletion{}} <- ExLLama.chat_completion(runner, messages, effective.settings) do
{:ok, {%GenAI.ChatCompletion{completion| provider: provider}, session}}
end
end
end
end
end