WEBVTT

1
00:00:04.679 --> 00:00:09.480
Hey, folks, welcome back to
another episode of the Ruby Rogues podcast.

2
00:00:09.759 --> 00:00:14.119
This week, on our panel we
have Valentino Stole. Hey Now, I'm

3
00:00:14.199 --> 00:00:17.839
Charles Maxwood from Top End Devs.
We have a special guest this week and

4
00:00:17.960 --> 00:00:21.760
it is Obi Fernandez. Obi,
it's been a while. How are things

5
00:00:21.800 --> 00:00:25.839
going? Pretty good? Man?
Thanks for the invite. It's an honor

6
00:00:25.879 --> 00:00:30.239
to be back. Yeah, So
do you want to just I know you're

7
00:00:30.239 --> 00:00:36.039
writing an AI book and I see
you active in the Ruby AI discord.

8
00:00:36.119 --> 00:00:39.719
But what else are you up to? What else should people know about you?

9
00:00:42.079 --> 00:00:45.560
Well, I've been I've been living
mostly in Mexico City since twenty seventeen,

10
00:00:45.640 --> 00:00:51.119
So people usually find that interesting and
asking what that's about because I grew

11
00:00:51.200 --> 00:00:55.799
up outside of New York City and
spent twenty years in Atlanta, you know,

12
00:00:55.840 --> 00:00:59.119
in the south east US. But
yeah, Mexico City is super cool.

13
00:01:00.000 --> 00:01:04.879
It's a great place for expats to
live, great lifestyle. And I've

14
00:01:04.879 --> 00:01:11.519
done a couple of startups in recent
years. One was an NFT platform that

15
00:01:11.519 --> 00:01:15.519
that kind of went took me,
took me in one hundred other employees on

16
00:01:15.359 --> 00:01:18.159
a on a big roller coaster ride
with venture backing, and then crashed and

17
00:01:18.200 --> 00:01:21.920
burn along with the rest of the
crypto market a couple of years ago,

18
00:01:23.799 --> 00:01:29.239
so that was interesting. And yeah, for the last year, I've been

19
00:01:29.280 --> 00:01:37.599
working on another startup called Olympia,
which is a platform that gives you AI

20
00:01:37.799 --> 00:01:45.519
powered consultants to add to your team. Is kind of humanizes AI. So

21
00:01:47.599 --> 00:01:49.760
yeah, that that that's been a
lot. That's been a lot of fun.

22
00:01:49.760 --> 00:01:53.280
And it's doing well, growing about
ten twenty percent month a month.

23
00:01:53.400 --> 00:01:59.280
So oh wow, that doesn't seem
to be letting up. Good deal.

24
00:02:00.280 --> 00:02:04.599
I love Olympia. Oh, I'm
happy. I'm a happy user here.

25
00:02:05.400 --> 00:02:09.159
Super cool. I didn't actually realize
that. That's a surprise. That's awesome.

26
00:02:12.719 --> 00:02:15.879
So where where do you find it? Just Olympia dot com or something

27
00:02:15.439 --> 00:02:22.280
Olympia dot chat that chat Okay,
yeah, I need to I need to

28
00:02:22.280 --> 00:02:27.879
bite the bullet and spend on the
un the AI or dot com writing there,

29
00:02:27.879 --> 00:02:32.159
but they're expensive. Yeah, we'll
have to check it out. In

30
00:02:32.199 --> 00:02:36.319
the meantime, we're I kind of
want to get back to the book.

31
00:02:36.520 --> 00:02:40.919
You know that you're writing about AI
and Ruby and I'm kind of curious.

32
00:02:40.960 --> 00:02:46.319
It sounds like you've been working in
this for a while, but how did

33
00:02:46.319 --> 00:02:50.800
you get started with this and you
know, what, what have you done

34
00:02:50.840 --> 00:02:57.360
that makes you the guy to write
this book? Well? This this isn't

35
00:02:57.400 --> 00:03:04.280
my first startup that I've tried to
do in AI. It's like back in

36
00:03:04.319 --> 00:03:08.919
twenty eighteen, twenty nineteen, as
a side project that kick Us Partners,

37
00:03:08.960 --> 00:03:15.680
which was my consulting company that I
merged with Magma Labs. Back in twenty

38
00:03:15.719 --> 00:03:23.639
twenty, I did a project called
Demos Guru and the Idea. So I'm

39
00:03:23.680 --> 00:03:29.560
also involved in music and music production, and so I'm and was running a

40
00:03:29.560 --> 00:03:34.479
somewhat active record label at the time
as a hobby. So one of the

41
00:03:34.520 --> 00:03:39.960
problems that identified for myself and other
people that run record labels is that you

42
00:03:40.000 --> 00:03:44.479
get this flood of demos that have
nothing to do with the kind of music

43
00:03:44.520 --> 00:03:51.520
you put out, or they're just
not up to par in different ways,

44
00:03:51.560 --> 00:03:58.319
you know, not mixed properly and
whatnot. And I didn't actually realize that

45
00:03:58.800 --> 00:04:01.800
machine learning stuff, it was a
craze back in that era twenty eighteen,

46
00:04:01.840 --> 00:04:08.000
twenty nineteen. I was just reading
some analysis of it and and I don't

47
00:04:08.000 --> 00:04:12.280
know, maybe COVID scrambled my brain, but I thought it was pretty unique.

48
00:04:12.280 --> 00:04:15.280
What I what I was thinking of
doing back then, is like basically

49
00:04:15.240 --> 00:04:20.600
trying to use machine learning to detect
different qualities of a piece of music,

50
00:04:20.639 --> 00:04:27.279
including its genre mastering, you know, quality of its mastering and mixing it,

51
00:04:27.600 --> 00:04:31.079
and then other things that you could
use to identify music. So worked

52
00:04:31.079 --> 00:04:36.920
on that for nearly a year.
I didn't get anywhere really really really hard

53
00:04:38.000 --> 00:04:43.279
math and you know, just kind
of difficult problem that wasn't cracked yet.

54
00:04:45.839 --> 00:04:47.519
I'm not sure that it's cracked yet
right now. Actually, no, I

55
00:04:47.519 --> 00:04:51.120
think about it. I'm really thought
about it in a while. But the

56
00:04:51.160 --> 00:04:54.839
people are doing the reverse, which
is taking text, you know, and

57
00:04:54.879 --> 00:04:58.319
turning it into music, and I
was trying to take music and turn into

58
00:04:58.360 --> 00:05:00.720
text, which I haven't seen yet. So if any was working on that,

59
00:05:00.839 --> 00:05:04.920
reach out to me. I'm super
interested. But yeah, like a

60
00:05:05.560 --> 00:05:09.920
we were talking about Olympia right like
like a year ago I started working on

61
00:05:09.959 --> 00:05:14.759
this. This startup actually actually goes
before that. So the last Rails comp

62
00:05:15.000 --> 00:05:16.959
I went to, which was the
first Rails comp in a while, was

63
00:05:17.000 --> 00:05:24.360
in Atlanta last year, and I
was super excited about launching like a chat

64
00:05:24.360 --> 00:05:30.800
TBT clone in Rails at the time, so so I scrambled and I made

65
00:05:30.839 --> 00:05:34.399
a little platform called Magma Chat and
I opened sourced it during Rails comp and

66
00:05:34.480 --> 00:05:41.439
kind of announced that it showed it
to a bunch of people even at that

67
00:05:41.560 --> 00:05:44.160
comp. Even at the Rails comp, I mean a lot of people.

68
00:05:44.199 --> 00:05:46.319
I was showing it too. Had
never seen chat to BT yet because it

69
00:05:46.399 --> 00:05:50.959
was still recently, you know,
fairly recent didn't know what's going on.

70
00:05:51.959 --> 00:05:57.120
So blew some minds just in terms
of showing people what you know you could

71
00:05:57.160 --> 00:06:04.959
do with GPT four. And then
my girlfriend kept complaining about her copywriter at

72
00:06:05.000 --> 00:06:09.600
work. So she was she was
running partnerships for a large conference series,

73
00:06:10.360 --> 00:06:15.639
and she had this copywriter in India
who was paid very little money and produced

74
00:06:15.800 --> 00:06:21.759
very low quality copywriting, so she
was rewriting everything. And I said,

75
00:06:21.759 --> 00:06:25.680
well, hey, I got this
Magma Chat thing deployed. Can I make

76
00:06:25.720 --> 00:06:30.000
you a copywriter? But and she
said sure, and then I gave it

77
00:06:30.040 --> 00:06:33.519
to her and I watched, I
watched her use it, and she's just

78
00:06:33.560 --> 00:06:38.439
started using this thing for hours a
day and basically started doing all her copywriting

79
00:06:38.439 --> 00:06:43.759
herself. And then very soon thereafter
she said, can you can you make

80
00:06:43.800 --> 00:06:46.439
me a whole editorial team? And
I said, well, what do you

81
00:06:46.480 --> 00:06:49.079
need And she said, give me
a copy editor, give me an se

82
00:06:49.120 --> 00:06:54.560
O expert, give me a marketing
expert, you know, give me a

83
00:06:54.600 --> 00:06:58.240
PR expert. So so I put
it together and very quickly realized, Okay,

84
00:06:58.240 --> 00:07:01.000
there's got to be a startup here, because she was willing to pay

85
00:07:01.040 --> 00:07:04.079
for it, and I started showing
it to other people and they were interested

86
00:07:04.079 --> 00:07:08.000
in paying for it. So I
said, do you want to you want

87
00:07:08.000 --> 00:07:11.560
to be my CEO? Because I
was CEO of my last startup and I

88
00:07:11.600 --> 00:07:15.920
hated it. I'm more of a
natural CTO as you might imagine, so

89
00:07:15.920 --> 00:07:19.240
so yeah, so I brought her
on board and we started Olympic together,

90
00:07:20.199 --> 00:07:26.279
and I had a beta product ready
in a couple of months. We launched

91
00:07:26.279 --> 00:07:32.240
it in July into close beta,
and then we launched to the public in

92
00:07:32.279 --> 00:07:41.120
September. And it's all it's not
using Python or typescript or any of the

93
00:07:41.120 --> 00:07:45.319
typical, you know, usual sub
suspects you'd want to use for something like

94
00:07:45.360 --> 00:07:50.680
this, or you'd expect to use. Brought in rails right from the beginning,

95
00:07:51.360 --> 00:07:56.639
kind of forked Magna chat when I
started, and then eventually ended up

96
00:07:56.680 --> 00:08:00.560
replacing almost all of it. Have
not done a good job of keeping magma

97
00:08:00.639 --> 00:08:05.079
Chat up to date. Sorry whoever
picked that up really screwed you over on

98
00:08:05.120 --> 00:08:11.360
that. But my partners at Magna
Lab have you know, also kind of

99
00:08:11.399 --> 00:08:15.439
fork from where I started, and
they have a commercial version of Magma Chat

100
00:08:16.160 --> 00:08:20.000
that they'll implement for people, you
know, behind the firewall kind of thing.

101
00:08:20.959 --> 00:08:24.879
So, yeah, you were asking
about the book. I mean essentially

102
00:08:24.920 --> 00:08:30.079
I took you know, I took
notes. Given I've written technical books before,

103
00:08:31.279 --> 00:08:35.000
it's just a few, so you
know, I was taking notes along

104
00:08:35.039 --> 00:08:39.080
the way. And right from the
beginning, I was like, Wow,

105
00:08:39.120 --> 00:08:45.559
this is comp to me completely novel
kinds of programming, you know, it

106
00:08:45.679 --> 00:08:50.440
just it's just totally new paradigm in
the way, just things I haven't seen

107
00:08:50.440 --> 00:08:54.080
before. So I was like,
okay, I started documenting what were essentially

108
00:08:54.120 --> 00:08:58.240
patterns and approaches and things, and
I guess I did a little bit of

109
00:08:58.240 --> 00:09:01.080
blogging about it as well. I
mean some of the early blogging and did

110
00:09:01.080 --> 00:09:07.559
on the subject went viral. When
something when the topic is so hot,

111
00:09:07.600 --> 00:09:09.919
like the D and D post I
did for a I got hundreds of thousands

112
00:09:11.000 --> 00:09:18.399
of the reads on medium, so
that was kind of insane. And yeah,

113
00:09:18.519 --> 00:09:20.960
so that was that was what first
took beyond it. So like when

114
00:09:22.000 --> 00:09:30.600
I first got access to the open
AI API, my kids were actually here.

115
00:09:30.879 --> 00:09:35.759
So I have a twenty seven year
old daughter and a twenty four year

116
00:09:35.799 --> 00:09:39.480
old son and now sixteen year old
son, and the sixteen year old is

117
00:09:39.519 --> 00:09:46.120
really into Dungeons and Dragons, and
as a family, we did a lot

118
00:09:46.159 --> 00:09:50.919
of gaming growing up as well.
So they were here for spring break or

119
00:09:52.320 --> 00:09:54.679
I guess it wasn't spring break.
Oh, I guess it was like a

120
00:09:54.720 --> 00:09:58.799
late holiday break. I can't remember
exactly, but they were all here in

121
00:09:58.799 --> 00:10:01.200
Mexico City. We're all here at
the same time. We were playing Dungeon

122
00:10:01.240 --> 00:10:05.159
and Dragons, and I said,
hey, I bet you that this this

123
00:10:05.279 --> 00:10:13.120
AI thing could be a good DM
for a role playing game. And then

124
00:10:13.240 --> 00:10:15.559
so so I started playing around with
it, and I tried to make an

125
00:10:15.559 --> 00:10:18.519
app for it, and then I
described it in the blog post, and

126
00:10:18.639 --> 00:10:22.159
that blog post blew up really big, and I started getting that like you

127
00:10:22.159 --> 00:10:28.320
know, Spidey sense of like,
okay, here's another big wave to ride,

128
00:10:28.559 --> 00:10:35.919
you know, so go go ahead, go ahead, Valentino. Oh

129
00:10:37.039 --> 00:10:39.360
no, I mean I have a
lot to say here. Yeah, I

130
00:10:41.120 --> 00:10:45.639
mean, I love the dungeons and
dragons use case, which is kind of

