๐งโโ๏ธ Conjurer of interfaces and abstractions
๐จโ๐ป Crafter of tooling to ease the burden of mundanity
๐ญ Man of Vim
๐ฅท Full Stack Ninja
โจ๏ธ Web Tech Enthusiast
In Ash, where should you put your side effects?
before_transaction โ before_action
One runs before the DB transaction opens. One runs inside it.
Put your external API calls in the wrong one and watch your connection pool suffer!
Here's my very first contribution to the esteemed Alembic blog, helping you understand the lifecycle of an Ash action so you can avoid this common newbie footgun
https://t.co/UgpU9Xt5IY
#MyElixirStatus
TIL Access.key/1 is Elixir's universal get_in accessor. Works on both maps and structs.
Bare atoms like [:foo] only work on maps. [Access.key(:foo)] works on both ๐ง
#MyElixirStatus
We love seeing @teamalembic team members on international stages! This year, @BuhotMicha12955 spoke at @CodeBEAMio Berlin, sharing how constraints can be powerful simplifiers in #Gleam, #Elixir, #Ash & inertia.js.
๐ https://t.co/CCaunrIYc9
I still feel like Lua would be the better choice over Python for Programmatic Tool Calling, but still it's a great idea. And one which I've seen work well even with previous models, so I'll bet they've vastly improved capabilities with training towards these new Advanced Tools
๐งต TIL you can install specific static assets with Mix by setting `app: nil` and `compile: nil` ๐คฏ
This means you can depend on JSON specs, schemas, or any static files without compiling them as apps.
Opens up some really interesting possibilities...
#MyElixirStatus
Here's what it looks like in practice:
Mix pulls down the files, but doesn't compile or run anything. The `:sparse` key lets you pluck just the files you need! ๐ฆโจ
Super tiny one, but TIL about `List.wrap/1`
- Wrap a value in a list if it's not a list already
Handy so that you don't need to do that pattern matching dance! ๐บ
#MyElixirStatus
MCP is mostly nonsense, but there are good effects:
1. Tricks management to green-light engineering efforts on APIs and OAuth DCR (Dynamic Client Registration)
2. Tricks LLM clients to integrate with everyone, ie an open-ecosystem, not walled gardens
3. (Just discovered this one today) The fact that MCP is a difference surface from your normal API allows you to ship MUCH faster to MCP. This has been unlocked by inference at runtime
Normal APIs are promises to developers, because developer commit code that relies on those APIs, and then walk away. If you break the API, you break the promise, and you break that code. This means a developer gets woken up at 2am to fix the code
But MCP servers are called my LLMs which dynamically read the spec every time, which allow us to constantly change the MCP server. It doesn't matter! We haven't made any promises. The LLM can figure it out afresh every time
This is why we've shipped capabilities to our MCP server that our API doesn't yet have. We aren't worried about committing ourselves to anything. We can always change the MCP server later and the LLM will figure it out
Try running `mix https://t.co/I1GJIgu5PK` in your Elixir project.
That's right.
Project specific hexdocs search page.
Very very handy!
https://t.co/NX8m837Uh9
This was one of the best talks I attended this year. Chris showed how to get deep into the mind of an LLM.
He used the raw power of Bumblebee and Nx, to filter out tokens as they're generated, forcing the tokens to fit the shape he wanted!