thmsmlr
Ecto field descriptions
Hey y’all so i’m working on a project that takes in Ecto schema and generates JSONSchemas for them. Part of the project requires that the user be able to document descriptions on the ecto fields so I can put them in the JSONSchema.
I’ve done some splunking and I’m stuck. I was wondering if y’all could point me in the right direction.
I was thinking of leveraging something like module docs, or somehow retrieving the extra field opts at runtime. I’ve looked at the Ecto.Schema.field/4 source code and can’t find any leads there. Similarly it seems like the @doc attribute can only be defined at the module level.
Ideally I’d like to provide a code experience something like this.
defmodule SpamPredicition do
use Ecto.Schema
@primary_key false
schema "predictions" do
@doc "I think ideally i'd put field descriptions as @doc attributes"
field(:class, Ecto.Enum, values: [:spam, :not_spam])
field(:reason, :string, description: "But I could tolerate field descriptions here")
field(:confidence_score, :float)
end
end
Any ideas? Maybe there’s a better approach that’s easier to implement?
Most Liked
Zurga
You can take a look at this library: GitHub - thebriz24/prop_schema: An extension on `Ecto.Schema` where you can provide additional options, which will be read by the corresponding `PropSchema.TestHarness` module, used in the test files to generate property tests · GitHub
They wrap the Ecto.Field module to add extra options to the fields
mayel
There was a similar question recently: Support for comments (or other metadata) in Ecto.Schema fields? This could help with reflection
All I know of are comments you can add in migrations, but not sure that meets your need: Ecto.Migration — Ecto SQL v3.14.0
thmsmlr
These are great suggestions. In my particularly usecase I found an easier way to go about it.
I’m working on the GitHub - thmsmlr/instructor_ex: Structured outputs for LLMs in Elixir · GitHub library and the JSONSchema is getting sent into an LLM. What I realized is that the LLM should be resilient to whether the description is at the schema level or the field level. So I decided to just do something like,
defmodule SpamPredicition do
use Ecto.Schema
use Instructor.Validator
@doc """
## Field Descriptions:
- class: Whether or not the email is spam
- reason: A short, less than 10 word rationalization for the classification
- score: A confidence score between 0.0 and 1.0 for the classification
"""
@primary_key false
embedded_schema do
field(:class, Ecto.Enum, values: [:spam, :not_spam])
field(:reason, :string)
field(:score, :float)
end
In some sense, for my usecase, this is even more flexible because you can write whatever you want about the semantics of this schema in the schema level @doc and the AI can make the appropriate associations, since you know.. it’s AI or whatnot.
If I come back to this under other circumstances i’ll definitely explore these solutions. Thanks y’all for your help!
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #javascript
- #code-sync
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