131
00:10:46.279 --> 00:10:52.120
interesting now with chat GPTs like multimodetdality, like just talking with it. I

132
00:10:52.159 --> 00:10:56.000
had like a long ca car ride
recently where I was just like talking through

133
00:10:56.000 --> 00:11:01.799
a business idea and it's pretty remarkable. But yeah, I mean the whole

134
00:11:01.840 --> 00:11:05.639
Magma chat stuff. I love that. It was actually really inspirational, like

135
00:11:07.399 --> 00:11:11.919
for how to use AI in a
lot of ways. So you're out there

136
00:11:11.000 --> 00:11:15.639
wondering, like that's definitely like a
great place to start to just like pick

137
00:11:15.679 --> 00:11:20.320
apart a you know, how to
do X Y z uh, you know,

138
00:11:20.879 --> 00:11:22.559
until your book comes out, because
a lot of that is conveyed in

139
00:11:22.600 --> 00:11:26.519
there. Well the books available,
we'll talk. You can get it right

140
00:11:26.559 --> 00:11:31.759
now on lean pup. And there's
actually much better code out there now than

141
00:11:31.799 --> 00:11:35.720
Magma chats. So if you're listening
to this, don't don't don't go use

142
00:11:35.759 --> 00:11:41.600
Magma chat. I would use ray
for Rails or one of the other newer,

143
00:11:41.759 --> 00:11:45.679
you know kind of things for this, But yeah, I mean I'd

144
00:11:45.679 --> 00:11:48.960
love to chat through some of the
just the concepts in there. We don't

145
00:11:48.960 --> 00:11:52.279
have to talk about the details of
it, but like you know, kind

146
00:11:52.320 --> 00:11:58.159
of just like giving memory to like
agents, right, which I thought was

147
00:11:58.399 --> 00:12:03.799
really interesting idea. And you know
how because a lot of people think,

148
00:12:03.919 --> 00:12:07.519
like, you know, to your
point of like making a copywriter or Dungeon

149
00:12:07.639 --> 00:12:11.519
dragons master, right, like these
are all kind of like just roles,

150
00:12:11.639 --> 00:12:13.000
and a lot of people think,
oh, like you could just do that

151
00:12:13.039 --> 00:12:18.320
with chat GPD, give it a
system message or precluding user messages to say

152
00:12:18.519 --> 00:12:22.000
hey, you're now this role like
and a lot of people just say,

153
00:12:22.000 --> 00:12:26.559
okay, well, why would you
need any other service or any other like

154
00:12:26.159 --> 00:12:31.559
you know, advanced thing where CHATBD
is just going to do that for you,

155
00:12:31.679 --> 00:12:33.879
Like, you know, what are
you doing on top of that?

156
00:12:35.000 --> 00:12:39.039
Right? Like what is because there's
like a lot of like yeah, the

157
00:12:39.159 --> 00:12:45.080
key insight there and which is really
the foundation of why me and many other

158
00:12:45.080 --> 00:12:52.159
people can do startups on this stuff. Is that prompt engineering. To us

159
00:12:52.200 --> 00:12:56.320
as programmers seems like no big deal. It's just how you use the tool.

160
00:12:58.519 --> 00:13:03.600
But to a person is not a
programmer, it really really seems like

161
00:13:03.679 --> 00:13:09.240
programming, which means they're not interested
in doing it or not very good at

162
00:13:09.279 --> 00:13:11.600
it. You know, it's just
not the way their brain works. So

163
00:13:11.960 --> 00:13:18.679
when you give them an option,
it's like our our profile at Olympia.

164
00:13:18.720 --> 00:13:22.399
Like our heaviest power users that we've
interviewed, a lot of them are non

165
00:13:22.399 --> 00:13:26.320
technical. They're not they're not programmers. They are early adopters. They're very

166
00:13:26.360 --> 00:13:33.039
excited by the technology and they follow
religiously, but they're not so interested in

167
00:13:33.120 --> 00:13:37.960
learning the intricacies in and outs of
a prompt engineering And I mean, yeah,

168
00:13:39.960 --> 00:13:41.200
no, I'm just I kind of
want to bring it up a level

169
00:13:41.279 --> 00:13:46.519
or two because you know, we
went right into kind of the the GPT

170
00:13:46.279 --> 00:13:52.000
largely model and you know and chat
GT GPT like things and prompt engineering,

171
00:13:54.720 --> 00:13:58.320
and so I'm just wondering, as
far as you know your book and some

172
00:13:58.360 --> 00:14:01.799
of these other things, is that
the hope of your book is covering that

173
00:14:01.840 --> 00:14:07.000
stuff and maybe you don't go into
things like transcriptions with whisper or you know,

174
00:14:07.240 --> 00:14:09.879
computer vision or things like that.
And the other question that I have

175
00:14:11.039 --> 00:14:13.639
is is is that where people can
jump in and how do they do that

176
00:14:15.360 --> 00:14:18.919
right? Because because I want to
make it very approachable for people to go,

177
00:14:18.000 --> 00:14:20.559
huh, this is the Okay,
I'm in a new way. I

178
00:14:20.720 --> 00:14:24.840
this is this is where I jump
in. And yeah, I don't know

179
00:14:24.879 --> 00:14:31.480
if prompt engineering is the way to
go and anyway, so here's my answer

180
00:14:31.519 --> 00:14:37.919
to that and the read. The
thing that kind of tipped me over into

181
00:14:37.000 --> 00:14:43.639
like, Okay, I should start
this book now was that an old friend

182
00:14:43.639 --> 00:14:48.320
of mine, Tom Mornini, who
might be listening to the show. We

183
00:14:48.559 --> 00:14:50.279
were at a conference. I was
giving a talk on the eye, and

184
00:14:50.519 --> 00:14:52.960
he was in the audience and raised
his hand at the end of the talk

185
00:14:54.039 --> 00:14:56.120
and said, where do I get
started? Like this is also overwhelming,

186
00:14:58.039 --> 00:15:01.440
and that that was a spark where
I was like, Okay, I got

187
00:15:01.440 --> 00:15:05.039
to start working on this, and
I literally, I literally start working on

188
00:15:05.080 --> 00:15:11.279
the way home, on the flight, and then just dedicated a huge amount

189
00:15:11.279 --> 00:15:15.320
of hours to try and get as
much done as possible on it as quickly

190
00:15:15.320 --> 00:15:24.080
as possible. The reason is my
belief, and I'm not sure how many

191
00:15:24.120 --> 00:15:28.240
other people necessarily share this, but
I mean think it's trying to spread is

192
00:15:28.279 --> 00:15:33.759
that you don't have to start an
AI project in order to use this stuff,

193
00:15:33.879 --> 00:15:35.240
Like you don't have to have like
an idea for an AI startup or

194
00:15:35.279 --> 00:15:43.480
something like that. Like almost everyone
who's currently maintaining or developing an application on

195
00:15:43.279 --> 00:15:52.200
Ruby unrails can probably get some benefit
from taking a particularly complex part of their

196
00:15:52.679 --> 00:16:02.720
code and dropping in a discrete AI
component to handle it so that you have

197
00:16:02.720 --> 00:16:15.759
an example. So the example that
the example that I like using. So,

198
00:16:15.759 --> 00:16:22.840
so okay, anything that involves user
generated content, for instance, you

199
00:16:22.919 --> 00:16:26.919
mean like a blog, like a
blog with comments and whatnot. And I

200
00:16:26.960 --> 00:16:30.120
realized that there's services that that you
can use to to do what I'm about

201
00:16:30.159 --> 00:16:36.000
to describe. But I mean anything
involves evaluation of user generated content. Right

202
00:16:36.000 --> 00:16:42.440
now you can do very very easily
with using large language models, and you

203
00:16:42.480 --> 00:16:47.559
know existing APIs that that's kind of
a no brainer use case. But but

204
00:16:47.679 --> 00:16:51.440
when I go into the book and
I've been I've been using it as an

205
00:16:51.480 --> 00:16:56.559
example and talks and whatnot, is
that you can actually take parts your code

206
00:16:57.840 --> 00:17:02.720
that are implemented code. But if
you had a little person that you could

207
00:17:02.759 --> 00:17:07.599
stick into your code, then you
might want to use you a little person

208
00:17:07.640 --> 00:17:11.480
instead. So in Olympia, the
example I give is the example of the

209
00:17:11.519 --> 00:17:21.720
account manager class, and the account
manager class handles a few different operations involving

210
00:17:21.960 --> 00:17:30.799
changing a customer's account, most notably
adding an assistant to your account. So

211
00:17:30.000 --> 00:17:36.480
internally, so in the user interface, this is this works with a button,

212
00:17:36.880 --> 00:17:41.000
so like you you look through a
catalog of users that are available to

213
00:17:41.039 --> 00:17:45.160
add. We call them clones.
YadA YadA. But when the user presses

214
00:17:45.160 --> 00:17:49.119
that button, internally, the internal
API uses plane plane language. The internal

215
00:17:49.200 --> 00:17:56.079
API tells the account manager user with
this ID would like to add this bot

216
00:17:56.079 --> 00:18:03.839
config with this ID to their account. And if I here, I'll just

217
00:18:04.000 --> 00:18:10.200
I'll just pull up the the actual
prompts. I can read it to you.

218
00:18:12.160 --> 00:18:18.519
So it sounds like though you've got
some form of interaction that I,

219
00:18:18.720 --> 00:18:25.720
as your user, do and that
triggers essentially a prompt to be sent,

220
00:18:25.799 --> 00:18:30.960
Right, it's not this explicit function
or method call that there's a Yeah,

221
00:18:30.960 --> 00:18:37.559
there's a component in my app which
has the role of account manager, and

222
00:18:37.119 --> 00:18:45.240
it has a selection of functions that
it can call, and those functions can

223
00:18:45.559 --> 00:18:52.799
mutate the customer's account. Right.
It also has functions for communicating with the

224
00:18:52.839 --> 00:18:59.079
customer or with an account service rep
or both. And it also has a

225
00:18:59.160 --> 00:19:04.240
finalized because the request is encapsulated in
a change request object, which is tracked

226
00:19:04.240 --> 00:19:08.680
in the database. So when it's
done handling the change request calls finalized which

227
00:19:10.319 --> 00:19:14.039
persists that along with the transcript of
what happened. But it gives you a

228
00:19:14.079 --> 00:19:19.799
tremendous amount of flexibility and also it
saves you time development time. So I

229
00:19:19.839 --> 00:19:23.680
wrote this very very quickly. I
mean, once you identify the pattern,

230
00:19:25.480 --> 00:19:30.759
you start wanting to look for places
to use it. And then the prompt

231
00:19:32.160 --> 00:19:38.559
reads like the requirements for the code. Okay, So the way that you

232
00:19:38.680 --> 00:19:41.880
described this, I think it's okay
to do this on a podcasts. I

233
00:19:41.920 --> 00:19:44.440
think people are listening. So this
is the this is the prompt for my

234
00:19:44.519 --> 00:19:51.079
account manager component. Okay. You
are an account manager for Olympia, a

235
00:19:51.119 --> 00:19:56.359
platform that provides AI powered consultants and
personal AI clones. Your role is to

236
00:19:56.400 --> 00:20:02.000
assist Olympia Clone owners by answering their
questions, help them configure and manage their

237
00:20:02.039 --> 00:20:06.359
e clones, and executing tasks related
to the clones and Olympia platform. That

238
00:20:06.440 --> 00:20:10.119
itself is an approach or pattern that's
described in the book. You're basically giving

239
00:20:10.119 --> 00:20:15.279
a role to the AI. So
and then now here come the instructions.

240
00:20:15.319 --> 00:20:18.880
When interacting with clone owners. You
should provide clear, concise, helpful responses

241
00:20:18.920 --> 00:20:23.440
to the inquiries about account account management, building platform features in clone configuration.

242
00:20:25.160 --> 00:20:26.599
The reason I can do that is
because I give it functions to be able

243
00:20:26.640 --> 00:20:33.160
to look up that information and convey
it to the customer assist with tasks such

244
00:20:33.200 --> 00:20:37.400
as initiating client conversations with their I
clones, modifying. Oh, I think

245
00:20:37.440 --> 00:20:42.559
I picked up there. I'm bringing
the prop from the clone manager, not

246
00:20:42.599 --> 00:20:48.000
the account manager point. Let me
let me take a step back for a

247
00:20:48.039 --> 00:20:49.799
second. I think if you're listening
to what I'm just saying, you kind

248
00:20:49.839 --> 00:20:52.640
of get the gist of it.
You can give instructions to these things.

249
00:20:52.839 --> 00:20:57.920
There's another one which has smaller scope. This one's to help specifically with people

250
00:20:59.000 --> 00:21:03.240
that run clones on Olympia. There's
one that is an account manager for regular

251
00:21:03.240 --> 00:21:07.240
customers, and one thing it can
do is add a particular botcom fig to

252
00:21:07.319 --> 00:21:12.839
your account. We rolled this out
and within a week week and a half,

253
00:21:14.240 --> 00:21:18.720
a JPR customer service guy goes,
hey, we have a problem with

254
00:21:18.920 --> 00:21:25.920
the clone adding. Someone added a
clone and their account is inactive. Would

255
00:21:25.960 --> 00:21:30.279
you like me to create a notion
story for it? And I opened the

256
00:21:30.359 --> 00:21:33.160
code while I was chatting with him
and Slack about it, and I looked

257
00:21:33.160 --> 00:21:36.279
at it and I said, no, I think I got it. And

258
00:21:36.359 --> 00:21:48.960
I added in a statement to the
prompt which said only allow addition of botcomfigs

259
00:21:49.000 --> 00:21:53.519
if your account is active, I
literally just type that into the prompt of

260
00:21:53.519 --> 00:22:00.640
the account. Oh you get what
I'm saying. You didn't have to add

261
00:22:00.640 --> 00:22:03.559
a conditional to the code, you
know, extra checks or unit tests or

262
00:22:03.839 --> 00:22:11.480
yeah anything, modify your pundit scope
or your pundit rules. Yeah. I

263
00:22:11.559 --> 00:22:19.839
literally just enhanced the instructions to the
account manager and did a quick manual test

264
00:22:19.880 --> 00:22:25.000
and yeah, it worked, and
we're good to go. And in fact,

