YNAB, CLI Tooling, and Deepseek AI

Chris Gmyr (00:00)
Hey, welcome back to the Slightly Caffeinated Podcast. I'm Chris Gmyr

TJ Miller (00:03)
I'm TJ Miller.

Chris Gmyr (00:05)
Hey TJ, so what's up in your world this week?

TJ Miller (00:08)
man, this week has been a doozy. I feel like I'm exhausted. you know, there's still several days left in the week and I'm ready for the weekend. I think I came into this week wishing the weekend was one day longer and Monday was every bit a Monday and then Tuesday was like Monday part two. So I'm just like, yeah, ready for the weekend.

But no, there were some cool stuff. I started rolling out a new project at work. It's big unknowns for me. We were implementing ClickHouse for some statistical. We're logging all of our requests for multiple reasons. But at one point, two months ago, we were looking at stats and we saw that

over a 30 day window, had processed 17 billion requests. So we're logging every single request that comes into our geocoding engine. that's billions is a lot. So we've been looking to switch out the database that we use to host, like store all of those requests to ClickHouse. And that's all new to me. Like it's a different type of database, like the storage is totally different.

Chris Gmyr (01:02)
Yeah, it is a lot.

TJ Miller (01:15)
everything's different. so rolling that out this week into like a limited production rollout so that there's like room for me to play with it and kind of massage and tweak it. so we rolled that out this week and it's been a little bumpy. but you know, we made some choices around and like dual entry, like

putting it into the original, like the old database, using that as the source of truth and kind of like slowly introducing this. So it's been, that part's been smooth, but just like learning hurdles of click houses, like all new and, you know, it's just different and tough stuff. we can maybe talk about that a little later, but yeah, big rollout there. I've got like Science Olympiad tonight.

You know, last one. like reporting back after the last one. These kids are pretty smart, man. I was impressed. I was, I was really surprised. We, it's in Python. I think I mentioned that. So like they're, they're learning Python. I decided to just shrug off all of my like coaching and teaching and I'm just running the kids through Codecademy. So we're just, we're, walking through it.

Chris Gmyr (02:04)
Nice.

TJ Miller (02:21)
They learned a little bit about variables. They learned about like the print function. Started learning about strings a little bit. We're going to like recap that tonight and expand on it. But like Codecademy is great. And like there were a couple of ones where it's like, hey, like here's an error, fix this error. And I was like showing it to the kids. And I'm like, these are fifth and sixth graders. And I'm like, what's wrong with this? And.

someone was one of the kids was just like, it needs quotes, it needs quotes. And I'm like, you're right. Like, I was so excited. So it's and like I think I said last time, I was kind of dreading it. And I knew once I got into it, we'd be having fun. So we'll keep seeing how it's going. I'm I'm a little nervous for them, like going into a competition, like I don't know how well I'm going to do, like preparing them for for the competition. But

Chris Gmyr (02:54)
That's awesome.

TJ Miller (03:12)
Whatever, we'll have some fun. They'll definitely learn some stuff and hopefully, hopefully that all just naturally works out in the end.

Chris Gmyr (03:20)
Yeah, totally. That sounds like a great start so far.

TJ Miller (03:23)
Yeah, yeah, we're one in, second one tonight, and then we'll see where things go. But how about you, man? How are you doing? How's your week been?

Chris Gmyr (03:32)
Yeah, I mean, pretty busy. Last weekend, we had the Pinewood Derby for Cub Scouts. So that went really well. We did not place third. I think we got maybe fourth. So pretty close. So close. But I was surprised on how well he did, granted that we only had like, I don't know, a week to pull it together and do all the things. And yeah, it was some pretty stiff competition.

TJ Miller (03:44)
So close.

Chris Gmyr (03:59)
And the second, third, and fourth, and fifth slots were very, very close. The one who got first was just a touch ahead pretty easily on most tracks. Because they go through eight different times up to four tracks. Because some tracks are a little bit faster than others, so they just rotate through them for the individual heats to be a little bit more even.

