Ash Weekly: Issue #19
Homepage revamp & docs improvements, file uploads in AshAdmin, Ash AI improvements, new modes for usage_rules, new reactor projects, and *three* new community extensions!
Ash Weekly!
Welcome to Ash Weekly — your quick, informal digest of what’s new and notable in the world of Ash Framework. Got something cool? Drop it in the #showcase channel on Discord!
Shameless Plugs
Check out Ash Premium Support from Alembic.
Sponsor me if you like what I do. To all of my current sponsors: thank you ❤️
Homepage & What is Ash Guide Revamped
We’ve had lots of trouble in the past with our website not doing the heavy lifting that it should to explain what Ash is. I’m hoping we’ve mostly put the nail in that coffin with our new interactive tour on the home page, and a revamp of the What is Ash guide. Now if people wonder what Ash is, sending them a link to ash-hq.org is a reasonable way to explain 🎉
AshAdmin gets File Upload support
A community-member-contributed improvement to AshAdmin allows for arguments of type `:file` to automatically support file uploads. It is a very cool and useful addition, with zero work required on your end to benefit from it. With the ability now to look up related records with typeaheads/selects, support for unions, json editors for map fields, markdown editors for text fields, and now file upload, AshAdmin is proving more and more useful. Not very pretty, though 😅. Anyone who wants to improve that, give me a shout.
Non-OpenAI model support in prompt-backed actions
Support for non-OpenAI models in prompt-backed-actions (structured outputs) via adapters. The adapter is inferred from the model, and supplied via an option otherwise. There are now three available adapters, based on the mechanism for extracting a structured output from the model. There are three builtin adapters.
`AshAi.Actions.Prompt.Adapter.StructuredOutput` - Use an LLM that is guaranteed to return the requested JSON Schema.
`AshAi.Actions.Prompt.Adapter.CompletionTool` - Use an LLM and run it until it calls a "completion" tool, up to `max_runs` times.
`AshAi.Actions.Prompt.Adapter.RequestJson` - Use an LLM and ask it nicely to respond with a specific JSON.
Usage Rules --sync-to-folder flag
Usage rules can get pretty big, especially as we add them to more and more packages. However, LLMs are smart and can often follow breadcrumbs without necessarily needing all of the context in their face. A new option is available for `mix usage_rules` that allows you to sync each package to its own file in a directory, or even just point to that package in your `deps` folder directly!
Reactor documentation overhaul
James did some amazing work to completely revamp the reactor documentation. While very full featured, it was a bit sparse on docs before, as it often goes with power tools made by busy people. Reactor’s brand new fancy documentation has been published. Take a look at the docs and tell us what you think!
Contributor Names in Changelogs
Thanks to Abhishek Tripathi, the names and, in cases where possible, links to the Github profiles of contributors, will be included in release notes. We firmly believe in giving credit where credit is due, and this is one of the best ways to do it. We also have a special role in our discord server for contributors of any kind, from typo fixes to features. If you haven’t gotten the role and you’ve contributed to any `ash-project` package, please let me know! If you’re not in the discord, what are you even doing with your life??
AshNeo4j Community Extension
AshNeo4j, a new community extension has been released. It is a data layer for Ash and Neo4j! Really excited to see what folks can build with it, and glad to see more folks making non-relational data layers for Ash.
AshOutstanding Community Extension
AshOutstanding is a community extension designed to help you implement the `Outstanding` protocol for your Ash resources. Very cool idea!
AshCommanded Community Extension
AshCommanded is a community extension designed to help you work with the Commanded framework in a declarative way that plays well with the rest of Ash. Commanded is really cool, and seeing folks build bridges makes me very happy.
ReactorFile, ReactorReq & ReactorProcess are now MIT Licensed
These packages are all labors of love from our very own core team member James Harton. It was initially licensed differently, but is now MIT licensed and exists under the ash-project organization, aligning its license with Reactor itself. This is effectively a donation to a more permissive license by James, who was under no obligation to make this change. He did so to make it easier for folks using Reactor to also use his other Reactor-related tooling. You should buy him a beer if you use his stuff!
LLMs & Elixir: Windfall or Deathblow
My recent article did the rounds on hacker news, posting it here for folks who didn’t catch it.
Releases
Ash: 3.5.14-3.5.15
Nicer inspect protocol implementation for resources, putting relationships & __meta__ at the end since they are likely larger, and least likely to be loaded.
Updated usage-rules.md to include more guidance around codegen, and to remove some incorrect example code
ReactorReq: 0.1.4
ReactorReq provides step types for working with Req. Check it out on GitHub.
ReactorFile: 0.18.2
ReactorFile is now MIT licensed and exists under the ash-project organization, aligning its license with Reactor itself, just like `ReactorReq`.
ReactorFile is builtin step types for working with files, and is very fancy. Remember that reactor is a saga orchestrator, so if something goes wrong, all the stuff gets put back 😎 Check it out on GitHub.
ReactorProcess: 0.4.1
ReactorProcess is now MIT licensed and exists under the ash-project organization, aligning its license with Reactor itself, just like `ReactorReq` and `ReactorFile`.
ReactorProcess is builtin step types for working with process, which is naturally something we do in Elixir quite often 🥸 Check it out on GitHub.
AshAi: 0.1.11
Add adapters for prompt backed actions
Add completion tool adapter, and choose it by default for Anthropic models
Igniter: 0.6.5-0.6.6
Don’t set `consolidate_protocols` option when installing packages. This is a holdover from essentially 0.1 of igniter and has no reason to continue to exist 😁
Add `Igniter.rm`, which removes files, tracking this removal in state to “do the right thing” when the changes are accepted and as new files are created/updated.
AshAdmin: 0.13.6-0.13.8
Add file upload support, and configuration for file fields and their behavior.
AshPaperTrail: 0.5.5
Add an optional flag to expose timestamps in version resources as public attributes.