265
00:22:25.880 --> 00:22:27.240
you know, if you think about
what you would do traditionally with that,

266
00:22:27.440 --> 00:22:30.000
like you might you know, if
you have a state which is invalid

267
00:22:30.000 --> 00:22:33.440
like that, then you might have
to actually like write an email template for

268
00:22:33.640 --> 00:22:37.480
it, you know, in email
or and whatnot. And in this case,

269
00:22:37.519 --> 00:22:42.279
you don't because it's instructed to communicate
with the user and let it know

270
00:22:42.319 --> 00:22:47.839
what happened with the operation. So
if their account is not active and it

271
00:22:47.880 --> 00:22:49.720
doesn't add the bout configura, we'll
send them an email and say, sorry,

272
00:22:51.119 --> 00:22:52.720
your account's not active, soul,
I couldn't do the thing you asked

273
00:22:52.720 --> 00:23:02.599
me to do. So going back
to the idea of getting started, then,

274
00:23:03.000 --> 00:23:04.920
I mean, is that is is
this the kind of thing you're encouraging

275
00:23:04.920 --> 00:23:07.680
people to get started with is just
a I don't know. I mean,

276
00:23:07.680 --> 00:23:14.119
this is at GBT and start writing
prompts and it doesn't use chat g BT

277
00:23:14.319 --> 00:23:18.920
uses it uses uh, you know, the API, and there are there

278
00:23:18.960 --> 00:23:25.799
are I have my own framework called
Ray and there's other you know, frameworks

279
00:23:25.839 --> 00:23:30.279
for for how to use this.
You could you could go at it at

280
00:23:30.319 --> 00:23:33.519
different abstraction levels. Right, So
I mean, but for the most part,

281
00:23:33.599 --> 00:23:40.519
you need to understand the chat completion
operation. So this this concept of

282
00:23:41.400 --> 00:23:45.680
you you give a system directive that
kind of sets the stage for what you

283
00:23:45.680 --> 00:23:48.839
want the AI to do, and
then you have a conversation with it where

284
00:23:49.119 --> 00:23:52.240
where you say something and then they
say something and then you respond so and

285
00:23:52.160 --> 00:23:56.119
and so forth. So you have
to understand that modality. You can engage

286
00:23:56.119 --> 00:24:03.680
with that modality at a couple different
levels of traction. Those abstraction layers are

287
00:24:03.680 --> 00:24:07.759
provided to you by a library.
So for instance, right, the one

288
00:24:07.799 --> 00:24:11.599
that describe in the book, And
I mean you can go whole hog,

289
00:24:11.640 --> 00:24:15.079
which is how I would characterize the
account manager example I've been talking about.

290
00:24:15.119 --> 00:24:21.759
But you can also do much much
smaller things. So like one of the

291
00:24:21.759 --> 00:24:25.680
patterns in the book is the predicate
pattern, and that's just a small component

292
00:24:25.680 --> 00:24:30.079
that answers a question yes or no. We answer yes no questions all the

293
00:24:30.079 --> 00:24:38.200
time in our code, but they're
usually very very narrow scope, and if

294
00:24:38.200 --> 00:24:41.440
they're not narrow scope, then they
tend to be brutal or difficult to maintain

295
00:24:41.640 --> 00:24:45.920
because pretty much any unanticipated state will
break it. Right, And one of

296
00:24:45.960 --> 00:24:51.640
the great things about AI is that
if you implement a component like this with

297
00:24:51.640 --> 00:24:56.720
with an l M back end,
it can sometimes handle unexpected situations very very

298
00:24:57.079 --> 00:25:06.400
smoothly. You know. Yes,
I think you bring up a great abstract

299
00:25:06.440 --> 00:25:10.559
point in it's a lot See,
there's a lot of people that are like,

300
00:25:10.559 --> 00:25:12.240
oh, no, like, you
know, all this AI stuff is

301
00:25:12.240 --> 00:25:17.359
coming from my job in X right
like, and programmers for sure, like

302
00:25:17.880 --> 00:25:18.920
like you see this and you're like, oh, why don't we just have

303
00:25:18.960 --> 00:25:23.880
a programmer bot and it takes requests
and we just you know, chat to

304
00:25:23.960 --> 00:25:27.200
it and it'll you know, make
our application for us, right like,

305
00:25:27.440 --> 00:25:32.519
which is not totally unreasonable, but
is unreasonable in a lot of ways.

306
00:25:33.559 --> 00:25:36.599
Uh, you know, hallucinations come
to mind, like how do you make

307
00:25:36.599 --> 00:25:41.920
sure that the account manager right like
just doesn't start deleting things? And right

308
00:25:41.119 --> 00:25:45.039
like that there's like a rogue function
that it's created along the way, and

309
00:25:45.920 --> 00:25:48.599
now it's part of that tool chain. Like I know, there are a

310
00:25:48.640 --> 00:25:52.880
lot of checks that you can put
in place, you know, to prevent

311
00:25:52.920 --> 00:25:57.200
that kind of stuff. But you
know, a lot of it is just

312
00:25:57.240 --> 00:26:02.720
like getting natural language, though brought
to whatever that you are doing, to

313
00:26:02.799 --> 00:26:07.599
compliment. It's how I've seen it
worked most effectively, which seems to be

314
00:26:07.680 --> 00:26:11.160
how you've kind of created your framework
here for rey, right, whereas it's

315
00:26:11.240 --> 00:26:17.519
complimenting the experience that you already have
as a real developer, just making it

316
00:26:17.559 --> 00:26:22.559
easier to take advantage of this new
tool, which is really AI. Do

317
00:26:22.599 --> 00:26:26.119
you see it that way or do
you also see like maybe it is coming

318
00:26:26.119 --> 00:26:29.200
from your job. No, I
don't think well, I don't think it's

319
00:26:29.240 --> 00:26:33.720
coming for any of our jobs anytime
soon. And it most recently I got

320
00:26:33.759 --> 00:26:42.960
I got access to something called GitHub
Copilot workspace. You got to sign up

321
00:26:42.960 --> 00:26:48.519
for it. There's a waiting list. It's a preview product where the interface

322
00:26:48.599 --> 00:26:52.960
is super cool and like kind of
the promise of it is super cool.

323
00:26:52.880 --> 00:27:02.000
Essentially, you attach it to your
repo and then you start a session and

324
00:27:02.039 --> 00:27:06.359
in the session, you go I
need to fix this issue, you know,

325
00:27:06.480 --> 00:27:07.799
or I need to add this feature. You describe what it is in

326
00:27:08.079 --> 00:27:12.519
plain language, and it scans the
code and then it comes up with a

327
00:27:12.519 --> 00:27:18.160
plan of action, so a checklist
of like I need to do this and

328
00:27:18.200 --> 00:27:22.680
this and this and this and changes
this class and so on and so forth.

329
00:27:22.920 --> 00:27:26.960
It kind of looks like what a
discipline developer would do when you sit

330
00:27:27.039 --> 00:27:32.799
down because you picked up a feature
or an issue. So far, so

331
00:27:32.880 --> 00:27:36.279
good. I was really impressed with
that part, and then I said,

332
00:27:36.480 --> 00:27:42.359
okay, go right, Like I
asked it to change a particular class,

333
00:27:42.359 --> 00:27:48.400
and maybe I was too ambitious.
I wanted it to refactor, you know,

334
00:27:48.519 --> 00:27:56.079
three different, three different, very
similar implementations into one thing that I

335
00:27:56.160 --> 00:28:00.000
want to get into bloody details.
But so I had go. And then

336
00:28:00.000 --> 00:28:03.920
I thought about it for a while, and then it pulled up the code

337
00:28:03.000 --> 00:28:07.640
and I saw the changes in action, so that part's super cool. And

338
00:28:07.680 --> 00:28:11.079
then it highlighted a bunch of the
code, the existing code, and it

339
00:28:11.160 --> 00:28:17.960
deleted it, and then it put
in a bunch of nonsensical methods to replace

340
00:28:18.000 --> 00:28:21.960
it that had nothing to do with
what it was supposed to do. And

341
00:28:22.640 --> 00:28:27.839
I was most definitely underwhelmed. And
now it is very very possible that this

342
00:28:27.880 --> 00:28:37.000
works much better with Python and typescript, but it doesn't know the rails way,

343
00:28:37.359 --> 00:28:42.880
that's for sure. Because it was
garbage. It was hot garbage.

344
00:28:42.880 --> 00:28:47.839
I tried to work with it a
little bit, you know, And so

345
00:28:48.119 --> 00:28:52.559
now this needs to get much better, and there are I think very credible

346
00:28:52.599 --> 00:28:57.920
reasons to think that it might not
get that much better anytime soon. I

347
00:28:57.920 --> 00:29:00.559
mean, I think I think right
now. One of the lessons I've learned

348
00:29:00.599 --> 00:29:07.640
that Olympia is you have to throw
a lot of brute force to get to

349
00:29:07.680 --> 00:29:11.799
get a usable result, you know, in terms of these things being quote

350
00:29:11.880 --> 00:29:15.400
unquote intelligent and having memory and figuring
out what you want and being able to

351
00:29:15.400 --> 00:29:19.000
recalibrate. And the reason I'm able
to do that is thanks to the race

352
00:29:19.039 --> 00:29:23.759
to the bottom and the price of
commodity AI models. So a lot of

353
00:29:23.759 --> 00:29:27.440
these open source models that you hear
about how mix Droll and Lama three and

354
00:29:27.799 --> 00:29:30.920
you know, Wizard LM from Microsoft, so on and so forth. So

355
00:29:30.960 --> 00:29:40.559
there's all there's all these model providers
competing two you know, to in this

356
00:29:40.680 --> 00:29:45.000
market for AI services, and they're
driving the price to zero and the performance

357
00:29:45.079 --> 00:29:48.079
up. So that's great. You
can access a lot of this stuff,

358
00:29:48.519 --> 00:29:52.960
and I do think that the price
will keep dropping for a lot of these

359
00:29:52.960 --> 00:29:57.160
things to the point where it'll start
to make sense actually incorporate it into your

360
00:29:57.240 --> 00:30:02.319
run time, know, like at
the rails level, and then maybe in

361
00:30:02.319 --> 00:30:07.359
the future at the Ruby level or
even the virtual machine model for doing things

362
00:30:07.359 --> 00:30:11.759
like error recovery, or you know, like if you want to crank the

363
00:30:11.799 --> 00:30:15.680
dial up, Like if you're okay
with uncertainty and nondeterministic behavior with some of

364
00:30:15.759 --> 00:30:18.799
us, are, you know,
you can crank the dial up and have

365
00:30:18.880 --> 00:30:23.240
it do things like you know,
cover for you if you give it the

366
00:30:23.279 --> 00:30:29.359
wrong type, or you know,
try to automatically handle moll pointers and you

367
00:30:29.400 --> 00:30:33.319
know, you know, things like
that. There's a lot of really interesting,

368
00:30:33.559 --> 00:30:38.240
magical, dangerous ship that I think
we'll start getting into, you know,

369
00:30:38.279 --> 00:30:42.839
as we get more comfortable with these
technologies and as the cost comes down,

370
00:30:42.880 --> 00:30:47.920
because right now the cost tends to
be somewhat prohibitive, especially especially if

371
00:30:48.039 --> 00:30:52.319
using frontier models, which is what
they call GPT for or or clad.

372
00:30:52.759 --> 00:30:59.480
But but the smaller faster models,
man, they're so cheap. I mean,

373
00:30:59.680 --> 00:31:06.200
it's like point zero zero four cents
you know per request, which for

374
00:31:06.559 --> 00:31:10.920
Olympia. Uh, you know the
scale that we're at is okay, you

375
00:31:10.960 --> 00:31:12.880
know, that's a that's a manageable
bill. You know, if you're if

376
00:31:12.880 --> 00:31:18.359
you're a much bigger company than maybe
some of the things that I'm that I'm

377
00:31:18.400 --> 00:31:22.519
suggesting literally don't scale. I mean
they end up costing you a thousand dollars

378
00:31:22.880 --> 00:31:27.839
for more on the topic of model
choice, Like, I guess I have

379
00:31:27.880 --> 00:31:32.880
two questions around that, like how
do you go about finding the right model

380
00:31:33.160 --> 00:31:37.839
for what you're trying to do?
And how do you like, what is

381
00:31:37.960 --> 00:31:45.640
that exploration process? Like what is
the what process? Like what's the exploration

382
00:31:45.720 --> 00:31:52.079
process for exploration? Yeah? Yeah, Well I'm a big fan of a

383
00:31:52.079 --> 00:31:56.119
service called open Router, and I
wish that iniquity stake because I'm evangelizing them

384
00:31:56.119 --> 00:32:04.759
all the time. But they,
uh they power the power number really popular

385
00:32:05.000 --> 00:32:12.440
AI based services like Silly Tavern and
uh a new product that I'm using which

386
00:32:12.480 --> 00:32:20.839
i'll plug called novel Crafter. Uh. They're super awesome. And the expiration

387
00:32:20.920 --> 00:32:24.880
process is basically going to open routers
playground and being able to compare uh you

388
00:32:24.880 --> 00:32:32.319
know, run prompts and parallel and
see what happens with different and AI models,

389
00:32:32.599 --> 00:32:37.079
you know, like basically saying,
okay, here's GPT four as my

390
00:32:37.519 --> 00:32:42.839
benchmark, and then try to run
the same thing against SLAMA three and mix

391
00:32:42.839 --> 00:32:49.440
stroll and whatever. So I'm down
the line. And the main reason he's

392
00:32:49.480 --> 00:32:52.519
open router and I featured in my
pro and most of the open source I've

393
00:32:52.519 --> 00:32:55.200
done, you know, a half
dozen open source things I've done, is

394
00:32:58.079 --> 00:33:01.519
that it's one a p I key, you know, one end point one

395
00:33:01.559 --> 00:33:07.079
account to manage and pay for,
and it gives you access to everything open

396
00:33:07.119 --> 00:33:14.839
Ai, Claude, Gemini Pro,
you know cohere, like all all the

397
00:33:14.880 --> 00:33:17.599
major models, and then a whole
bunch of open source models including once you