But yeah, all those kids did great. My son was happy enough about his results. I think he wanted to be a little bit faster than we were. it's like, dude, you got to make those decisions earlier. And we got to plan ahead a little bit better instead of changing the plan last minute. But I think he still did really well, and it was fun. So we got to hang out and do that Saturday morning.

And then me and him went to my cousin's house up into Virginia because her son was in a play on Sunday. So we went up there, hung out, did a quick little overnight, went to the play on Sunday afternoon, and then drove back down to North Carolina Sunday night. And yeah, just back to regular work and school and.

Got a couple other things going on, so hopefully I can share that a little bit more in the future. But yeah, that's generally what's up with me.

TJ Miller (05:21)
Yeah, man. Well, I'm glad to hear that the Pinewood Derby went over well. that's a bummer. It would have been so, so exciting for, for him to place third and like go in with just this very unique goal of I want to get third and then actually get third. I think would have, that would have been hilarious, but, very close and yeah, that's a lot of fun, man. I've, I've been wanting to get out on the East coast, man. Like,

Chris Gmyr (05:32)
Yeah.

Yep. Yep.

TJ Miller (05:46)
and go just, I don't know, want to go explore. And the East Coast just seems to be calling me. So, stoked to hear you went up to Virginia and had a good time.

Chris Gmyr (05:55)
Yeah, yeah, that's fun.

TJ Miller (05:57)
So you hit me up a couple days ago or yes, not even a couple days ago. I think it was yesterday. Hit me up about doing some like interesting stuff with YNAB. And I would love to hear more about this because we use YNAB also. I need to be, I say we use YNAB. My wife uses YNAB and I definitely need to be a

better partner when it comes to that. So, I'm really interested to hear like what you're putting together. Cause maybe, maybe that'll bridge the gap for me. and help me be a little, a little bit better at it. and for all of you listeners, YNAB is you need a budget. It's a, some like, it's really pretty fantastic budgeting software, but it's not just like software.

Chris Gmyr (06:43)
Yes.

TJ Miller (06:50)
It's like a whole way of thinking about things, I think. So yeah, man, I'll let you run with that.

Chris Gmyr (06:54)
Yeah, so like you said, you need a budget. But it's way more than just a budgeting app. It's a zero-based budget. So basically, you want every dollar that you have to be assigned to a job or a category. You can put goals, either monthly or future goals, on any of these categories and has a bunch of tools built into it. So I've been using it since, I don't know, 2019.

opposite of you guys, like I'm the primary user. My wife goes in there occasionally and checks it out. But I usually run everything. But over the course of the years, it does get a little sluggish because you can also set up multiple budgets, or you can have a fresh start. So it'll save all of your accounts and money and connections, and then it'll zero out all the transactions and all that stuff.

But it basically loads all that stuff when you load up the web app. And it can be a little slow, but I like having that long-term view of everything. Instead of going into multiple archived budgets or having a spreadsheet off to the side, I just like having everything in there. So unfortunately, it does slow the application down, but not terribly. I don't know. It takes maybe 20-ish seconds, maybe 30 seconds on a bad day to open it up. But when...

You just want to jump in there and add a transaction really quickly. You got an email or something from Amazon. Or just wanting to check a category balance. It's like, this is taking what seems like forever to jump into there and see what's going on. And the mobile app is a little bit faster. But when I'm already on the computer, it's like, I've got to change devices. And I don't know. It takes just as much to get my phone, open up the app, and figure out whatever I'm doing.

TJ Miller (08:20)
Yeah.

Chris Gmyr (08:35)
in there. I'm just not a big fan of mobile usage anyways. I'd much rather use a laptop and a web UI or a desktop application to do what I need to do. So I only use the mobile app for out and about, like spending in. basically, previously I was using this Chrome plugin called Sprout. And that

TJ Miller (08:49)
Yeah.

