Packages
langchain
0.3.0-rc.2
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