398
00:33:17.720 --> 00:33:23.039
never heard are available there. It's
probably have a couple of hundred now and

399
00:33:23.720 --> 00:33:29.160
for the ones that are offered by
multiple providers, so so like the example

400
00:33:29.200 --> 00:33:34.000
of provider would be like DPT four
is offered by open ai itself, but

401
00:33:34.079 --> 00:33:39.240
it's also open offered by a zor. So one of the things I really

402
00:33:39.279 --> 00:33:45.200
like about open router is that if
GPT four is down for whatever reason,

403
00:33:45.799 --> 00:33:50.920
it can automatically fail over to a
zor, which means I don't have to

404
00:33:52.039 --> 00:33:55.599
have a Zoro account, which is
great because I don't like premature aging,

405
00:33:55.759 --> 00:34:01.680
so the you know, Zor is
very very difficult to set up and work

406
00:34:01.720 --> 00:34:07.359
with and everything like that. So
yeah, but you were asking the selection

407
00:34:07.440 --> 00:34:12.360
process is trial and error. I
mean, I think there's some there's someone

408
00:34:12.400 --> 00:34:15.119
in the Rubai discord that's working on
some I think it's called prompt Garage or

409
00:34:15.519 --> 00:34:22.639
something like that, which gives you
some sort of framework for for doing this

410
00:34:22.719 --> 00:34:27.280
in a methodical fashion. But it's
pretty easy to like once, once you

411
00:34:27.400 --> 00:34:30.800
got it going, it's pretty easy
to just plug in a model name and

412
00:34:30.800 --> 00:34:32.639
see if it works. And I
do tend to TDD these things. I

413
00:34:32.639 --> 00:34:36.639
don't leave them in my suite,
or if I do leave them in my

414
00:34:36.719 --> 00:34:40.519
suite, they're backed by BCRs so
that they run quick. But I do

415
00:34:40.559 --> 00:34:47.239
tend to TDD my my AI components. So I'll just sit there and iterate

416
00:34:47.880 --> 00:34:52.440
you know, red green until I
get what I need. And one of

417
00:34:52.440 --> 00:34:54.960
those things that you change while you're
trying to get it to work is the

418
00:34:55.000 --> 00:35:00.519
model. Trying to get the cheapest, fastest model that will consistently work.

419
00:35:02.159 --> 00:35:07.000
So do you walk through this process
in your book? Yeah? Yeah,

420
00:35:07.000 --> 00:35:13.840
that's fair. Yeah, the whole
first half of the book is kind of

421
00:35:13.880 --> 00:35:17.199
approaches, and then the second half
of the book is like concrete. This

422
00:35:17.360 --> 00:35:21.239
is you know, this is a
pattern, this is the name of it,

423
00:35:21.360 --> 00:35:24.960
this is how you use it.
Here's example code. Yeah. I

424
00:35:24.960 --> 00:35:30.400
will say I haven't made my whole
way through the book, but I've made

425
00:35:30.440 --> 00:35:35.960
a decent amount. And I do
like how you keep reiterating on like the

426
00:35:36.000 --> 00:35:38.800
discrete components aspect of it, which
I think is reflected well. And you're

427
00:35:38.960 --> 00:35:45.960
like ray framework right where you're just
trying to, you know, encapsulate whatever

428
00:35:46.000 --> 00:35:50.800
the task at hand is and keep
things small. And I think that's kind

429
00:35:50.800 --> 00:35:53.159
of reflective of how the models work
in general, is like you give it

430
00:35:53.199 --> 00:35:57.519
too much and it's going to make
more mistakes, which I think is true

431
00:35:57.519 --> 00:36:01.119
of people too. Yeah. Yeah, I think of them like little people.

432
00:36:01.159 --> 00:36:05.320
There's a chapter in the book called
Multitude of Workers, because that that's

433
00:36:05.360 --> 00:36:07.440
the approach that I advocate. It's
one way of thinking about it. It's

434
00:36:07.519 --> 00:36:12.800
like, you know, if you
had little people that you could put not

435
00:36:12.920 --> 00:36:16.079
little people, but you know,
if you had you know, human little

436
00:36:16.119 --> 00:36:22.599
humanized bits of code, you know
that you could give jobs, but they

437
00:36:22.599 --> 00:36:27.760
have to be narrow jobs at the
moment. You're absolutely right, Valentino.

438
00:36:27.800 --> 00:36:30.840
You give these things too much surface
area, you know, too much to

439
00:36:30.880 --> 00:36:36.039
think about, and they mess up. The only model that I know right

440
00:36:36.079 --> 00:36:42.239
now that can reliably handle more than
one or two tasks or functions or you

441
00:36:42.239 --> 00:36:46.800
know, just that kind of latitude, that kind of discretionary behavior is GPT

442
00:36:46.960 --> 00:36:55.840
four. Supposedly Opus from Claude can
do it. But their tool their their

443
00:36:55.880 --> 00:37:00.960
framework for invoking functions is more immature. But like some of our some of

444
00:37:00.960 --> 00:37:08.840
our bots in Olympia have twenty twenty
four functions available to them for every single

445
00:37:08.840 --> 00:37:12.760
request. So anytime you're talking to
them, anytime you send them a prompt,

446
00:37:12.800 --> 00:37:17.840
they have twenty or more functions that
they can call for things like checking

447
00:37:17.880 --> 00:37:25.719
system status, for sending email,
for recalling things from memory, real time

448
00:37:25.800 --> 00:37:30.800
search, Google search, image search, image generation, you know, so

449
00:37:30.840 --> 00:37:32.599
on and so forth. This is
kind of like their palette, their tool

450
00:37:32.599 --> 00:37:40.679
belt of things that they can use
to in book and there's yeah good.

451
00:37:42.320 --> 00:37:45.400
I'm curious like the testing approach here, right, Like, is it does

452
00:37:45.440 --> 00:37:51.000
it start to like take a different
shape than traditional web development? Right?

453
00:37:51.199 --> 00:37:54.559
Like? Is it more like because
once you get to the multitude of workers,

454
00:37:54.639 --> 00:37:58.719
right, and you have more than
one. I could see like encapsulating

455
00:37:58.760 --> 00:38:01.800
one as like a thing like maybe
like a rails model or something like that.

456
00:38:02.519 --> 00:38:06.440
And you have like unit tests that
make sure that it says what you

457
00:38:06.519 --> 00:38:09.039
wanted to in a certain format or
whatever. But how does like the orchestration

458
00:38:09.119 --> 00:38:14.480
aspect, does that also translate the
same way to like the controller flow,

459
00:38:14.920 --> 00:38:17.199
like to you know, feature tests
or something like that. Is there a

460
00:38:17.239 --> 00:38:22.320
parallel to that multitude of workers working
together or do you kind of just like

461
00:38:22.199 --> 00:38:30.039
is that not really something worth doing? I haven't gotten too far down the

462
00:38:30.079 --> 00:38:37.559
rabbit hole in terms of trying to
do automated tests for intelligent workflows. There's

463
00:38:37.559 --> 00:38:44.840
no reason that you wouldn't, you
know, if you were so inclined trying

464
00:38:44.880 --> 00:38:52.760
to think of how to intelligently answer
that question. Speaking of a rabbit hole,

465
00:38:52.800 --> 00:38:57.639
I mean, yeah, you can
start combining these things and it can

466
00:38:57.679 --> 00:39:06.360
start getting pretty micro service feeling.
I realized that a couple of months ago.

467
00:39:06.880 --> 00:39:10.559
It started reminding me of some of
the servilests approaches. You know,

468
00:39:12.039 --> 00:39:17.480
like I was really really hot on
micro services powered with Lambda when the Services

469
00:39:17.599 --> 00:39:22.760
framework came out. So this is
back like in twenty fifteen time frame twenty

470
00:39:22.760 --> 00:39:30.079
sixteen. I started writing a book
on it, and it starts to it

471
00:39:30.119 --> 00:39:35.440
starts to feel like you have little
micro services inside of your monolith when you

472
00:39:35.440 --> 00:39:40.559
incorporate these and rails, because they
have you know, they have a very

473
00:39:43.480 --> 00:39:47.519
what I want to call it,
the way you interact with them, like

474
00:39:47.559 --> 00:39:52.559
they're well encapsulated because they're black boxes. You know, you literally can only

475
00:39:52.800 --> 00:40:01.039
do input and output of messages with
them. So I think it's cool.

476
00:40:01.119 --> 00:40:05.119
I mean, I love that approach, and I don't I I'm a hacker

477
00:40:05.159 --> 00:40:08.199
at heart. I started as a
hacker when I was young, so I

478
00:40:08.239 --> 00:40:12.760
don't have a lot of hang ups
about like this has to be absolutely correct.

479
00:40:13.280 --> 00:40:15.440
And actually I think you're probably a
little too worried about hallucinations, Valentino,

480
00:40:15.559 --> 00:40:20.960
just from what what it sounds like, because for a lot of these

481
00:40:21.079 --> 00:40:23.320
use cases for discrete AI components,
I mean, it is, well,

482
00:40:23.639 --> 00:40:30.280
since since you've since you've put a
lot of constrains, constraints on what you

483
00:40:30.440 --> 00:40:35.159
want it to be. You know
what you wanted to do, what kind

484
00:40:35.159 --> 00:40:39.239
of output you wanted to give,
and you you crank the temperature parameter down

485
00:40:39.280 --> 00:40:45.119
to zero, which reduces the amount
of creativity that the model, it like

486
00:40:45.239 --> 00:40:51.880
constrains the possible choices of the model
down significantly. That brings me to another

487
00:40:52.159 --> 00:40:55.559
question that I feel like I always
get, is like, you know,

488
00:40:55.880 --> 00:41:00.880
how do you find out what it's
good at and what it is like it?

489
00:41:00.199 --> 00:41:04.679
Are there like definitive things or is
it kind of just like learn as

490
00:41:04.719 --> 00:41:09.000
you go aspects of it. Well, I've definitely learned as I go.

491
00:41:09.239 --> 00:41:16.000
I mean there's there's some things which
are I think a little too meta,

492
00:41:17.320 --> 00:41:24.280
so like to maybe I just haven't
hit on the right way to do this.

493
00:41:24.400 --> 00:41:30.559
But like we do automate automated evaluations
of the conversations in Olympia, and

494
00:41:30.920 --> 00:41:35.599
you said you're Olympia user. So
basically there's a process that kicks off after

495
00:41:35.760 --> 00:41:42.360
conversation idols for like fifteen twenty minutes, and there's a component that will look

496
00:41:42.360 --> 00:41:46.639
at the conversation and give it a
numerical grade up to one hundred and say

497
00:41:46.679 --> 00:41:51.000
this is what the bot did well
and this is what did not so well,

498
00:41:51.360 --> 00:41:55.840
And if it drops below a certain
number, then it gets flagged and

499
00:41:57.199 --> 00:42:00.519
that goes to a dashboard. So
we can see kind of like the overall

500
00:42:00.519 --> 00:42:04.480
performance of the system and also so
we can be aware in case that person

501
00:42:05.679 --> 00:42:08.039
that user is having a lot of
issues, then we can reach out to

502
00:42:08.039 --> 00:42:10.960
them and say, hey, it
seems like you're having some issues with your

503
00:42:10.960 --> 00:42:15.960
Olympia assistance. You know, can
we help. And what we find with

504
00:42:15.000 --> 00:42:20.159
these evaluations is that the model is
very, very generous. It's like the

505
00:42:20.239 --> 00:42:22.599
nicest teacher you ever had. I
mean, almost everyone gets ninety five,

506
00:42:22.599 --> 00:42:29.199
it doesn't matter how how bad.
Like the worst I've seen again is seventy,

507
00:42:29.599 --> 00:42:34.000
you know, and that's where everything
was falling apart completely, And it's

508
00:42:34.280 --> 00:42:38.920
very kind and generous to itself,
which is like kind of a weird thing

509
00:42:39.000 --> 00:42:44.599
to say, but you know,
it's like the bot really really tried.

510
00:42:50.079 --> 00:42:53.760
Yeah, so that I couldn't get
to work right, I mean, there

511
00:42:53.760 --> 00:42:59.119
were other things used. There used
to be a lot of this has gotten

512
00:42:59.159 --> 00:43:01.199
better, I think too, just
mostly because GPT four has gotten better.

513
00:43:01.239 --> 00:43:07.320
But there used to be a lot
of hallucinations around what we call stalling.

514
00:43:07.519 --> 00:43:14.960
So you'd ask your Olympia as system
to help you research something and they'll say,

515
00:43:15.960 --> 00:43:19.639
on it, I'll get back to
you in three hours. That's a

516
00:43:19.719 --> 00:43:22.960
hallucination. They have no ability to
go do a sync work yet. I

517
00:43:22.039 --> 00:43:24.800
mean, we're giving it to them, but six months ago they did not.

518
00:43:27.079 --> 00:43:30.800
And then the person would be like, great, how will I know

519
00:43:30.840 --> 00:43:34.079
when you're done? They're like,
I'll get back to you, or sometimes

520
00:43:34.159 --> 00:43:37.719
say i'll email you what is done. So they're really taking this human nice

521
00:43:37.760 --> 00:43:43.159
thing to heart, right, But
that's not good behavior because then you're sitting

522
00:43:43.239 --> 00:43:46.760
there And we used to joke around
sometimes that your Olympias system could turn into

523
00:43:46.800 --> 00:43:51.360
the worst employee you ever had,
because I mean you we had some users

524
00:43:51.360 --> 00:43:53.159
that would just keep asking them is
that done yet? No, I'm still

525
00:43:53.159 --> 00:43:59.519
working on It's been a week,
are you what are you going to be

526
00:43:59.559 --> 00:44:02.880
done with it? So thankfully a
lot of stuff has gone away. But

527
00:44:04.039 --> 00:44:12.760
but I wrote a bunch of components
to try to detect it. And it

528
00:44:12.800 --> 00:44:20.519
gets into it gets to the limitations
of these statistical models with regards to detecting

529
00:44:20.639 --> 00:44:24.119
patterns, you know, because what
you're really asking to do is to to

530
00:44:24.239 --> 00:44:30.519
detect a certain pattern. But the
past it's you can't describe the pattern concretely.