Chris Gmyr (08:55)
allowed you to have a little button in your toolbar that when you clicked on it, you're able to pick a budget. You're able to add a transaction in this nice little pop-up window. And it'll just make the API call to YNAB behind the scenes and add it. So you don't need to open the budget. You don't need to do anything else like that. It's just an interim little tool and extension for Chrome to do that. He stopped developing that and pulled it off of the Chrome Store.

TJ Miller (09:22)
no!

Chris Gmyr (09:22)
last August. So I had to uninstall that. That didn't work anymore. It is on GitHub. So if you wanted to pull it in and do your own thing with it, you can. So at least that's pretty cool. But I'm like, yeah, I don't really want to do an extension. That seems like a lot of overhead to do it. And I don't really want to maintain it for anyone else besides myself. So I'm like, well, I've been meaning to tinker around with their API, which is basically very simple.

TJ Miller (09:30)
That's cool.

Chris Gmyr (09:46)
rest endpoints. And I'm like, well, why don't I build something out in Laravel and just make little artisan commands for what I wanted to do? So basically, that's what I did. I took the use cases from the Sprout extension that was no longer and built out the add transaction command first. So basically, I can do artisan, YNAB, transaction. And then I installed and used

TJ Miller (09:57)
Hahaha

Chris Gmyr (10:11)
Laravel prompts for it. So it was my first real time of using Laravel prompts, which is awesome. It's so cool. Yeah. So I install that. And basically, it just goes through and asks you all the questions. I have a default budget set up. I have a couple other budgets and a side business one. But I'm just like, I just want this for the personal one. Hardcoded that on there in an environmental variable. Same thing with the API credentials.

TJ Miller (10:16)
It's so sick. Promises amazing.

Chris Gmyr (10:37)
And it just goes through and asks, what account do you want to pull this from? What category do you want to assign it to? Who's the payee? What's the amount? Optional memo, optional flag, and optional if it's cleared or not. So all of the categories flow in there. All of the payees flow in there. And it's all using either select options or search suggest.

So in the categories, you can, or in the pays, you can go like, pay is TJ for coffee is the category, and then for five bucks or something like that. And then it just goes through the six or so prompts. And then when you push Submit, then it goes behind the scenes, makes the API call, and boom, it's in YNAB, works perfectly, and we're good to go.

TJ Miller (11:09)
Yeah.

Sick.

Chris Gmyr (11:24)
So I did that as a command and check in a category balance. So again, you could do like artisan, YNAB category. And then you, again, have a search suggest box for whichever category that you want. So you do like food, coffee, and it'll say 20 bucks. It'll just spit out whatever balance that you have on there.

And then putting it in a loop, because if you want to do a couple of category balances, you could do, OK, what's my coffee? What's my monthly subscriptions? What's my, I don't know, whatever. So it'll just ask you for it, and then you can exit out when you're done. So that's the basic functionality of it. It's not like a grandiose CLI.

TJ Miller (11:59)
Yeah.

Chris Gmyr (12:07)
applications, just a bunch of little scripts, calling and manipulating some data here and there. But it's so much faster, and it's so cool. And I just wanted to tinker with all those things for such a long time. The YNAB API prompts haven't really done much with Laravel 11 since we have older applications at work. So a little bit of newness there. So yeah, guess I'll pause there if you wanted to jump in or add anything.

TJ Miller (12:27)
Yeah.

Yeah, that's sick, man. Like as a, as a terminal junkie, I just, I love, love just seeing this stuff like added to the terminal. I think this like definitely would be advantageous for me to like play around with, and see if that like gets me, gets me more into categorizing stuff and being helpful there. yeah, dude, that's, that's pretty sick. So.

I gotta also pull that stuff into like, I gotta set it up and pull it into Raycast. That's cool, dude. I think it's a fun project. I'm glad you got to mess around with prompts. We upgraded our apps at Geocodeo right before I started, so they're all on Laravel 11, but I have just been itching to build something new with Laravel 11 and...

