Packages
langchain
0.3.3
0.9.2
0.9.1
0.9.0
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.4.0-rc.3
0.4.0-rc.2
0.4.0-rc.1
0.4.0-rc.0
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-rc.2
0.3.0-rc.1
0.3.0-rc.0
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir implementation of a LangChain style framework that lets Elixir projects integrate with and leverage LLMs.
Current section
Files
Jump to
Current section
Files
lib/images/generated_image.ex
defmodule LangChain.Images.GeneratedImage do
@moduledoc """
Represents a generated image where we have either the base64 encoded contents
or a temporary URL to it.
## Example
Created when an image generation request completes and we have an image.
GeneratedImage.new!(%{
image_type: :png,
type: :url,
content: "https://example.com/my_image.png",
prompt: "The prompt used for image generation"
})
"""
use Ecto.Schema
import Ecto.Changeset
require Logger
alias __MODULE__
alias LangChain.LangChainError
@primary_key false
embedded_schema do
field :image_type, Ecto.Enum, values: [:png, :jpg], default: :png
field :type, Ecto.Enum, values: [:base64, :url], default: :url
# When a :url, content is the URL. When base64, content is the encoded data.
field :content, :string
# The prompt used when generating the image. It may have been altered by the
# LLM from the original request.
field :prompt, :string
field :metadata, :map
field :created_at, :utc_datetime
end
@type t :: %GeneratedImage{}
@update_fields [:image_type, :type, :content, :prompt, :metadata, :created_at]
@create_fields @update_fields
@doc """
Build a new GeneratedImage and return an `:ok`/`:error` tuple with the result.
"""
@spec new(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
def new(attrs \\ %{}) do
%GeneratedImage{}
|> cast(attrs, @create_fields)
|> common_validations()
|> apply_action(:insert)
end
@doc """
Build a new GeneratedImage and return it or raise an error if invalid.
"""
@spec new!(attrs :: map()) :: t() | no_return()
def new!(attrs \\ %{}) do
case new(attrs) do
{:ok, message} ->
message
{:error, changeset} ->
raise LangChainError, changeset
end
end
defp common_validations(changeset) do
changeset
|> validate_required([:image_type, :type, :content])
end
end