531
00:44:30.559 --> 00:44:36.920
You have to describe it very subjectively, you know, like and it

532
00:44:37.000 --> 00:44:39.400
just doesn't do well. But in
fact, this there's this arc challenge,

533
00:44:42.000 --> 00:44:47.159
right, now, which is to
try to squeeze a state of the art

534
00:44:47.440 --> 00:44:54.440
pattern matching you know, behavior out
of AI. And there's there's like big

535
00:44:54.480 --> 00:44:58.800
prizes for whoever can get it because
they suck at it. And it's really

536
00:44:58.800 --> 00:45:02.719
really interesting to see. If if
you think GPT four is super intelligent and

537
00:45:02.719 --> 00:45:06.239
can reason and stuff like that,
and you want to you want you to

538
00:45:06.320 --> 00:45:09.559
knock down your expectations a bit,
give it one of these ARC challenges.

539
00:45:10.559 --> 00:45:14.320
And I was gonna say I was, I was messing around with this ARC

540
00:45:14.440 --> 00:45:17.480
challenge uh the other day and it
yeah, I was like, oh yeah,

541
00:45:17.719 --> 00:45:21.360
like the large language models, they
should be able to handle this,

542
00:45:21.440 --> 00:45:25.039
no problem, uh, And it's
it's remarkable they can't. Like they fail

543
00:45:25.320 --> 00:45:34.320
like kryptonite you see, Superman like, which is funny because like you give

544
00:45:34.360 --> 00:45:38.079
it like the whole thing is like
you can give it arbitrary structured data and

545
00:45:38.320 --> 00:45:42.000
like it has no problem like reason
or not reason. I don't want to

546
00:45:42.119 --> 00:45:45.400
use that word, but like you
know, pulling out the pieces that fit

547
00:45:45.480 --> 00:45:50.239
together of that structured data, but
anything where it's like it has no reference

548
00:45:50.360 --> 00:45:53.840
to which I guess makes sense because
that's how it's built, is based on

549
00:45:53.920 --> 00:45:58.719
reference material. But you give it
anything, like you know that it has

550
00:45:58.800 --> 00:46:04.119
no understanding previous knowledge of and it
can't really fit the pieces together, even

551
00:46:04.159 --> 00:46:07.559
though like to us it just seems
so obvious, right, which, Yeah,

552
00:46:07.760 --> 00:46:12.960
you know, maybe that we need
another modality of like pattern matching.

553
00:46:15.800 --> 00:46:22.800
Yeah, I mean there's theoretical modalities
that include like real understanding of the language,

554
00:46:24.320 --> 00:46:30.039
but I don't see anyone working on
that yet. So all statistical models

555
00:46:30.039 --> 00:46:37.119
are the flavorite that you are.
I would like to just quickly like dive

556
00:46:37.639 --> 00:46:42.920
into uh like cause you mentioned a
lot of it's just like you know,

557
00:46:43.440 --> 00:46:46.519
you learn as you go and it's
trial and error. Like, is there

558
00:46:46.559 --> 00:46:52.239
any like standout pitfalls that people should
avoid, like as they're diving in,

559
00:46:52.599 --> 00:47:01.920
like to just stay steer clear from
doing X. Right. Yes, absolutely,

560
00:47:04.239 --> 00:47:13.840
I have a perfect example of something
you absolutely should not do in your

561
00:47:13.880 --> 00:47:22.800
AI journeys. In your programming using
AI journeys, you will inevitably write something

562
00:47:22.840 --> 00:47:30.679
that loops. So basically it does
a check completion, and the check completion

563
00:47:30.800 --> 00:47:37.559
will probably call a function right to
do some behavior external to the model,

564
00:47:37.599 --> 00:47:40.280
and then you have to loop so
that the model can take the results of

565
00:47:40.320 --> 00:47:46.199
the function call and incorporate it into
its final answer to the user or to

566
00:47:46.519 --> 00:47:52.599
the rest of your system in some
way. You definitely want to put some

567
00:47:52.639 --> 00:48:00.039
sort of limit on that loop aka
circuit breaker, because you can run,

568
00:48:00.280 --> 00:48:06.159
you can rack up a huge bill
very very fast if if you make a

569
00:48:06.199 --> 00:48:09.519
mistake there where it just continues calling, you know, calling again and again,

570
00:48:09.639 --> 00:48:15.159
especially if you have large contexts like
we do at Olympia. I had

571
00:48:15.199 --> 00:48:23.920
a embarrassing failure like that where some
subset of our conversations would uh just keep

572
00:48:23.960 --> 00:48:28.800
looping and the retry the circuit breaker
was broken, which is always said,

573
00:48:29.880 --> 00:48:36.320
test your circuit breakers really well.
So we had all of a sudden,

574
00:48:36.360 --> 00:48:43.559
my my consumption shut up from you
know, like two deviations, and I

575
00:48:43.599 --> 00:48:46.559
was like, looking at that,
gone oh, and I go into the

576
00:48:46.599 --> 00:48:52.000
logs an open router open rider shows
you kind of like tokens into out and

577
00:48:52.039 --> 00:48:58.440
the cost associated with it, and
it's just the same number of tokens in

578
00:48:58.480 --> 00:49:01.079
and out just boom, just like
multiple per second, all the way down,

579
00:49:01.159 --> 00:49:07.840
just filling the logs. Yeah,
with GPT four it's like, oh

580
00:49:08.079 --> 00:49:14.000
no, Luckily the open router guys
kind of helped me out a little bit,

581
00:49:14.119 --> 00:49:20.719
but yeah, that was bad.
So, yeah, these things are

582
00:49:20.719 --> 00:49:22.800
expensive. I mean you're using you
when're using the expensive models, they are

583
00:49:22.840 --> 00:49:29.039
expensive, HM, in a way
that many of us are not used to,

584
00:49:31.480 --> 00:49:35.320
you know, because we're used to
you know, heroicodyno costs an x

585
00:49:35.320 --> 00:49:38.760
amount and you kind of know what
you're getting. You know a lot of

586
00:49:38.800 --> 00:49:44.719
other SaaS APIs you know, kind
of costs a certain amount, like you

587
00:49:44.760 --> 00:49:47.719
get it. This thing kind of
has like it's like a it's like a

588
00:49:47.760 --> 00:49:52.599
short squeeze. I mean, it's
gonna like unlimited boom, Like you're down

589
00:49:52.639 --> 00:49:55.320
a few thousand dollars just because you've
made a bug, you know, your

590
00:49:55.320 --> 00:49:59.079
code. So a lot of us
are not used to that, So yeah,

591
00:49:59.159 --> 00:50:04.519
be careful of that. Yeah.
One thing that I was so You've

592
00:50:04.559 --> 00:50:10.559
mentioned journeys and context, and I've
heard people talk about training on top of

593
00:50:10.679 --> 00:50:14.960
kind of the large language model,
which I'm assuming is sort of the same

594
00:50:15.000 --> 00:50:19.079
thing. Maybe I'm missing the boat
on this, but yeah, if I

595
00:50:19.119 --> 00:50:22.079
have a specific use case where I
wanted to, I don't know, refine

596
00:50:22.199 --> 00:50:27.480
or summarize you know, some of
the information that it pulled in or things

597
00:50:27.519 --> 00:50:32.599
like that. I mean, how
do I get it to be more specific?

598
00:50:32.639 --> 00:50:37.880
So let's say that I had a
text that I was routinely putting into

599
00:50:37.920 --> 00:50:42.480
it, and you know, I
wanted it to summarize. You know,

600
00:50:43.320 --> 00:50:45.400
I'm thinking, here's what I'm thinking. So I was talking to some friends

601
00:50:45.400 --> 00:50:52.639
of mine and they were somebody mentioned
that it would be nice if there was

602
00:50:52.679 --> 00:50:58.639
something that would summarize the bills that
go through the legislature every year in Utah.

603
00:50:59.119 --> 00:51:02.320
Right, And there's usually like stricken
out language, a new language put

604
00:51:02.360 --> 00:51:07.920
in and it shows you the context
of the Utah Code that it's going to

605
00:51:07.039 --> 00:51:14.440
modify. And so you know,
it looks like the models that you've built

606
00:51:14.480 --> 00:51:16.280
on Olympia. Right. It can
go and it can read this stuff off

607
00:51:16.320 --> 00:51:20.800
the internet, and you know,
and there's a way to consume it.

608
00:51:21.320 --> 00:51:25.599
So how do I get it to
be proficient at getting through that stuff and

609
00:51:25.599 --> 00:51:30.599
then giving me what I want to
know without having to go and read the

610
00:51:30.719 --> 00:51:40.880
entire bill? So you might you
might be thinking of a technique called fine

611
00:51:40.920 --> 00:51:45.800
tuning. So a lot of people
think of a lot of people think of

612
00:51:45.840 --> 00:51:50.639
training, and there's different ways of
making models better at a specific purpose.

613
00:51:51.320 --> 00:51:59.000
Right, And I experimented enough with
it to kind of know how it works

614
00:51:59.039 --> 00:52:02.760
and what it's for. But I've
found that you don't really need fine tuning

615
00:52:02.800 --> 00:52:06.719
for most use cases, like what
you just mentioned, you wouldn't need fine

616
00:52:06.760 --> 00:52:09.400
tuning at all. Okay. I
wouldn't have to teach it how to read

617
00:52:09.440 --> 00:52:14.880
a bill. I could just give
it the language and it could say,

618
00:52:15.119 --> 00:52:20.719
oh, takes this out and puts
this in DPT. Yeah, GPT four

619
00:52:20.880 --> 00:52:27.000
and Claude and Gemini pro like what
they call frontier models and I call expensive

620
00:52:27.000 --> 00:52:35.159
ones. They know all this stuff
already. In fact, what in the

621
00:52:35.199 --> 00:52:43.119
book I call the I call the
process of applying a large language model to

622
00:52:43.360 --> 00:52:46.880
your problem domain, narrowing the path. So when you're when you're thinking about

623
00:52:47.119 --> 00:52:53.920
the the power of your eye model, one very useful thing to have clear,

624
00:52:54.000 --> 00:52:59.199
especially if you're completely new to this, is that it literally knows everything

625
00:52:59.320 --> 00:53:04.400
for all intents purposes. Okay.
So the space of its knowledge, the

626
00:53:04.519 --> 00:53:09.719
universe of its knowledge, is so
so big that if you present it with

627
00:53:09.880 --> 00:53:15.119
something that's which is your prompt or
what you're asking to do, it had

628
00:53:16.440 --> 00:53:22.519
unless you constrain the scope. It
is literally drawing from all of that knowledge.

629
00:53:23.280 --> 00:53:27.639
Okay. And if you think about
all that knowledge, it not only

630
00:53:27.679 --> 00:53:35.400
includes knowledge of the Utah legislature and
legislatures in general, and procedures of you

631
00:53:35.440 --> 00:53:42.199
know, governing bodies. It also
includes legislative bodies and governing procedures of science

632
00:53:42.239 --> 00:53:47.159
fiction novels. Just to give you
just kind of a clear example of why

633
00:53:47.239 --> 00:53:53.840
there's a problem here, right,
So multiply that to times, you know,

634
00:53:54.199 --> 00:53:59.639
a near infinite amount of different you
know, depending on how general what

635
00:53:59.639 --> 00:54:01.480
you're asking to do, it could
draw upon way, way more than what

636
00:54:01.519 --> 00:54:06.320
you wanted to Okay, So so
what I call narrowing the path is what

637
00:54:06.519 --> 00:54:12.400
probably essentially what you mean by training. It's but that's you, you know,

638
00:54:12.480 --> 00:54:16.639
figuring out what constraints to give it. And one of the main one

639
00:54:16.639 --> 00:54:21.079
of the main ways you can give
it a constraint, which is the most

640
00:54:21.079 --> 00:54:25.719
popular way right now, is called
retrieval augmented generation. So if you're dealing

641
00:54:25.760 --> 00:54:30.199
in factual data, that's called nonfiction. You know, if you're in a

642
00:54:30.239 --> 00:54:34.719
nonfiction domain, so you know,
your legislature example is the case of that

643
00:54:36.000 --> 00:54:37.119
you could make it And I'm just
kidding, Yeah, I guess, so

644
00:54:39.480 --> 00:54:46.480
I didn't say non fantasy, but
not you know, not so the you

645
00:54:46.480 --> 00:54:52.639
you can tell the model like,
hey, you're going to operate on.

646
00:54:53.039 --> 00:55:00.440
You're going to to generate output based
on this specific content that I give you.

647
00:55:00.360 --> 00:55:04.599
You add that content dynamically at runtime. That's what retrieval augmented generation means.

648
00:55:05.280 --> 00:55:08.480
Retrieval means you're retrieving it from somewhere
other than the latent space of the

649
00:55:08.480 --> 00:55:14.320
models, other outside of the model, so you're you're going out, you're

650
00:55:14.320 --> 00:55:20.360
retrieving it. So that might be
like the existing legislation and then the revision,

651
00:55:21.159 --> 00:55:25.320
and then you you structure data pattern
which is covering the book to present

652
00:55:25.400 --> 00:55:32.840
that in the prompt. And then
because of their training, the way that

653
00:55:32.880 --> 00:55:37.639
these models are trained, they understand
that one of the main use cases that

654
00:55:37.679 --> 00:55:42.880
they're used for is to operate on
data that they're provided to from the prompt,

655
00:55:43.880 --> 00:55:47.360
and therefore they don't hallucinate it.
I gotcha, you get it.

656
00:55:47.920 --> 00:55:51.760
In fact, there there's I haven't
played around with this yet, but but

657
00:55:51.840 --> 00:55:57.039
your listeners might find it really interesting
and if I can't find it in the

658
00:55:57.079 --> 00:56:00.920
next five seconds, I'll definitely and
give it to you to put in the

659
00:56:00.920 --> 00:56:06.320
show notes. But essentially, there's
a notebook. There's a notebook product that

660
00:56:06.400 --> 00:56:09.360
my team was was kind of geeking
out over. I'm gonna have to find

661
00:56:09.360 --> 00:56:13.400
it and give you the link,
but but I can describe what it does.

662
00:56:13.880 --> 00:56:17.280
It was super cool. Like you, you start out with a blank