Flux and like get to just play with all the like new stuff. So I've got a app idea I'm sitting on. Definitely not ready to talk about it, but I'm like very excited about running that like Laravel new and getting to play with all the like the freshness. So I definitely appreciate like that side of things. I think that's I'm glad you had fun doing it, man. Like prompts is wild, isn't it?

Chris Gmyr (13:35)
Mm-hmm.

yeah. It's so much better than anything that we've had previously or things that I've seen out and about with other frameworks. It makes it so easy. And the API is just so small, but it offers so much power behind it. And it was just amazing to go through it and just be like, yeah, just throw an array or collection at this thing. And it just does auto suggest right in the terminal. And you can adjust some other settings if you need to. But if not, it just works.

very easily out of the box and it was just like, this is amazing. This would have been a huge pain in the butt or prompts and it was because I've done a couple of projects like that and way back in the day and it was just not as fun or easy to do for sure.

TJ Miller (14:20)
Yeah!

Yeah,

I know you and I have both built some pretty extensive CLI things with Laravel and it's always a challenge to get everything together in a sensible way and make the developer experience also feel good and the user experience feel good. feel like before prompts, one of those was always suffering.

Either your developer experience wasn't going to be that great, but then the user experience was awesome. And I think prompts really solved that. And plus, it's just beautiful. It's just so nice to look at in the terminal, too. I don't know. I appreciate that a lot.

Chris Gmyr (15:06)
Yeah, totally. And you brought up Raycast. So I haven't made the jump to Raycast yet. I'll have to look into that again. I'm still on Alfred. And I'm a heavy Alfred workflow user. I built a lot of workflows and keywords to jump into things or do tests behind the scenes or even change Slack notification settings or

TJ Miller (15:20)
Yeah.

Chris Gmyr (15:31)
statuses on there. I have all these commands and shortcuts set up for that. So I basically did that with the YNAB CLIs so far. So I can type in YNAB and then either Transaction or Category, it'll automatically add that to iTerm. And then I can go ahead and type away, no matter where I am in my computer or whatever desktop that I am, it just opens it right up.

calls artisan and the specific command right away. And then good to go. If I mistype one of those keywords, and there might be a couple more scripts in the future or keywords so far, it'll just say, can't script and bail out correctly. yeah, tying it to something that is globally accessible on the computer is a huge help with.

without having to open up a terminal or have it open. And because I didn't have it open, it'll just do that for me automatically, which is, I don't know, just nice little cherry on top.

TJ Miller (16:25)
for sure. Yeah. And I think I've actually used, I've become more deeply integrated with Raycast than I think I ever did with Alfred. So like I've built some of that kind of like workflow stuff now with Raycast, which I never got into with Alfred. And like I had some of the shortcuts and stuff set up, but like not, yeah, didn't dive into the more advanced things that I know you use. So I can't really speak to like what you're like if...

Chris Gmyr (16:43)
Mm-hmm.

TJ Miller (16:49)
what an if a migration story looks like for you. But I will say, after I moved from Alfred to Raycast, there was no going back and Raycast has just continued to get better.

Chris Gmyr (16:59)
Yeah,

that's the only complaint that I have of Alfred, seems like. Even though they push out updates, it's like a lot of the workflows or plugins that are community-based really haven't had that many updates. And some of them have been breaking recently. Like I had a Laravel doc and a TablePlus one installed, and they just stopped working. They're all kind search ahead functionality. And you click it, and it'll all.

TJ Miller (17:14)
Mmm, yeah.

Chris Gmyr (17:24)
automatically open up that specific database or go to the specific docs page for that version for the Lyraville docs and a few other things. And some of that stuff just stopped working for whatever reason. So I haven't had a chance to investigate it. But I'm like, everyone probably has gone and pushed their stuff to Raycast, the pressure platform. So I'll have to check it out again.

TJ Miller (17:41)
Yeah.

