Ash FrameworkAF
Ash Framework4mo ago
4 replies
rtorresware

parsing nested fields when argument is a TypedStruct

I have the following typed struct:
  defmodule WeightRanker do
    use Ash.TypedStruct

    typed_struct do
      field :dense_vector, :float, default: 1
      field :splade_vector_text, :float, default: 1
      field :splade_vector_title, :float, default: 1
      field :splade_vector_tags, :float, default: 1
      field :splade_vector_description, :float, default: 1
      field :bm25_vector_text, :float, default: 1
      field :bm25_vector_title, :float, default: 1
      field :bm25_vector_tags, :float, default: 1
      field :bm25_vector_description, :float, default: 1
    end
  end

I want to be able to receive it as an input on an action: argument :weights, Milvus.WeightRanker, default: fn -> Milvus.WeightRanker.new!(%{}) end and have Ash automatically parse something like: %{"weights" => %{"dense_vector" => 0}} and pass the fields into the TypedStruct.

Expected:
%ShAgent.HybridSearch.Milvus.WeightRanker{
  dense_vector: 0,
  splade_vector_text: 1.0,
  splade_vector_title: 1.0,
  splade_vector_tags: 1.0,
  splade_vector_description: 1.0,
  bm25_vector_text: 1.0,
  bm25_vector_title: 1.0,
  bm25_vector_tags: 1.0,
  bm25_vector_description: 1.0
}


Actual result:
%ShAgent.HybridSearch.Milvus.WeightRanker{
  dense_vector: 1.0, # default value
  splade_vector_text: 1.0,
  splade_vector_title: 1.0,
  splade_vector_tags: 1.0,
  splade_vector_description: 1.0,
  bm25_vector_text: 1.0,
  bm25_vector_title: 1.0,
  bm25_vector_tags: 1.0,
  bm25_vector_description: 1.0
}


Is this supported? Am I doing something wrong?
Solution
works on latest ash version
Was this page helpful?