663
00:56:17.280 --> 00:56:20.880
slate, and when I say blank
slate, I mean literally blank slate.

664
00:56:21.320 --> 00:56:25.360
So you can you give it a
prompt. You say, I want you

665
00:56:25.400 --> 00:56:30.199
to help me make a high school
curriculum, and it goes, what's a

666
00:56:30.280 --> 00:56:37.000
high school? So right, you
you have you have to provide that information.

667
00:56:37.119 --> 00:56:39.000
This is what I mean by high
school? And it goes, great,

668
00:56:39.039 --> 00:56:44.400
what's a curriculum? And then you
you have to describe. Okay,

669
00:56:44.400 --> 00:56:49.880
when I say curriculum, this is
what I mean by curriculum. And I

670
00:56:49.920 --> 00:56:53.800
and I actually think that, uh
this I hadn't seen anything like this until

671
00:56:53.800 --> 00:56:57.119
a week ago, and I think
it might be new and novel. So

672
00:56:57.199 --> 00:57:00.119
it's interesting to think about whether this
will take off. It's actually really really

673
00:57:00.119 --> 00:57:05.800
super useful. In my opinion.
You're constraining it all the way down to

674
00:57:05.880 --> 00:57:10.199
zero and then starting from zero so
that the possibility of pulling in other things

675
00:57:10.199 --> 00:57:14.639
that you don't care about or that
will mess it up are different. So,

676
00:57:14.679 --> 00:57:15.079
like I said, I'll find the
link can give it to you,

677
00:57:15.079 --> 00:57:21.719
but I forget what it's called but
right, So I guess the other question,

678
00:57:21.760 --> 00:57:24.320
and I think I've kind of inferred
this from what we've talked about and

679
00:57:24.320 --> 00:57:29.000
some of the other things I've read. But you can have a long running

680
00:57:29.519 --> 00:57:32.920
context, and I know context means
something in this world, but you know,

681
00:57:34.039 --> 00:57:37.880
a long running context that says,
Okay, you know, I've restricted

682
00:57:37.880 --> 00:57:43.920
what you're going to run on and
so I'm just going to run everything else

683
00:57:44.079 --> 00:57:47.239
through this context, right, And
that's effectively what you're doing with your AI

684
00:57:47.360 --> 00:57:53.719
assistance that you're providing to people with
olympia. Yeah, their context includes everything

685
00:57:53.760 --> 00:58:04.719
you've ever talked about, okay with
them, so they're able to most of

686
00:58:04.760 --> 00:58:07.199
the time. You know, someonet
know what you're talking about. I mean,

687
00:58:07.239 --> 00:58:12.320
this is still limit has fundamental limited
the technology, but it keeps getting

688
00:58:12.360 --> 00:58:19.000
better and worse. Like we're like
so in the infancy. It's so obvious

689
00:58:19.039 --> 00:58:21.480
that we're in the infancy of this
and like you know, those of us

690
00:58:21.559 --> 00:58:23.840
that have been around long enough and
remember IBM, PCs and you know,

691
00:58:23.920 --> 00:58:30.199
common or sixty years stuff like I
do you know, actually live through the

692
00:58:30.280 --> 00:58:35.079
expansion of RAHM and whatnot, So
you know, right, and it feels

693
00:58:35.360 --> 00:58:38.719
like there's parallels there like for like. I had a lot of trouble with

694
00:58:38.840 --> 00:58:44.440
UH with uploads in the early days
of Olympia because the context was too small

695
00:58:44.440 --> 00:58:47.880
and for the most part, no
matter how good my my text extraction was,

696
00:58:47.960 --> 00:58:51.559
let's say, from a PDF.
Some cases I was using like a

697
00:58:51.679 --> 00:58:54.920
Zoro document intelligence, which is a
really really good way of extracting structure and

698
00:58:54.960 --> 00:58:59.880
info from a PDF, even if
it includes tables and diagrams and stuff like

699
00:58:59.880 --> 00:59:04.480
that. But then I couldn't fit
it into the darn context of the model.

700
00:59:04.559 --> 00:59:07.079
It was like it together with everything
else I was trying to put in

701
00:59:07.079 --> 00:59:09.480
the context, it would blow up
the context and then it would fail,

702
00:59:09.880 --> 00:59:14.639
kind of like running out a ram. And then somewhere along the way,

703
00:59:14.639 --> 00:59:16.800
I don't remember exactly when Google Pro
came out and it had like a million

704
00:59:16.920 --> 00:59:21.519
tokens of context and now it has
two million or more, I can't remember.

705
00:59:21.599 --> 00:59:24.280
So in the matter of an afternoon, I switched it over so that

706
00:59:24.480 --> 00:59:31.000
now when you're referring to a document, it uses Google Pro and it just

707
00:59:31.039 --> 00:59:35.800
shoves the contents of the document,
which could be like a full length novel

708
00:59:35.880 --> 00:59:37.719
or more. I mean, two
million tokens is a lot, right,

709
00:59:38.079 --> 00:59:44.119
Yeah, So that it just gives
that to Google Pro and then it asked

710
00:59:44.159 --> 00:59:47.320
Google pro the question that it wants
to know, So it offloads to a

711
00:59:47.400 --> 00:59:52.239
model that's really really good at doing
that sort of thing. And I've seen

712
00:59:52.239 --> 01:00:00.960
it do incredible stuff. Incredible I've
seen it be able to extract figures from

713
01:00:00.119 --> 01:00:07.719
from a payroll report but like that
that had a couple hundred employees, you

714
01:00:07.760 --> 01:00:12.639
know, and like basically help me
do some ledger entries related to moving these

715
01:00:12.639 --> 01:00:15.599
employees, you know, expense from
one category to another, and it goes

716
01:00:15.639 --> 01:00:23.280
into and pulls it out correctly,
which is something gpt ford doesn't do reliably.

717
01:00:23.599 --> 01:00:27.360
And as we go back to trimal
error, you kind of have you

718
01:00:27.360 --> 01:00:30.800
know, you start. It is
its own field, and it's its own

719
01:00:31.239 --> 01:00:36.039
as its nuances. It has its
nooks and crannies of expertise and things you

720
01:00:36.079 --> 01:00:38.360
have to know to do or not
do. Like the Google thing. I

721
01:00:38.400 --> 01:00:42.800
couldn't have told you before I figured
it out right that it would be good

722
01:00:42.800 --> 01:00:47.280
at that right. That was a
trial error. But you were you were

723
01:00:47.280 --> 01:00:51.199
asking about context. I don't know
if I answered your question your question correctly,

724
01:00:51.199 --> 01:00:55.199
but yeah, it operates on context
context keys. So one of the

725
01:00:55.199 --> 01:00:59.159
main things you need to learn is
just how to build that context the books

726
01:00:59.239 --> 01:01:02.119
into that pot. There's different ways
of doing it. Actually, X.

727
01:01:02.199 --> 01:01:06.559
I think XML will make a comeback
to some degree. I posted on Twitter

728
01:01:06.599 --> 01:01:10.559
the other day and I talk about
it in the book because XML happens to

729
01:01:10.599 --> 01:01:15.880
be a really really good way of
representing data to the to the model because

730
01:01:15.880 --> 01:01:21.760
it's really easy to parse out afterwards. You know, XML in XML out

731
01:01:22.159 --> 01:01:25.639
I can't even you know, OBI
from ten to twenty years ago is cringing,

732
01:01:25.760 --> 01:01:30.920
but you know, it's like it's
really really easy to pull information out

733
01:01:30.920 --> 01:01:37.360
of XML compared to other things that
it can give you. Yeah, you

734
01:01:37.400 --> 01:01:42.599
know, it's really funny. You
know, everybody always asks, you know,

735
01:01:43.519 --> 01:01:46.719
how does how does it adapt and
to learn new things? Or you

736
01:01:46.760 --> 01:01:52.960
know, how does it learn X? It doesn't. It doesn't. You

737
01:01:52.039 --> 01:01:55.880
have to you have to tell it
and then it can say it's It's kind

738
01:01:55.880 --> 01:01:59.840
of funny because like the process is
like, you know, okay, you

739
01:02:00.119 --> 01:02:02.880
with the prompt to do this,
and then you have a prompt that just

740
01:02:04.000 --> 01:02:07.000
like matches it with the data that
you already have that can then give it

741
01:02:07.039 --> 01:02:10.159
to the prompt again and then be
like, oh yeah, it's this thing

742
01:02:10.199 --> 01:02:15.519
that you told me that it is. Yeah, I don't think we'll get

743
01:02:15.519 --> 01:02:17.639
to AGI personally with the current approaches. I mean, I couldn't. I

744
01:02:20.079 --> 01:02:28.079
could be wrong, but I mean, the the the way I see it,

745
01:02:27.199 --> 01:02:30.199
it really really like, in order
to be a full human replacement,

746
01:02:31.519 --> 01:02:36.719
it has to really learn on the
fly, Like there has to be a

747
01:02:36.800 --> 01:02:45.840
modification to the way that inference works
based on new information. And you know,

748
01:02:46.000 --> 01:02:50.079
some some people think you can just
brute force your way out of that

749
01:02:50.159 --> 01:02:55.719
problem. So like, if your
context is long enough, you can just

750
01:02:55.760 --> 01:03:02.639
add everything you've ever learned to the
context. I would happily do that approach

751
01:03:02.679 --> 01:03:10.239
in Olympia, except that it's so
damn expensive that it's unfeasible, you know,

752
01:03:10.320 --> 01:03:15.280
to do it, Like I could
probably like I don't know this for

753
01:03:15.320 --> 01:03:17.800
sure, I haven't analyzed it very
well, but but just kind of based

754
01:03:17.840 --> 01:03:24.239
on my gut and the amount of
information that I know that that customers put

755
01:03:24.280 --> 01:03:30.599
into Olympia, I could probably fit
all everything I know about a customer into

756
01:03:30.599 --> 01:03:38.199
a single Google Pro Google Gemini Pro
context, which would be awesome, except

757
01:03:38.280 --> 01:03:43.400
every time I ran that it would
cost me like four bucks, and you

758
01:03:43.400 --> 01:03:45.679
know, and a monthly plan is
you know, ranges from twenty to sixty

759
01:03:45.679 --> 01:03:50.079
seven dollars, So we're still orders
of magnitude away from being able to do

760
01:03:50.119 --> 01:03:53.800
that. When we get to the
point where you can do that, where

761
01:03:53.800 --> 01:03:59.360
you can fit all the email correspondence
you've ever may done, or maybe just

762
01:03:59.400 --> 01:04:03.440
all the sentiencesages, let's say,
into a single context, then yeah,

763
01:04:03.480 --> 01:04:11.079
you got something, But at the
moment it's too expensive, makes sense.

764
01:04:14.000 --> 01:04:17.239
So I think we're kind of getting
towards the end of our time, and

765
01:04:17.360 --> 01:04:24.599
it feels like we're kind of whining
down. Anyway, I'm trying to ramble.

766
01:04:24.880 --> 01:04:29.760
Uh just I could have you on
for another hour if you want.

767
01:04:29.840 --> 01:04:33.039
I know you're going. I mean, I definitely have more things to ask.

768
01:04:33.800 --> 01:04:38.800
But I mean one of the one
of the things we didn't cover,

769
01:04:38.920 --> 01:04:43.639
which you know, which uh in
retrospect, I wanted to cover because it's

770
01:04:43.679 --> 01:04:50.079
it's for this audience, is I
have occasionally been discouraged by the amount of

771
01:04:50.119 --> 01:04:57.960
Python. You know how strong Python
is field right, uh huh, And

772
01:04:57.960 --> 01:05:01.760
and like fundamentally there's there's no reason, you know, there's no like technical

773
01:05:01.800 --> 01:05:10.880
reason why it couldn't have been Ruby. And you know, I hear people

774
01:05:10.880 --> 01:05:15.800
talk about the math libraries and the
data libraries, and you know how those

775
01:05:15.840 --> 01:05:19.519
feed into training some of the systems
at the lower level. But where we're

776
01:05:19.559 --> 01:05:24.559
talking about some of these other models, you're not necessarily building those models.

777
01:05:24.599 --> 01:05:28.800
So I mean, is there a
reason why it's especially when it comes to

778
01:05:28.840 --> 01:05:31.320
you, No, there's not.
It's just cultural. It's just it's just

779
01:05:31.480 --> 01:05:43.519
the inertia. So while sometimes I
found it discouraging, what what I've managed

780
01:05:43.519 --> 01:05:47.280
to flip that around to as the
eternal optimist, is that it's a positive

781
01:05:47.360 --> 01:05:53.320
because there's a wide open greenfield to
do all sorts of cool new gems,

782
01:05:54.239 --> 01:06:00.119
and you can in some cases draw
inspiration directly from an existing project and the

783
01:06:00.159 --> 01:06:05.719
other world. Like the most i
mean super clear case of that is lang

784
01:06:05.800 --> 01:06:10.320
chain RB. So like one of
the main libraries that people used to do

785
01:06:10.360 --> 01:06:14.360
this kind of stuff and Python and
JavaScript is called lang chain and there's even

786
01:06:14.400 --> 01:06:17.440
a startup around it that's made a
lot of money. And then this Ruby

787
01:06:17.519 --> 01:06:24.679
is named Andrea created lang chain RB
and just kind of lifted the whole approach

788
01:06:24.760 --> 01:06:29.280
and wrote it in Ruby, and
that's become a thriving project of its own.

789
01:06:30.079 --> 01:06:34.920
I I personally don't use lang chain
RB because I I want it to

790
01:06:34.960 --> 01:06:40.519
feel like rails. I don't want
it to feel like lang chain like when

791
01:06:40.559 --> 01:06:43.480
I'm when I'm when I'm using these
things in my app. I don't want

792
01:06:43.519 --> 01:06:46.320
a whole new paradigm, a whole
new architecture, all new set of things

793
01:06:46.320 --> 01:06:49.719
to learn, right Like, I
want to apply it to the paradigm I'm

794
01:06:49.719 --> 01:06:55.159
already familiar with. But nonetheless,
I mean, that's a pretty good example

795
01:06:55.280 --> 01:07:00.519
of a project that got very big
and very popular very fast because they just