Yeah, yeah, I out of all the like doc stuff, man, I treasure my raycast like tailwind documentation like search that is I'm always forgetting because I don't work with it like on a very frequent basis. I'm like always forgetting all of the like tailwind everything. And so I need to use it. It's like very, very convenient being in there. So I'll have to I'll have to add the Laravel one to you. I know I've got a very quick shortcut in Raycast to like launch.

like collection method documentation and validation documentation. And also, I just recently put one together to go straight to the helper function, like the newly recategorized helper function page, where it's just like, here's all the string helpers, array helpers, all that stuff. So yeah, those are vital. We'll have to maybe do a like.

Chris Gmyr (18:14)
Mm-hmm. Good one.

TJ Miller (18:31)
talk about your setup episode. Because I think we both do some pretty cool and interesting things.

Chris Gmyr (18:34)
Yeah.

Yeah, yeah, totally. So yeah, the last thing on the YNAB CLI, I've started making a blog post series. So I'm going to start off in kicking it off with the transaction command and general layer valve setup and a few things to get that started. And then second post will probably be the smaller category one. And then kind of go from there, I want to do some additional like

TJ Miller (18:42)
Yeah.

Very cool.

Chris Gmyr (19:02)
refactorings and cleanups and adjustments over time. So it's just going to be like a little nice holding place on my site for that. So I'm hoping to get the first one at least published before this goes live on Saturday. So hopefully I'll have a little time to squeak that out. But I'll put the link in the show notes for sure. And then people can follow along or tinker around and probably open source it even if I don't.

I don't know, actually accept anything, because I'm just building it mostly for me. But I don't know, it could be a nice place to chat about YNAB or I don't know, some other things that I might not have thought of to put in the CLI. So stay tuned for all of that.

TJ Miller (19:45)
Yeah, big fan of like open sourcing it, even if it's just going to be like read only. I think it's just, it's nice to have that stuff out there and for like people to be able to look at to like build their own stuff or even just like take it as is like I'll use this or like fork it and build upon it. I think it's like really cool to be able to get out there. And plus if you're going to be like writing a blog post series, which I'm very excited about, I've really enjoyed your writing in the past. That I think

Chris Gmyr (20:10)
Thank you.

TJ Miller (20:13)
having a repo to be able to point alongside of it is great instead of having a bunch of gist or just code in the blog post, being able to point to, yeah, here's all of it if you're interested in seeing more or diving into this thing more specifically. I think it's a nice way to have it available.

Chris Gmyr (20:32)
Yeah, OK, it's decided then, open source. And especially for the longer term multiple blog posts in the series, especially when I get into refactoring, it's like, here's the blog post, and then here's the PR for everything that they talked about and walk through. But the snapshot of what actually got pushed and changed, you could always go either forward or backwards in the repo or get the current snapshot of the state of the world over there. So I really like that.

TJ Miller (20:44)
Yeah.

Chris Gmyr (20:58)
the idea of combining both of those worlds, like written and the actual code that you can just pull down and ticker with or actually see what's going on.

TJ Miller (21:06)
Yeah, being able to create a story out of like pull requests, think is, it's really powerful. And I mean, like even on projects that like I never open source, just like push to GitHub for storage sake and like somewhere for me to like push code to. So like even on my private projects, I still PR almost everything. Just like it's easy that, and I also like either, I exclusively rebase merge or squash merge. I don't ever like.

Chris Gmyr (21:26)
Yeah, same.

TJ Miller (21:36)
merge the code in. it gives you these really nice series of commits to be able to be like, oh shit, I got to revert this one thing, this one PR. It's really nice to be able to just go and find that and do it instead of having to sift through your commits and pick things out. Especially, I'm not really great with commit messages, if I'm being honest. Lots of just whip commits everywhere. So having all that boiled up to one nicely written, it's

Chris Gmyr (21:56)
Yep. Yep.

TJ Miller (22:03)
nicely packaged inside of a PR that gets squashed merged into a single commit. That's easy for me to reason about than trying to worry about all these individual commit messages and trying to sift through that to find different things. Yeah, big fan of PRs across the board.

