defmodule BDS.AI.Model do @moduledoc false use Ecto.Schema import Ecto.Changeset @primary_key false schema "ai_models" do field :provider, :string, primary_key: true field :model_id, :string, primary_key: true field :name, :string field :family, :string field :supports_attachment, :boolean, source: :attachment, default: false field :supports_reasoning, :boolean, source: :reasoning, default: false field :supports_tool_calls, :boolean, source: :tool_call, default: false field :supports_structured_output, :boolean, source: :structured_output, default: false field :supports_temperature, :boolean, source: :temperature, default: false field :knowledge, :string field :release_date, :string field :last_updated_date, :string field :open_weights, :boolean, default: false field :input_price, :integer field :output_price, :integer field :cache_read_price, :integer field :cache_write_price, :integer field :context_window, :integer field :max_input_tokens, :integer field :max_output_tokens, :integer field :interleaved, :string field :status, :string field :updated_at, :integer end def changeset(model, attrs) do model |> cast( attrs, [ :provider, :model_id, :name, :family, :supports_attachment, :supports_reasoning, :supports_tool_calls, :supports_structured_output, :supports_temperature, :knowledge, :release_date, :last_updated_date, :open_weights, :input_price, :output_price, :cache_read_price, :cache_write_price, :context_window, :max_input_tokens, :max_output_tokens, :interleaved, :status, :updated_at ], empty_values: [nil]) |> validate_required([ :provider, :model_id, :name, :context_window, :max_input_tokens, :max_output_tokens, :updated_at ]) end end