796
01:07:00.519 --> 01:07:03.079
said, Okay, well that's popular
over there, let's make it in Ruby.

797
01:07:03.079 --> 01:07:06.719
I think that there's dozens, if
not hundreds of things that could be

798
01:07:06.760 --> 01:07:11.199
done in that way. Uh,
the smallest, you know, kind of

799
01:07:11.199 --> 01:07:18.000
lowest hanging fruit is just client libraries
and SDKs for popular providers and SaaS apps

800
01:07:18.039 --> 01:07:25.199
and things like that. So like
Alex the owner of the Rubai discord,

801
01:07:25.400 --> 01:07:29.800
got really famous with his Ruby open
Ai library, which is you know,

802
01:07:29.920 --> 01:07:32.639
used by millions of people. I
would say is probably not a stretch at

803
01:07:32.639 --> 01:07:39.679
this point. So super super popular
library, very fast. I've done a

804
01:07:39.679 --> 01:07:42.880
bunch of little, you know,
client libraries for like for open router,

805
01:07:43.000 --> 01:07:49.119
for anthropic et cetera. Like there's
so much greenfield opportunity to just come in

806
01:07:49.159 --> 01:07:53.840
and do cool stuff. And that
that's why I would reckon you know,

807
01:07:53.840 --> 01:07:57.920
if you're interested in that, especially
if you're starting out your career, you

808
01:07:57.960 --> 01:08:00.199
know, and you want a popular
open source project under your belt or you

809
01:08:00.199 --> 01:08:03.599
know, to be associated with.
I think the timing couldn't be better.

810
01:08:04.400 --> 01:08:08.599
That really really couldn't be better.
And the other thing too, is that

811
01:08:08.679 --> 01:08:15.760
it's not like it's not like years
past where the scope of innovation was so

812
01:08:15.920 --> 01:08:18.600
narrow that if you like you missed
the boat, you know, doing one

813
01:08:18.640 --> 01:08:23.800
of these open source projects or gems, you know, oh, well that's

814
01:08:23.800 --> 01:08:26.720
it got to wait five years for
like the next big thing to come along.

815
01:08:27.039 --> 01:08:29.600
I mean there's literally a big thing
happening every two weeks, two or

816
01:08:29.600 --> 01:08:35.199
three weeks, so you know,
that also just makes it even more wide

817
01:08:35.239 --> 01:08:40.520
open, you know. I think
it's the coolest place to be. I

818
01:08:40.520 --> 01:08:43.000
mean, it's not the end all
be all, it's not a silver bullet.

819
01:08:43.079 --> 01:08:45.600
It's definitely not a hammer you should
hit every you know, nail and

820
01:08:45.640 --> 01:08:50.960
your application with. But but it's
incredibly cool. And again I go back

821
01:08:50.960 --> 01:08:53.880
to this, like, you know, most of the people I've seen that

822
01:08:53.920 --> 01:08:58.720
have objections to using AI in their
projects or whatever. The you know,

823
01:08:58.800 --> 01:09:04.000
they say like it's a stochastic parrot, it's not actually intelligent, or I

824
01:09:04.039 --> 01:09:09.439
can't get deterministic results, or it
hallucinates things like that. And I can

825
01:09:09.479 --> 01:09:13.079
tell you, as a practitioner with
IT for last year that a lot of

826
01:09:13.079 --> 01:09:15.560
these a lot of these objections don't
really make sense to me, right,

827
01:09:15.640 --> 01:09:18.239
Like I do come at it from
hacker mentality. So it's kind of like

828
01:09:18.239 --> 01:09:23.319
whatever's clever and works, you know, it's cool with me, doesn't necessarily

829
01:09:23.319 --> 01:09:27.800
have to scale, doesn't necessarily have
to be the most pure or you know,

830
01:09:27.920 --> 01:09:33.199
correct quote unquote way to do things, you know, But when you

831
01:09:33.199 --> 01:09:35.720
come at it from that mentality of
like, hey, what can I do

832
01:09:35.760 --> 01:09:40.399
with this that's cool or magical or
amazing or you know, really impress my

833
01:09:40.439 --> 01:09:46.279
friends and my grandma, you know, like this is I can't hype it

834
01:09:46.359 --> 01:09:51.680
enough. In other words, nice, So tell us about your book a

835
01:09:51.680 --> 01:09:57.279
little bit, because I mean I
found patterns of application development using AI.

836
01:09:57.479 --> 01:10:01.680
So is this not real specific or
is this not the right book or what?

837
01:10:01.920 --> 01:10:04.680
No, it's not it's not supposed
to be real specific. I mean,

838
01:10:04.720 --> 01:10:10.119
I I've been doing rails day and
day out for almost decades at this

839
01:10:10.199 --> 01:10:14.920
point, so that's what I chose
to do my examples. And also I

840
01:10:15.800 --> 01:10:21.479
was very very happy to like lift
code directly out of Olympia, because I

841
01:10:21.479 --> 01:10:28.039
mean, one thing I personally hate
in tech books is like, you know,

842
01:10:28.279 --> 01:10:31.159
the car example. If you're going
out to you know, or whatever,

843
01:10:31.239 --> 01:10:38.479
it's like non realistic examples or stuff
that's super academic or just doesn't doesn't

844
01:10:38.520 --> 01:10:42.039
have practical applications. It's like,
okay, well, one way to prove

845
01:10:42.079 --> 01:10:45.800
that something as a practical application is
like, here's literally code that I work

846
01:10:45.199 --> 01:10:49.399
on that's in production. Here you
go, here's an example, you know,

847
01:10:49.479 --> 01:10:54.279
especially for something like patterns, instead
of being all handwavy and like,

848
01:10:54.520 --> 01:10:58.319
you know, like providing a concrete, specific explanation. So I try to

849
01:10:58.359 --> 01:11:02.319
do it as much as possible in
the book. You could probably rebuild Olympia

850
01:11:02.359 --> 01:11:04.840
with With what's in the book,
you know, I kind of give away

851
01:11:04.840 --> 01:11:09.920
a lot of our approaches and secrets
and things like that, which is cool.

852
01:11:10.840 --> 01:11:16.920
And I'm planning a Python edition and
a JavaScript edition down the line for

853
01:11:17.039 --> 01:11:20.640
people who just can't get over the
fact that the examples are in Ruby but

854
01:11:20.840 --> 01:11:27.159
the patterns are not Ruby specific the
patterns are patterns for how to use AI

855
01:11:27.800 --> 01:11:31.840
in your normal application development. You
could use those same patterns in Ndjengo or

856
01:11:31.920 --> 01:11:38.640
lamorel or whatever you want, Java, et cetera. They're they're not specific

857
01:11:38.760 --> 01:11:41.199
to Ruby, and that's why there's
no Ruby in the title or anything like

858
01:11:41.239 --> 01:11:49.239
that. And I mean, I'm
I'm very influenced by the Gang of Four

859
01:11:49.279 --> 01:11:59.039
Patterns book by Martin Feller's book on
Patterns of Enterprise Applicant UH Application Architecture by

860
01:11:59.279 --> 01:12:05.800
Greg Hope, and Dave Rice's book
on Enterprise Messaging you know, or integration.

861
01:12:05.960 --> 01:12:13.840
Rather that those were like the formative
books of my career coming up doing

862
01:12:13.960 --> 01:12:18.119
what I did, So they were
very influential on me, and I like

863
01:12:18.199 --> 01:12:23.920
the approach. I think that they
were invaluable for a couple of generations of

864
01:12:24.600 --> 01:12:28.560
people doing what we do. So
that's what I went for, you know,

865
01:12:28.640 --> 01:12:30.720
I said, I think there's an
opportunity here to write an evergreen book

866
01:12:31.079 --> 01:12:35.680
that really kind of covers the fundamentals
of how you integrate this technology with your

867
01:12:35.920 --> 01:12:42.039
normal application. So things I don't
go into in the book are will AI

868
01:12:42.199 --> 01:12:45.960
replace you as a programmer, and
like all the philosophical stuff, not like

869
01:12:46.119 --> 01:12:49.960
not at all. I just give
one sentence mentioned in the preface, say

870
01:12:50.000 --> 01:12:53.680
I don't talk about this. The
other thing I don't talk about is AI

871
01:12:53.760 --> 01:13:00.800
generation of code. It's cool whatever. There's awesome projects like Scott Werner's Blueprints

872
01:13:00.840 --> 01:13:04.840
is cool, so plug him.
Copilot is cool. I use it all

873
01:13:04.880 --> 01:13:09.720
the time. I've been experimenting with
other things. I think copil it's probably

874
01:13:09.720 --> 01:13:14.319
still the best. But I don't
get into it because to me, it's

875
01:13:15.039 --> 01:13:18.359
not interesting and it's not evergreen for
a book. You know, it's literally

876
01:13:18.399 --> 01:13:20.439
just a tool. You install it, you get good at using it,

877
01:13:20.520 --> 01:13:24.159
and you're done, and they're going
to continue changing it every year, right,

878
01:13:24.199 --> 01:13:28.359
so there's no point right book.
The stuff that's in the book is

879
01:13:28.399 --> 01:13:31.119
truly meant to be evergreen, like
it should be good five years from now,

880
01:13:32.279 --> 01:13:38.439
which is why we're actually going to
go ahead and make a print copy

881
01:13:38.479 --> 01:13:43.159
of it so you can get it
on Lean pub right now. It's one

882
01:13:43.159 --> 01:13:46.560
of the best selling books on Lean
pub right now. Yeah, put a

883
01:13:46.600 --> 01:13:53.720
link in the comment so if you're
on Twitch or Facebook or YouTube you can

884
01:13:53.800 --> 01:13:58.640
see it. And uh and yeah, I mean it's like four hundred pages.

885
01:13:58.880 --> 01:14:00.520
I mean it's meant to be a
good, good, solid reference book

886
01:14:00.520 --> 01:14:02.880
that you that you refer to,
and you should be able to pop it

887
01:14:02.880 --> 01:14:06.840
open on any page and find it
interesting. I mean it's not. Uh,

888
01:14:09.840 --> 01:14:13.119
the first half of it is meant
for people who are relatively new.

889
01:14:13.239 --> 01:14:16.279
I would say, you know,
the second half is really, like I

890
01:14:16.319 --> 01:14:19.479
said before, the concrete patterns of
things you'll refer two times time again.

891
01:14:19.560 --> 01:14:26.000
I mean you know when I say
I'm influenced by those books, I mean

892
01:14:26.000 --> 01:14:30.199
they're literally sitting here next to Yeah. Uh, you know, it's kind

893
01:14:30.199 --> 01:14:33.800
of my go to for I thought
there might be some overlap. Actually,

894
01:14:33.840 --> 01:14:40.079
and and I if I remember correctly, the only one this is uh,

895
01:14:40.840 --> 01:14:49.680
the Follower book, but that there's
there's a pattern for proxying uh your API.

896
01:14:50.279 --> 01:14:58.680
Uh it is called uh I'm I
gonna be able to find it real

897
01:14:58.720 --> 01:15:02.439
quick, yeah, API for.
So when I started the when I started

898
01:15:02.439 --> 01:15:04.199
working on the book, I was
like, oh, I'm probably going to

899
01:15:04.279 --> 01:15:10.319
find patterns that are very similar to
the Gang of Four or you know,

900
01:15:10.720 --> 01:15:14.680
enterprise integration patterns and things like that. And there ended up not really being

901
01:15:14.720 --> 01:15:17.479
that many, if anything. I
mean there's some that kind of allude to

902
01:15:18.319 --> 01:15:21.880
older patterns and API facade was the
one that was kind of like very very

903
01:15:21.920 --> 01:15:30.119
similar conceptually to the integration pattern,
but at the same time it's completely different.

904
01:15:30.600 --> 01:15:34.479
It's essentially earlier in the episode,
I mentioned that, like, you

905
01:15:34.479 --> 01:15:38.880
know, when you're talking to an
Olympia assistant, it might have like twenty

906
01:15:39.000 --> 01:15:44.960
twenty five different functions and can call. You can't, at least with the

907
01:15:44.960 --> 01:15:47.000
current state of the art technology.
You can't give it like hundreds of functions

908
01:15:47.000 --> 01:15:50.279
to call. Basically you're using up
too much context, it's too expensive,

909
01:15:50.680 --> 01:15:54.560
they'll get confused, et cetera,
et cetera. So, for instance,

910
01:15:54.560 --> 01:16:00.760
how do we do integration with GitHub
or Gmail? You know APIs that have

911
01:16:00.880 --> 01:16:05.159
surface area with like dozens or hundreds
of endpoints. You use what's called an

912
01:16:05.159 --> 01:16:11.680
API facade. So there's basically one
function, which is the Gmail helper function

913
01:16:12.399 --> 01:16:15.119
that's exposed to your main assistant.
So anything it wants to do with Gmail,

914
01:16:15.359 --> 01:16:18.840
it can just send a request to
the Gmail helper function. Gmail Helper

915
01:16:18.880 --> 01:16:26.199
function, in turn, is another
AI that has all the different operations interesting,

916
01:16:27.680 --> 01:16:30.439
so you literally go to the you
know, if the user asks our

917
01:16:30.520 --> 01:16:36.359
assistant, hey, check if I
have any urgent messages from Charles, the

918
01:16:36.399 --> 01:16:43.159
assistant will call the Gmail helper function
and say do I have any urgent email

919
01:16:43.199 --> 01:16:47.000
messages from Charles? So it's proxying
it, right, And then that AI

920
01:16:47.920 --> 01:16:51.880
has the ability to scan your inbox
to search your inbox, right, and

921
01:16:51.920 --> 01:16:56.399
that AI has all the full documentation
and the prompt directors and things that you

922
01:16:56.439 --> 01:16:59.880
need to in order to be able
to use that Agat same thing with githubs,

923
01:17:00.039 --> 01:17:02.399
we have like a get ub integration
so you can actually look it,

924
01:17:02.479 --> 01:17:08.439
open prs and do operations and things
like that. So that that's like twenty

925
01:17:08.520 --> 01:17:13.640
thirty functions itself. So you do
it with a helper. So that's what