Chris Gmyr (22:21)
Yeah, totally. So yeah, we'll keep everyone updated on that. yeah, let's move on.

TJ Miller (22:24)
Sick, man. Looking forward to it. Yeah.

Blog post series is great. I can't wait. I got a couple of blog posts I need to write for Geocodeo. We launched a tech blog and we're all trying to focus on contributing to that. And we're basically looking at all of our projects and going, right, what's a blog post that we can extract from this? Because we do some really pretty cool stuff over there. And I'm excited for us to like...

Chris Gmyr (22:35)
Nice.

TJ Miller (22:47)
be starting to talk about it more. Like the article I'm working on is, I say working on it, like I just started like outlining it the other day, but it's a, we use Go alongside of our Laravel app and we use Sockets. And so I'm kind of just putting together a post of like, yeah, how we link Laravel and Go together through, through Sockets. And I'm a big believer in like Laravel and Go are like a match made in heaven and really compliment each other. So.

I think this is going to be a fun one to write and I'm excited to get that out there. So yeah, man.

Chris Gmyr (23:18)
I 100 %

support that and I think the PHP and Go story is super interesting. Mohamed wrote about it a bunch before and he even has a PHP to Go course, which is also fantastic, but I don't think he's written too much about it in more recent years. But I would love a fresher update on that story across the board and being able to see projects and

how people are using those tools together, I think is fantastic.

TJ Miller (23:48)
Again, think we were just like, Matias and I were just talking about like, what's that story look like for us in the future? And I think we're talking about like breaking, drawing some like clearer boundaries between like what we do in Laravel and what we do in Go, but expanding a bit on like the Go side of things, especially for like our on-prem solutions. So I'm looking forward to like doing more of that and writing more about it. Cause yeah, I think I'm a firm believer that it's like a really powerful.

powerful pair between the two. And I think conceptually too, writing both Go and PHP is less mental overhead than switching between writing PHP and JavaScript. I think there's just a lot more similarities and the mindset is similar.

Cool man, you wanna talk a little prism? So have you heard much about the DeepSeek R1 model at all?

Chris Gmyr (24:32)
Yeah, let's do it.

Not really anything too specific besides it came swooping down a couple days ago and upset a whole bunch of companies and people and like the AI stocks and all the things. So not much more like deeper than that past like headlines and you know, some images.

TJ Miller (24:48)
It's stockson.

Yeah.

Yeah, so it's really kind of like caught fire recently. OpenAI had like came out with their 01 series of models. And what that essentially is, is it's like, it's a model that has a reasoning step built into it. So like you ask it a question or you give it a directive. Like, want you to build like coding is like, it's just an easy one to think about.

in these in this like concept. like you give it a coding task, like I want you to do this thing. You give it some like context, some some boundaries. And then what it does is it'll go off and like think and reason about what that's going to do, break down like logical steps of like how it needs to process things. So it actually has this like cognitive thinking step built in and they call it like their reasoning step. So it's kind of like a stage of like reasoning and thought.

Chris Gmyr (25:42)
Bye.

That's cool.

TJ Miller (25:48)
And then it goes off and does whatever is next. So if it came up with, here's all the steps that I need to do to solve this problem, it'll then go off and perform those steps after the reasoning, which is super cool. that had been, really, the premier model for that was the 01 series from OpenAI. So that's the 01 mini. It was 01 preview. I think they just took it out of preview.

And then they have like O1 Pro, which is part of their like $200 a month subscription. I know like Aaron Francis has been like really talking about how he's integrated the O1 Pro into like his workflow. So I'm sure you can like kind of go poke around his content and kind of see. I know he's been talking about it over on Twitter a bit. So like that was really, OpenAI really kind of like broke the door with that. Like, I don't know, they kind of opened up the world.

to these reasoning models. So DeepSeek, they're a company out of China. So that kind of brings some drama about things. I don't know. That's been part of the debate that's been going on. But they open source the model. So you can run it on Olamma. Grok, who is another provider who provides like GROQ, not GROK. GROK, Grok, that's Twitter's thing.

