feat: start on AI integration

This commit is contained in:
2026-04-24 13:56:42 +02:00
parent 15584c72f7
commit 78609377be
16 changed files with 2410 additions and 8 deletions

64
lib/bds/ai/model.ex Normal file
View File

@@ -0,0 +1,64 @@
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