926
01:17:13.680 --> 01:17:15.720
I in the book. That's what
I mean by patterns, right, so

927
01:17:15.760 --> 01:17:20.600
identified that this is a pattern that
used more than once, you know,

928
01:17:20.720 --> 01:17:25.920
and should be reusable by other people. So I generalize it, describe it

929
01:17:26.399 --> 01:17:33.359
documented in the book. That is
really interesting. I'm just imagining I don't

930
01:17:33.399 --> 01:17:39.880
know, a podcast assistant. It's
you know, hey, Obi said something

931
01:17:39.880 --> 01:17:44.720
he didn't want to say at about
fifteen minutes in and it sounded something like

932
01:17:44.760 --> 01:17:46.960
this, can you go take it
out? And then it right, it

933
01:17:47.000 --> 01:17:51.159
goes to the audio editor assistant,
and the audio editor assistant knows how to

934
01:17:51.199 --> 01:17:56.520
open up the file and scan and
understand. Okay, this is where Obe

935
01:17:56.520 --> 01:18:01.760
said the thing, and then right, that's the that's the premise of the

936
01:18:01.880 --> 01:18:06.439
multitude of workers. So can I
call the multitude of workers because like in

937
01:18:06.479 --> 01:18:12.720
your example, you'd have a worker
who was the podcast editor worker so that

938
01:18:12.880 --> 01:18:15.479
you know, has a specific set
of tools, and it just said start

939
01:18:15.520 --> 01:18:20.199
waiting for a request for that,
which is why it's reminiscent of micro services,

940
01:18:20.520 --> 01:18:23.680
you know, and it's actually I
think you think about it in a

941
01:18:23.680 --> 01:18:28.840
similar way. Yeah. Cool,
Well, I want to be mindful of

942
01:18:28.880 --> 01:18:32.199
time, and we scheduled this to
end in like three minutes. We're going

943
01:18:32.279 --> 01:18:36.840
to go over a little bit.
But this has been really fascinating. I

944
01:18:36.920 --> 01:18:41.520
just went and picked up your book. I didn't know I could have it

945
01:18:41.600 --> 01:18:44.600
yet, so as soon as as
soon as I looked for and I was

946
01:18:44.640 --> 01:18:48.159
like, I was like, oh, I'm buying that sucker. Yes it

947
01:18:48.560 --> 01:18:54.880
is mine. It is on my
computer. So yeah, so I'm gonna

948
01:18:54.920 --> 01:18:58.600
go ahead and move us picks before
we do that, though, Obe,

949
01:18:58.720 --> 01:19:02.039
if people want to connect with you
on this stuff, I see you all

950
01:19:02.079 --> 01:19:06.720
the time on the Ruby AI Builders
discord, and I'll get a link in

951
01:19:06.760 --> 01:19:13.039
there for that, But are there
other good places to find you? I'm

952
01:19:13.079 --> 01:19:16.399
just you know, usual Twitter.
I'll be Fernandez a Gmail if you want

953
01:19:16.399 --> 01:19:21.680
to email me. The products is
Olympia that chat. We got a little

954
01:19:21.680 --> 01:19:29.319
community of users there. Yeah,
that's pretty much it. I mean some

955
01:19:29.439 --> 01:19:30.520
of my other channel, like if
you find me on Instagram and stuff,

956
01:19:30.520 --> 01:19:32.840
it's all going to be my music
career stuff. So I mean, if

957
01:19:32.880 --> 01:19:35.840
you're interested, if you like electronic
music, look me up on Spotify.

958
01:19:35.960 --> 01:19:44.439
I'll be Fernandez. I just recently
made a spreadsheet of all the music I've

959
01:19:44.439 --> 01:19:49.680
ever made since I started, and
I'm over one hundred and thirty original compositions,

960
01:19:49.880 --> 01:19:54.760
so about half of them never been
released. But but yeah, that's

961
01:19:55.439 --> 01:20:00.399
come a long way with that as
well, So awesome. All right,

962
01:20:00.560 --> 01:20:06.039
Valentino, what are your picks?
A lot along the subject of today,

963
01:20:06.399 --> 01:20:12.159
I'm just gonna do one pick.
I saw this talk from doctor Jim Fan

964
01:20:12.399 --> 01:20:17.279
who's part of Nvidia's new Gear group, which is generalist embodied agent research.

965
01:20:18.079 --> 01:20:25.199
It's fascinating stuff. But he gave
this talk at the last NVIDIA conference on

966
01:20:25.640 --> 01:20:31.079
the new foundation agents that they're building
around robots and teaching them to learn using

967
01:20:31.159 --> 01:20:36.640
virtual dojos. So there's like a
very manual process involved in training a robot

968
01:20:36.680 --> 01:20:41.119
to do tasks where they have to
do a lot of trial and of their

969
01:20:41.159 --> 01:20:45.880
own to autocorrect themselves. And so
they've basically found a way to create virtual

970
01:20:45.960 --> 01:20:53.239
environments using like some previous products they
did with Minecraft, to like teach skills

971
01:20:53.319 --> 01:20:58.560
to robots in virtual environments so that
they can do the repetitive process of trial

972
01:20:58.600 --> 01:21:05.079
and error virtually and super fascinating stuff. And he gives a great talk on

973
01:21:05.159 --> 01:21:15.760
how these foundation agents work, and
I recommend you check it out. Nice.

974
01:21:16.439 --> 01:21:18.760
I'm gonna throw in a few picks
on my own. So my friends

975
01:21:18.800 --> 01:21:25.760
came over last night. We were
playing board games, and yeah, I

976
01:21:25.800 --> 01:21:31.239
think people are pretty used to me
picking the board games, and we played

977
01:21:31.279 --> 01:21:34.640
Lost Ruins of Arnac, So I'm
gonna pick Lost Ruins of our nec.

978
01:21:34.760 --> 01:21:41.359
I just pulled up the wrong thing. So essentially, you have like a

979
01:21:41.399 --> 01:21:45.880
technology track, you have exploration,
you can do, you can do deck

980
01:21:45.920 --> 01:21:54.520
building. All of those things play
into your score at the end. And

981
01:21:54.640 --> 01:22:01.520
so as it's a little bit more
involved than kind of your your regular game

982
01:22:01.800 --> 01:22:08.359
board game. Geek waits it at
two point ninety six, but it does

983
01:22:08.439 --> 01:22:12.000
say that you can play it with
the players that are ten ten plus.

984
01:22:12.960 --> 01:22:15.880
The community says ten plus, the
game says twelve plus. That's probably about

985
01:22:15.920 --> 01:22:19.039
right. There were three of us
playing last night. We had a great

986
01:22:19.079 --> 01:22:24.800
time. So anyway, it came
out in twenty twenty. There is an

987
01:22:24.840 --> 01:22:29.600
expansion, and I haven't played the
expansion in a while, so I'm not

988
01:22:29.640 --> 01:22:35.000
gonna shout that out. But anyway, Lost Ruins of Arnac. It's a

989
01:22:35.039 --> 01:22:40.039
super fun game. It's just a
little more involved than sort of your Settlers

990
01:22:40.039 --> 01:22:46.039
of Katan or whatever that you know
comes in about it two. So another

991
01:22:46.079 --> 01:22:51.159
pick I have. So I've been
working my way through Ayoush who's not here

992
01:22:51.199 --> 01:22:58.079
today, but through his book The
Rails and hot Wire Codex, and I

993
01:22:58.279 --> 01:23:06.239
actually got a working version of my
I'm basically rewriting top end depths because they're

994
01:23:06.279 --> 01:23:11.399
just things I want different, vastly
different. Right. You learn all your

995
01:23:11.479 --> 01:23:15.119
lessons and then it's like, okay, well I could refactor all this,

996
01:23:15.319 --> 01:23:17.279
but that would be more work than
just, you know, writing it new.

997
01:23:17.319 --> 01:23:19.880
And the other thing is is I
can add in things that I didn't

998
01:23:19.920 --> 01:23:26.439
have before from the start, like
internationalization and accessibility and things like that that

999
01:23:26.479 --> 01:23:30.079
I didn't do last time because adding
that in after the fact I miss stuff

1000
01:23:30.159 --> 01:23:35.720
everywhere. So this way I can
just be complete on putting it together.

1001
01:23:35.800 --> 01:23:41.520
But yeah, so he has his
chapters on Turbo Native and so yeah,

1002
01:23:41.560 --> 01:23:45.199
so I have an iOS version of
the app running. I have most of

1003
01:23:45.239 --> 01:23:48.960
an Android version running. I just
got it running so that it brings up

1004
01:23:49.039 --> 01:23:57.239
the website in the in the native
view, but it doesn't have the navigation

1005
01:23:57.319 --> 01:24:00.159
or anything else on it yet.
Turns out that's a little bit of work

1006
01:24:00.920 --> 01:24:04.520
to get that to go, but
it's very cool, So I'm very happy

1007
01:24:04.520 --> 01:24:10.159
with that. I'm going to pick
the Rails and hot Wire Codex by a

1008
01:24:10.319 --> 01:24:17.119
us Natia and then yeah, there
was something else I was going to pick,

1009
01:24:17.159 --> 01:24:19.520
and I just can't think of what
it is at the moment. Oh,

1010
01:24:19.640 --> 01:24:26.319
I've been watching the Euros. I'm
a soccer nut, and so yeah,

1011
01:24:26.359 --> 01:24:28.920
I've been pretty happy with the way
things are going so far. So

1012
01:24:29.760 --> 01:24:31.800
my team if they're in and they
weren't in the World Cup, and it

1013
01:24:31.840 --> 01:24:36.840
broke my heart. Is Italy just
because I lived there for two years,

1014
01:24:38.640 --> 01:24:42.159
actually went to a couple of soccer
soccer matches while I was there, and

1015
01:24:42.239 --> 01:24:45.399
I just I just love watching those
guys play. If it's not Italy,

1016
01:24:45.479 --> 01:24:51.119
then it's usually England, France,
US and honorable mention is Netherlands. And

1017
01:24:53.399 --> 01:24:58.840
so all those teams are playing in
the EUROS because it's European Championship and except

1018
01:24:58.880 --> 01:25:02.479
for US, and all of them
when their matches. So I'm I'm enjoying

1019
01:25:02.520 --> 01:25:08.560
so far watching them win. I
think the next game on the schedule that

1020
01:25:08.680 --> 01:25:11.680
I'm going to be watching though,
is France versus Netherlands, and so of

1021
01:25:11.680 --> 01:25:14.520
course I have to it for France, so we'll see how that goes.

1022
01:25:14.560 --> 01:25:17.720
But yeah, it's it's been awesome. So if you enjoy soccer, let

1023
01:25:17.720 --> 01:25:23.680
me know you might see me tweet
about it some. But yeah, those

1024
01:25:23.680 --> 01:25:29.600
are my picks. Uh pick,
yeah, do it. I've been playing

1025
01:25:29.600 --> 01:25:34.760
with this thing called udio. It's
like audio but without the a uh huh

1026
01:25:34.880 --> 01:25:39.920
except i'm you. I'm so.
I think generating a song is a you

1027
01:25:39.960 --> 01:25:43.960
know, like a full song,
especially if use ai lyrics is a just

1028
01:25:44.000 --> 01:25:49.319
a novelty. I don't know that
this will have any sort of transfer transformational

1029
01:25:49.319 --> 01:25:55.680
impact on anything. However, it's
really fun for doing things like impressing your

1030
01:25:55.720 --> 01:26:00.000
barber, which I did here in
Mexico City a week ago. Uh,

1031
01:26:00.159 --> 01:26:01.880
because we were he asked me about
AI, and I said, did you

1032
01:26:01.880 --> 01:26:05.439
know I can make music? And
then I made a like a like a

1033
01:26:05.520 --> 01:26:13.840
bonda, you know, kind of
a thing about Marcos, the barber who

1034
01:26:13.880 --> 01:26:18.319
had and and he was so florid
that he was laughing his ass off and

1035
01:26:18.520 --> 01:26:25.520
it literally interrupted all the other barbers
to show them in the shop. So

1036
01:26:26.079 --> 01:26:30.880
it has good novelty value, you
know, making operas about your coworkers and

1037
01:26:30.880 --> 01:26:34.439
stuff. But what I what I'm
using for as as a semi professional producer,

1038
01:26:35.319 --> 01:26:42.920
is to generate vocals and to get
ideas based on my own music.

1039
01:26:42.960 --> 01:26:48.000
Because a week ago or so they
added the ability to upload bits of music.

1040
01:26:49.119 --> 01:26:54.560
So now now that turns it into
a bit of a professional tool,

1041
01:26:54.960 --> 01:26:58.359
because, for instance, I can
take an instrumental that I've made, I

1042
01:26:58.439 --> 01:27:00.840
make mostly instrumentals, and I can
upload it and then I can put in

1043
01:27:00.880 --> 01:27:04.399
my lyrics and it will sing my
lyrics, and I can iterate on that

1044
01:27:04.439 --> 01:27:08.600
in the same way that you would
iterate an image with my Journey or Dolly

1045
01:27:09.640 --> 01:27:14.000
until you get something usable, and
then without getting into the workflow too much,

1046
01:27:14.000 --> 01:27:16.600
you can extract the vocals and actually
integrate them into your music. So

1047
01:27:18.720 --> 01:27:23.399
for any of you out there listening
who like me, uh you know,

1048
01:27:24.000 --> 01:27:26.800
love the idea of writing lyrics or
singing, but you can't sing worth it,

1049
01:27:26.880 --> 01:27:31.640
dam then this is a really awesome
tool to use for that. And

1050
01:27:31.680 --> 01:27:41.079
it's a it's a lot of fun
awesome that's my big cool all right,

1051
01:27:41.079 --> 01:27:48.279
Well, thanks for coming Obie,
this was likewise thanks, yeah, looking

1052
01:27:48.319 --> 01:27:51.760
forward to reading the rest of the
book for sure, right on. Yeah,

1053
01:27:51.840 --> 01:28:00.319
let me know what you think.
And uh oh yeah that's it for

1054
01:28:00.960 --> 01:28:02.279
no, it's all good. We'll
just wrap it up though, and until

1055
01:28:02.319 --> 01:28:06.039
next time, folks, Max out
m