GROQ though is a provider and they will host a lot of various open source models on their custom hardware. So you can run DeepSeek there, you can run it in OlaMa, you can run it with DeepSeek in Prism. Now has support directly, it's got its own provider for DeepSeek. Previously, you of had to rework the OpenAI provider for it because they have an OpenAI compatible API.

But now we have our own DeepSeq provider, so you can use R1 that way. But I wanted to put together a tweet about, or just like some social posts around using R1 through Ola, since that's primarily how I've been using it. I either use it through Grok if I want a larger one, like 70 billion parameters or something. I'll go through Grok, or if I just need something that can be handled on my laptop.

I'll use Olamma. So I wanted to use Olamma in Prism. And I had this ticket on the Prism repo for a while to refactor the Olamma provider from the OpenAI compatibility layer to the OpenAI API. Or not stats, away from the OpenAI compatibility layer to the Olamma API. So this is like super, I know we're like in the weeds, man. Just follow me.

Chris Gmyr (28:15)
I'm

following. Let's go.

TJ Miller (28:17)
Come along for the ride, folks. We're

in the weeds. So, Olamma, they came out with their own API. But as time has passed, they've realized that a lot of other providers have started launching OpenAI compatibility. Their APIs are OpenAI compatible, which means you can basically override the OpenAI URL, and all of the OpenAI tools now just magically work.

So like the OpenAISDKs just magically work for Prism. You can like customize the OpenAI URL, the API key, all of that stuff. So anything that's OpenAPI compatible, even if we don't support it as a like native provider, in Prism you can just use the OpenAI layer as long as it's OpenAI compatible. So Olamma adopted an OpenAI compatibility layer. It's not quite one for one.

Chris Gmyr (29:02)
Mm-hmm.

TJ Miller (29:09)
between the Olamma API and that compatibility layer. in order and I guess especially all of the controls for Olamma. So you can control so many options for hosting that model, running that model locally through their API. those options just aren't exposed through the OpenAI Compat layer. So I've had this ticket for a while to migrate over to

the Olam and native API. So as I'm like now coming out of the weeds a little bit, I wanted to put together a social post on like just like a little simple CLI thing of using DeepSeq R1 to do something. Cause it's just, it's hot. I figured it would be like a good time to put together some social stuff about it. So anyhow, I started diving into it and I wanted to use structured outputs. So the scenario I came up with,

is let's just take this big blob of profile text. So just imagine a markdown file. I went to Claude and I said, hey, come up with just a couple paragraphs about a fictitious developer. Make sure it includes some hobbies. Make sure it includes some open source contributions. Have at it. So I spit out a couple paragraphs. I took that, put it in a markdown file. And then I created a structured object for

what a user profile looks like. So that object would have the developer's name, it would have an array of strings that are their hobbies, and then another array of strings for their open source contributions. And so you would pass this profile to Prism with the prompt of, hey, I want you to extract this data from this user profile, and then pass it the profile, and then it comes out with a structured object.

What I discovered was it was not working. I had semi-extensively tested structured output, but for some reason, using the DeepSeq model, the structured output wasn't working. It was giving me the reasoning block and then just the text. And then the text had the correct JSON, but it was in a markdown block.

I'm still not getting back a structured object. I'm getting back blobs of text that happen to contain the correct structured object, but supposed to return JSON, basically. So I dove in and started. I'm like, I wonder what would happen if I use Olamas native API instead of the compatibility layer. So I just went and rewrote. I didn't rewrite structured output. Claude rewrote structured output for...

Chris Gmyr (31:24)
Yeah.

TJ Miller (31:44)
for Olamma into their API. And all of a sudden everything just started working. So I'm like, all right, I guess I need to like stop what I'm doing and go overhaul all of the Olamma integration to use like their native API. So that's what I'm like diving into right now. I finished most of it last night. There's still a few pieces to go. But

