Packages

LLM prompt evaluation workbench for Phoenix applications

Retired package: Renamed - Renamed to aludel: https://hex.pm/packages/aludel

Current section

Files

Jump to
vial_llm lib vial web helpers.ex
Raw

lib/vial/web/helpers.ex

defmodule Vial.Web.Helpers do
@moduledoc false
alias Phoenix.VerifiedRoutes
@doc """
Construct a path to a dashboard page with optional params.
Routing is based on a socket and prefix tuple stored in the process dictionary.
"""
def vial_path(route, params \\ %{})
def vial_path(route, params) when is_list(route) do
route
|> Enum.join("/")
|> vial_path(params)
end
def vial_path(route, params) do
# Normalize route to prevent double slashes
route = String.trim_leading(route, "/")
params =
params
|> Enum.sort()
|> encode_params()
case Process.get(:routing) do
{socket, prefix} ->
path =
case prefix do
"/" -> "/#{route}"
"" -> "/#{route}"
_ -> "#{prefix}/#{route}"
end
VerifiedRoutes.unverified_path(socket, socket.router, path, params)
:nowhere ->
"/"
nil ->
raise RuntimeError, "nothing stored in the :routing key"
end
end
defp encode_params([]), do: []
defp encode_params(params) do
for {key, value} <- params do
if is_list(value) do
{key, Enum.join(value, ",")}
else
{key, value}
end
end
end
end