Ultimately, like after that, like quick refactor on the structured output, like I was getting back the object that I was expecting. And man, I, that was one of those moments, like putting that together was like, shit, like Prism's kind of dope. Like I don't mean to like toot my own horn too much here, but I'm going to toot a little bit because I was very impressed how easy like that made that whole thing work.

Chris Gmyr (32:32)
Yeah.

TJ Miller (32:34)
You know, I get very like in the weeds and in the nitty gritty of Prism all the time. So I don't like necessarily always use the whole solution. I'm just, very like accustomed to working on like deep on different parts of it. So getting to be able to put something together that actually uses like Prism. Because I haven't done that in a little while of like actually build something with the thing. I was super impressed with how well it worked out and the DeepSeq model is like.

was nailing everything I threw at it, which was really cool. typically with Olamma, it's a gamble. You're a language model on your laptop. They're only going to be so powerful. So a lot of times they hallucinate or just return janky stuff. man, even at the smaller size running on my laptop, DeepSeek is just crushing it.

Chris Gmyr (33:10)
Yeah.

TJ Miller (33:25)
Definitely worthwhile something checking out, but yeah, diving into like now converting the APIs around. And I ran into something with like text completion and ended up reaching out to one of the Olamo maintainers on Twitter. And man, that team over there is like super helpful. I was like, this feels kind of weird. And they're like, all right, well, I'll go take a look and see if we can like make some adjustments to it.

Are you serious? That's great. Like, this is crazy. you know, just their willingness to kind of like look at things and like I found something like a discrepancy in their docs and just happened to mention it in the like tweet chain. And the next thing I knew, I was like mentioned in a PR that, you know, they were updating their docs. So like, I was just really impressed with the Olauma team and

Chris Gmyr (33:57)
Awesome.

TJ Miller (34:14)
their responsiveness to stuff and very, very impressed by the DeepSeek model. There was a lot of hype around it. I think the hype's real. I think if you're concerned about data privacy and DeepSeek being Chinese hosted, Chinese company, then go use Grok, use Olamma. But definitely spend a little time messing with DeepSeek because it's very disruptive and I'm thoroughly impressed.

Chris Gmyr (34:37)
Yeah, that's awesome. And I think there is another little blog post in there too, like how to set up DeepSeq with all the other tools that you mentioned for like local tinkering or development or something like that. think anything like that being that new, it would be helpful for the general public light users of AI to kind of see how all these pieces work together.

TJ Miller (35:00)
You know, yes, that tweet was absolutely something I should turn into a blog post. You're a hundred percent right. I've been like really slacking on blog writing. And I think that there's like some nuggets in there for sure. So maybe, maybe after I finished this Olamma conversion across like today and tomorrow, then like, maybe I'll, I'll try to spin up a blog post this weekend, but yeah. Yeah, you're right. I should, I should write, I should write something about it, but yeah, that's kind of where like Prism's at.

kind of the fun I've been having on it lately. yeah, Olamas, it's a very impressive project and it's always been one of my priorities with Prism is to like make sure we support everything. yeah, looking forward to seeing that like evolves and what other possibilities it opens up now that we're using their native API. So I don't know, man, do you want to call it at that?

Chris Gmyr (35:48)
Yeah, let's go ahead and wrap up. So thanks for listening to the Slightly Caffeinated podcast. Show notes and all the links and social channels are down below and also available at slightlycaffeinated.fm. Thank you all for listening, and we'll catch you all next week.

TJ Miller (36:03)
Yeah, cool. Thank you all.

Creators and Guests

Chris Gmyr
Host
Chris Gmyr
Husband, dad, & grilling aficionado. Loves Laravel & coffee. Staff Engineer @ Curology | TrianglePHP Co-Organizer
TJ Miller
Host
TJ Miller
Dreamer ⋅ ADHD advocate ⋅ Laravel astronaut ⋅ Building Prism ⋅ Principal at Geocodio ⋅ Thoughts are mine!
YNAB, CLI Tooling, and Deepseek AI
Broadcast by