WEBVTT

1
00:00:00.780 --> 00:00:03.760
Hi and welcome to this AI in C# video

2
00:00:03.760 --> 00:00:05.540
on the Microsoft Agent framework.

3
00:00:06.060 --> 00:00:08.780
Today we are going to cover the DevUI,

4
00:00:09.280 --> 00:00:11.400
where we will give an introduction, meaning we

5
00:00:11.400 --> 00:00:15.520
will only see what it can do and

6
00:00:15.520 --> 00:00:17.940
later we will go into a bit more

7
00:00:17.940 --> 00:00:20.400
real life scenarios, but more on that in

8
00:00:20.400 --> 00:00:23.140
the end part of this video.

9
00:00:25.380 --> 00:00:28.740
So inside the tool I put DevUI down

10
00:00:28.740 --> 00:00:32.220
here, because I probably don't think there will

11
00:00:32.220 --> 00:00:35.100
be more videos about it in terms of

12
00:00:35.100 --> 00:00:37.340
new code, so I put it down here

13
00:00:37.340 --> 00:00:41.000
so it's easy to take hold of and

14
00:00:41.000 --> 00:00:45.320
in my case I'm using Azure OpenAI and

15
00:00:45.320 --> 00:00:49.300
then using the new package here called DevUI.

16
00:00:50.380 --> 00:00:53.660
So I think it's easier that I show

17
00:00:53.660 --> 00:00:55.960
you the code first and then we will

18
00:00:55.960 --> 00:00:59.500
talk about the end result of the code,

19
00:00:59.980 --> 00:01:06.380
because this is a web API running normal

20
00:01:06.380 --> 00:01:10.480
ASP.NET Core and once it runs we

21
00:01:10.480 --> 00:01:14.320
end up with this website and this website

22
00:01:14.320 --> 00:01:18.660
is a developer website, a little like Aspire

23
00:01:18.660 --> 00:01:21.880
started out as a developer website, or something

24
00:01:21.880 --> 00:01:25.400
that you don't release, but is something you

25
00:01:25.400 --> 00:01:29.660
have doing testing and deployment and so on.

26
00:01:30.960 --> 00:01:33.060
And what it can do is, we can

27
00:01:33.060 --> 00:01:34.820
just talk to it, in this case it's

28
00:01:34.820 --> 00:01:37.720
the comic guy from South Park, so we

29
00:01:37.720 --> 00:01:47.460
can say, what is best, Star Trek or

30
00:01:47.460 --> 00:01:48.260
Star Wars?

31
00:01:53.140 --> 00:01:55.610
And for people who know the series, he's

32
00:01:55.610 --> 00:01:59.330
very, very condescending, so we will get a

33
00:01:59.330 --> 00:02:00.430
long answer back.

34
00:02:02.930 --> 00:02:05.950
So what you can see is, you can

35
00:02:05.950 --> 00:02:09.090
do a normal chatbot, you can get the

36
00:02:09.090 --> 00:02:15.150
raw events from all the responses, you have

37
00:02:15.150 --> 00:02:18.850
some traces that don't work, because this tool

38
00:02:18.850 --> 00:02:23.710
is a port of something for Python, and

39
00:02:23.710 --> 00:02:27.330
it is sort of ported over, but not

40
00:02:27.330 --> 00:02:30.210
entirely ported over, it's a bit buggy still

41
00:02:30.210 --> 00:02:34.390
in this traces part don't work, the tools

42
00:02:34.390 --> 00:02:36.930
do, I can show that if I go

43
00:02:36.930 --> 00:02:40.770
to another agent and say, what is the

44
00:02:40.770 --> 00:02:44.490
weather like in Paris?

45
00:02:47.450 --> 00:02:49.110
And we can see it made a tool

46
00:02:49.110 --> 00:02:51.550
call, and we can see arguments in and

47
00:02:51.550 --> 00:02:54.950
out of those tool calls and so on.

48
00:02:55.750 --> 00:02:57.870
And this one talks like a pirate, so

49
00:02:57.870 --> 00:03:00.010
let's just shut up.

50
00:03:00.530 --> 00:03:05.490
But again, it is a bit not finished

51
00:03:05.490 --> 00:03:08.650
for .NET yet, because this is not what

52
00:03:08.650 --> 00:03:12.170
you do in .NET, and the deployment guide

53
00:03:12.170 --> 00:03:16.590
talks about Docker and Python things, so it's

54
00:03:16.590 --> 00:03:20.550
not really finished yet.

55
00:03:20.890 --> 00:03:23.370
But the main part, which is the conversations

56
00:03:23.370 --> 00:03:28.570
work, we can go in and see a

57
00:03:28.570 --> 00:03:31.550
backend URL, which is also wrong, because that's

58
00:03:31.550 --> 00:03:32.330
not the URL.

59
00:03:33.330 --> 00:03:36.070
And all the things is more or less

60
00:03:36.070 --> 00:03:38.290
Python-y, there's also a box like if

61
00:03:38.290 --> 00:03:40.630
you press this button, it just fails.

62
00:03:41.990 --> 00:03:44.850
And up here, it has a gallery that

63
00:03:44.850 --> 00:03:48.570
is Python-only anyway.

64
00:03:51.390 --> 00:03:53.750
But up here, there's some agents, so let's

65
00:03:53.750 --> 00:03:55.630
see some code, why they are there, and

66
00:03:55.630 --> 00:03:58.330
then let's dive back to it after the

67
00:03:58.330 --> 00:03:58.550
fact.

68
00:04:01.400 --> 00:04:04.400
So again, this is a normal web API,

69
00:04:05.000 --> 00:04:09.440
and nothing special anywhere in app settings or

70
00:04:09.440 --> 00:04:09.720
anything.

71
00:04:09.720 --> 00:04:12.020
The only thing I have done is I've

72
00:04:12.020 --> 00:04:15.920
taken the launch settings here, and went in

73
00:04:15.920 --> 00:04:17.940
and said I want to run slash dev

74
00:04:17.940 --> 00:04:21.140
UI whenever it starts up, else you would

75
00:04:21.140 --> 00:04:22.520
need to do it manually.

76
00:04:23.440 --> 00:04:26.580
So I said launch browser equals true, and

77
00:04:26.580 --> 00:04:28.380
launch yourself the dev UI.

78
00:04:28.920 --> 00:04:30.420
That's the only changes I've made here.

79
00:04:32.960 --> 00:04:36.890
Then I make a normal web application builder,

80
00:04:37.530 --> 00:04:40.970
and I make my Azure AI client, just

81
00:04:40.970 --> 00:04:41.490
like normal.

82
00:04:43.500 --> 00:04:46.150
Then in order for this to work, we

83
00:04:46.150 --> 00:04:49.810
need to, in our builder services, add three

84
00:04:49.810 --> 00:04:50.270
things.

85
00:04:50.390 --> 00:04:53.170
We need to add the chat client, and

86
00:04:53.170 --> 00:04:55.290
it's not a chat agent, it's the chat

87
00:04:55.290 --> 00:04:57.750
client, so we go in and take our

88
00:04:57.750 --> 00:05:01.290
normal chat client, and say Ichat client.

89
00:05:03.110 --> 00:05:07.830
We then add the OpenAI responses API, and

90
00:05:07.830 --> 00:05:10.470
the OpenAI conversations API.

91
00:05:12.050 --> 00:05:14.770
And these two are just so this site

92
00:05:14.770 --> 00:05:15.230
works.

93
00:05:15.830 --> 00:05:19.230
The agents themselves use them through that, but

94
00:05:19.230 --> 00:05:21.470
in real life, you don't need to.

95
00:05:23.010 --> 00:05:26.750
And then you have this builder.addAIagents, where

96
00:05:26.750 --> 00:05:29.390
you just give it a name, and you

97
00:05:29.390 --> 00:05:32.330
give it a description, or instructions.

98
00:05:33.110 --> 00:05:34.890
So in this case, it was the reason

99
00:05:34.890 --> 00:05:36.430
why it was a comic require facade.

100
00:05:37.470 --> 00:05:39.450
And then you can give it to tools

101
00:05:39.450 --> 00:05:42.530
like this, but with AI tools, get weather.

102
00:05:45.050 --> 00:05:47.390
Probably should increase this a bit.

103
00:05:48.150 --> 00:05:51.070
I'm on the new, this is 2023, so

104
00:05:51.070 --> 00:05:53.170
I'm back in defaults.

105
00:05:53.170 --> 00:05:55.770
Let's do this so you can better see.

106
00:05:59.880 --> 00:06:02.280
Then we can also, instead of building the

107
00:06:02.280 --> 00:06:04.000
agent like this, I will come back to

108
00:06:04.000 --> 00:06:06.120
why I feel this is wrong to do

109
00:06:06.120 --> 00:06:06.600
this way.

110
00:06:07.580 --> 00:06:09.860
You can still build real agents.

111
00:06:10.660 --> 00:06:12.460
So just an agent, just like we do

112
00:06:12.460 --> 00:06:14.820
normally with instructions, names, and tools.

113
00:06:15.320 --> 00:06:17.120
The important thing is, it needs a name,

114
00:06:17.200 --> 00:06:18.200
else it won't work.

115
00:06:18.860 --> 00:06:22.500
And that name is the one it's being

116
00:06:22.500 --> 00:06:24.340
registered by here.

117
00:06:25.120 --> 00:06:26.860
Before, we saw it just used name and

118
00:06:26.860 --> 00:06:27.340
instruction.

119
00:06:27.900 --> 00:06:30.680
Now we're actually using name and a delegate

120
00:06:30.680 --> 00:06:32.640
in order to create the agents.

121
00:06:32.960 --> 00:06:35.520
So we get access to the service provider,

122
00:06:35.740 --> 00:06:37.820
and we get access to the key.

123
00:06:38.460 --> 00:06:41.640
And the reason for that is, behind the

124
00:06:41.640 --> 00:06:45.220
scenes, if we go into the code that's

125
00:06:45.620 --> 00:06:48.700
there written, is that it's just adding the

126
00:06:48.700 --> 00:06:52.400
different agents as keyed singletons, meaning we have

127
00:06:52.400 --> 00:06:55.400
the name to find the specific agent, and

128
00:06:55.400 --> 00:06:57.660
that's what being used when we have the

129
00:06:57.660 --> 00:06:59.640
Dropbox in the GUI.

130
00:07:02.060 --> 00:07:04.240
In my case, I don't need anything extra,

131
00:07:04.440 --> 00:07:06.560
and I don't need the key to set

132
00:07:06.560 --> 00:07:10.000
it up, so I'm just adding my agent

133
00:07:10.000 --> 00:07:13.800
here and giving it the same name both

134
00:07:13.800 --> 00:07:15.160
places, else it wouldn't work.

135
00:07:17.530 --> 00:07:21.130
Another thing we can do in this is

136
00:07:21.130 --> 00:07:24.110
to have workflows up and running.

137
00:07:25.230 --> 00:07:28.150
So in this case, we are building two

138
00:07:28.150 --> 00:07:33.170
agents that are part of the workflow, a

139
00:07:33.170 --> 00:07:36.190
French translator that translates any text that's given

140
00:07:36.190 --> 00:07:38.630
into French, and a German translator.

141
00:07:40.570 --> 00:07:43.550
And with such agents, you can, of course,

142
00:07:43.630 --> 00:07:46.170
go in and build workflows, just like we've

143
00:07:46.170 --> 00:07:47.830
seen up in the workflow.

144
00:07:49.030 --> 00:07:50.510
Let's find the workflow.

145
00:07:51.450 --> 00:07:54.330
There we have it, where we do the

146
00:07:54.330 --> 00:07:57.070
Agentic workflows, the concurrent, sequential, and so on.

147
00:07:57.390 --> 00:07:59.250
And that's exactly what I'm doing here.

148
00:07:59.630 --> 00:08:03.290
So I'm just, from these builders, getting the

149
00:08:03.290 --> 00:08:07.250
agents, so it's using dependency injection to get

150
00:08:07.250 --> 00:08:10.770
the keyed service of that agent, and I'm

151
00:08:10.770 --> 00:08:13.270
just putting those two agents into a build

152
00:08:13.270 --> 00:08:16.770
sequential workflow, and a concurrent workflow.

153
00:08:17.450 --> 00:08:20.070
Just the same agents to see two different

154
00:08:20.070 --> 00:08:20.790
workflows.

155
00:08:22.820 --> 00:08:24.980
Once we've done up with all the setup,

156
00:08:25.440 --> 00:08:28.560
we can now go into building our web

157
00:08:28.560 --> 00:08:29.760
application like normal.

158
00:08:30.740 --> 00:08:33.520
And in development modes, of course, you could

159
00:08:33.520 --> 00:08:35.559
technically do it out of development mode, but

160
00:08:35.559 --> 00:08:37.720
I would not recommend that.

161
00:08:38.340 --> 00:08:39.520
Again, more on that later.

162
00:08:40.299 --> 00:08:46.680
We map our OpenAI responses, the AI conversations,

163
00:08:47.260 --> 00:08:49.300
and the dev UI, which is the one

164
00:08:49.300 --> 00:08:52.240
that actually makes it so the UI is

165
00:08:52.240 --> 00:08:52.440
there.

166
00:08:53.420 --> 00:08:56.040
And then we run the, down here is

167
00:08:56.040 --> 00:08:59.600
our tool that the agents were given.

168
00:09:01.660 --> 00:09:05.220
So if we do that and come back,

169
00:09:05.380 --> 00:09:08.020
let's see a little more in details what's

170
00:09:08.020 --> 00:09:08.520
going on.

171
00:09:11.430 --> 00:09:13.830
So we can choose our agent up here,

172
00:09:14.430 --> 00:09:18.890
and whenever we choose them, we can go

173
00:09:18.890 --> 00:09:21.430
in and make multiple conversations with them.

174
00:09:23.390 --> 00:09:26.990
And the real agent was behind the scenes

175
00:09:26.990 --> 00:09:29.510
where we knew the other agent instead of

176
00:09:29.510 --> 00:09:31.970
these add agent UI.

177
00:09:34.210 --> 00:09:38.470
Then we have the French and the German

178
00:09:38.470 --> 00:09:42.910
translator, and have them also as workflow sequentials

179
00:09:42.910 --> 00:09:43.690
part.

180
00:09:44.230 --> 00:09:45.430
And we can't get rid of these.

181
00:09:45.750 --> 00:09:48.570
The reason that they are is that whenever

182
00:09:48.570 --> 00:09:51.310
we do the workflow, we need to say

183
00:09:51.310 --> 00:09:55.350
as AI agents, because if we don't do

184
00:09:55.350 --> 00:09:57.410
that, the view I would not work.

185
00:09:57.750 --> 00:10:00.350
So when I was making this demo, I

186
00:10:00.350 --> 00:10:01.950
was trying to get rid of them here.

187
00:10:02.650 --> 00:10:04.750
But apparently, I can't see how to get

188
00:10:04.750 --> 00:10:06.470
rid of them, because I only want to

189
00:10:06.470 --> 00:10:07.510
see them in the workflows.

190
00:10:09.330 --> 00:10:13.370
But these are very simple and just underlying

191
00:10:13.370 --> 00:10:13.810
features.

192
00:10:14.090 --> 00:10:17.370
So if I say hello, it answers back

193
00:10:17.370 --> 00:10:18.790
in French and so on.

194
00:10:19.590 --> 00:10:22.630
So up here, the four here is not

195
00:10:22.630 --> 00:10:25.990
really interesting, because that's just dumb agents.

196
00:10:26.450 --> 00:10:28.250
And again, if I take one of these

197
00:10:28.250 --> 00:10:32.610
and say hello, it will just say hello.

198
00:10:32.790 --> 00:10:36.290
And then just after that, say Bonjour and

199
00:10:36.290 --> 00:10:37.710
hello in German.

200
00:10:39.230 --> 00:10:41.430
And I think there might be some issues

201
00:10:41.430 --> 00:10:45.290
with using the workflows as we hear, because

202
00:10:45.290 --> 00:10:47.150
they just come back in one go.

203
00:10:47.450 --> 00:10:50.050
Technically correct, but that's the way they do

204
00:10:50.050 --> 00:10:50.230
it.

205
00:10:51.490 --> 00:10:55.150
But the workflows is perhaps one of the

206
00:10:55.150 --> 00:10:57.010
most enticing features of this.

207
00:10:57.150 --> 00:10:59.650
All this up here can perhaps be used

208
00:10:59.650 --> 00:11:04.610
for some discovery and that's it.

209
00:11:04.790 --> 00:11:07.270
I was almost about to say debugging, but

210
00:11:07.270 --> 00:11:09.730
in my book, it's not really that.

211
00:11:09.810 --> 00:11:11.870
But I will get to that in a

212
00:11:11.870 --> 00:11:12.190
second.

213
00:11:12.830 --> 00:11:15.130
But the workflows are down here, and they

214
00:11:15.130 --> 00:11:18.210
are actually shown visually, which is really cool.

215
00:11:18.800 --> 00:11:21.830
So if I take this sequential workflow that

216
00:11:21.830 --> 00:11:25.270
takes my text when I say hello world,

217
00:11:28.910 --> 00:11:30.360
it will then run it visually.

218
00:11:31.440 --> 00:11:33.080
This is a quick one, but else it

219
00:11:33.080 --> 00:11:35.440
would still spin here, then go to this

220
00:11:35.440 --> 00:11:36.960
and spin and go to this and spin

221
00:11:36.960 --> 00:11:37.540
and so on.

222
00:11:38.280 --> 00:11:40.180
But we see that it come back and

223
00:11:40.180 --> 00:11:44.240
say hello world in the French one and

224
00:11:44.240 --> 00:11:47.440
hello world in German one.

225
00:11:48.440 --> 00:11:51.160
And so this was a sequential where it

226
00:11:51.160 --> 00:11:52.520
just run one at a time.

227
00:11:53.800 --> 00:11:56.180
While if we took a concurrent, this is

228
00:11:56.180 --> 00:11:58.360
actually how a concurrent look in real life.

229
00:11:58.820 --> 00:12:01.180
In code, it's very simple to just say,

230
00:12:01.560 --> 00:12:02.260
here's the agent.

231
00:12:03.500 --> 00:12:09.680
But some batch concurrent nodes will be created

232
00:12:09.680 --> 00:12:10.720
on the fly for you.

233
00:12:11.720 --> 00:12:17.120
And if we run that again, we will

234
00:12:17.120 --> 00:12:20.120
also see that it comes back and it

235
00:12:20.120 --> 00:12:25.020
says, in this case, German and then French.

236
00:12:25.900 --> 00:12:28.320
And you can actually get it to write

237
00:12:28.320 --> 00:12:31.240
it in the different order because it's concurrent

238
00:12:31.240 --> 00:12:36.060
and just works depending on who comes back

239
00:12:36.060 --> 00:12:36.500
first.

240
00:12:37.020 --> 00:12:38.820
Let's see if we can get it to

241
00:12:38.820 --> 00:12:39.100
happen.

242
00:12:40.440 --> 00:12:42.660
Yeah, so in this case, it was French,

243
00:12:43.060 --> 00:12:47.420
German, French, German.

244
00:12:48.380 --> 00:12:50.260
I have seen it the other way around.

245
00:12:50.260 --> 00:12:52.660
Yeah, here it came that the German one

246
00:12:52.660 --> 00:12:54.380
was faster in this case.

247
00:12:55.360 --> 00:12:57.220
And so that also proved that a concurrent

248
00:12:57.220 --> 00:12:58.900
one just runs concurrent.

249
00:12:59.220 --> 00:13:01.760
And whenever someone come back, they are the

250
00:13:01.760 --> 00:13:04.200
first output, which you, of course, need to

251
00:13:04.200 --> 00:13:04.820
take care of.

252
00:13:08.830 --> 00:13:12.510
So this is very much work in progress.

253
00:13:12.710 --> 00:13:15.230
Again, there's various buttons that don't work.

254
00:13:15.610 --> 00:13:17.190
There's sidebars here.

255
00:13:17.250 --> 00:13:19.890
There's deployment guides that have nothing to do

256
00:13:19.890 --> 00:13:20.450
with C Sharp.

257
00:13:20.450 --> 00:13:22.610
Of course, all that will be fixed.

258
00:13:24.250 --> 00:13:28.550
My more pressing concern in all this, when

259
00:13:28.550 --> 00:13:33.260
I look at this code, is it's a

260
00:13:33.260 --> 00:13:38.060
cool demo, but is there actually some scenarios

261
00:13:38.060 --> 00:13:42.160
where that would in any way resemble real

262
00:13:42.160 --> 00:13:44.440
life and for this to be useful?

263
00:13:45.400 --> 00:13:49.480
Because if we look at this code, I'm

264
00:13:49.480 --> 00:13:51.180
not making my agents up front.

265
00:13:52.360 --> 00:13:54.020
That is simply not happening.

266
00:13:54.560 --> 00:13:58.740
Because I often need the setup to be

267
00:13:58.740 --> 00:14:01.180
dynamic on the fly that the user can

268
00:14:01.180 --> 00:14:06.780
choose which model to use, which tool to

269
00:14:06.780 --> 00:14:07.360
use.

270
00:14:07.680 --> 00:14:11.120
I often have multiple agents that talk with

271
00:14:11.120 --> 00:14:16.460
each other on the fly, building up the

272
00:14:16.460 --> 00:14:20.200
instructions based on input data.

273
00:14:20.460 --> 00:14:22.780
The input data in general is very long.

274
00:14:22.960 --> 00:14:25.260
It's a lot of JSON and so on.

275
00:14:25.360 --> 00:14:29.680
So, yes, I could go in here and

276
00:14:29.680 --> 00:14:31.800
whenever I want to run in, put in

277
00:14:31.800 --> 00:14:33.700
a very big JSON that I need to

278
00:14:33.700 --> 00:14:37.300
construct and often don't have because it comes

279
00:14:37.300 --> 00:14:40.800
from an external webhook or something like that.

280
00:14:44.520 --> 00:14:47.160
Structured output, you cannot test.

281
00:14:47.480 --> 00:14:50.880
Like 75% of all my outputs from

282
00:14:50.880 --> 00:14:52.740
an AI is structured output.

283
00:14:53.340 --> 00:14:55.800
But there is no way to tell that

284
00:14:55.800 --> 00:15:00.500
because we are never ever running the runAsync

285
00:15:00.500 --> 00:15:04.480
or runStreamingAsync where you tell AI needs structured

286
00:15:04.480 --> 00:15:04.880
output.

287
00:15:05.900 --> 00:15:12.420
So, we get a cool looking UI that

288
00:15:12.420 --> 00:15:16.100
can do chatbots, but in my opinion, we're

289
00:15:16.100 --> 00:15:17.860
not building chatbots so often.

290
00:15:19.000 --> 00:15:21.580
That's already been done by ChatTBT.

291
00:15:22.960 --> 00:15:26.620
So, I'm struggling a bit to see the

292
00:15:26.620 --> 00:15:30.300
real value other than discovery, learning for the

293
00:15:30.300 --> 00:15:32.680
first time how this works, what comes back,

294
00:15:32.760 --> 00:15:33.560
what comes forward.

295
00:15:35.180 --> 00:15:38.420
So, as I mentioned in the slide here,

296
00:15:38.720 --> 00:15:40.280
to be continued, question mark.

297
00:15:40.730 --> 00:15:45.740
I will try to see and force myself

298
00:15:45.740 --> 00:15:48.280
in the real life scenario to see how

299
00:15:48.280 --> 00:15:51.760
I can do this because how can I

300
00:15:51.760 --> 00:15:55.240
make my AIs upfront with the data I

301
00:15:55.240 --> 00:15:58.220
want upfront, with the output I want upfront

302
00:15:58.920 --> 00:16:01.480
because I have not seen a way that

303
00:16:01.480 --> 00:16:04.000
you can use DevUI in any other way

304
00:16:04.000 --> 00:16:08.020
than building up the services at startup of

305
00:16:08.020 --> 00:16:08.680
your code.

306
00:16:11.060 --> 00:16:15.000
So, I might find something and there might

307
00:16:15.000 --> 00:16:19.680
be a second video on this to figure

308
00:16:19.680 --> 00:16:23.180
out how this actually is useful in real

309
00:16:23.180 --> 00:16:27.680
-life production because, yes, just expose my agents,

310
00:16:27.800 --> 00:16:30.560
but if they are not the same way

311
00:16:30.560 --> 00:16:34.500
as my real agents in my applications, then

312
00:16:34.500 --> 00:16:38.100
I'm just testing Hello World more than anything.

313
00:16:40.080 --> 00:16:43.080
So, that's the reason why I've been a

314
00:16:43.080 --> 00:16:46.140
bit hesitant to make this video, but I

315
00:16:46.140 --> 00:16:48.780
honestly don't think I will use this much

316
00:16:48.780 --> 00:16:49.420
state today.

317
00:16:50.820 --> 00:16:55.440
But, again, cool demo and definitely a good

318
00:16:55.440 --> 00:16:58.340
way to also tell others, hey, this is

319
00:16:58.340 --> 00:17:00.440
how it works, this is how things run

320
00:17:00.440 --> 00:17:04.980
and so on, visualising workflows the way you

321
00:17:04.980 --> 00:17:08.319
can and so on because all the Python

322
00:17:08.319 --> 00:17:10.859
stuff will, of course, slowly over time go

323
00:17:10.859 --> 00:17:14.619
away and it will become a direct .NET

324
00:17:14.619 --> 00:17:15.780
part.

325
00:17:16.619 --> 00:17:19.480
But day-to-day, I would much more

326
00:17:19.480 --> 00:17:23.060
rely on function calling middleware that I can

327
00:17:23.060 --> 00:17:26.599
control and save in databases and stuff, the

328
00:17:26.599 --> 00:17:29.600
raw HTTP calling if I want to see

329
00:17:29.600 --> 00:17:30.640
what's going on.

330
00:17:31.660 --> 00:17:34.660
But I might change my mind, especially when

331
00:17:34.660 --> 00:17:38.140
I go and do more workflows in the

332
00:17:38.140 --> 00:17:38.480
future.

333
00:17:40.180 --> 00:17:43.400
That's the most enticing part to me, that

334
00:17:43.400 --> 00:17:45.840
you can go in and see your workflows

335
00:17:45.840 --> 00:17:51.700
like these and see them run because then

336
00:17:51.700 --> 00:17:53.640
I at least just should give the input

337
00:17:53.640 --> 00:17:56.620
because they will not have on-the-fly

338
00:17:56.620 --> 00:18:00.300
input like the other ones.

339
00:18:01.580 --> 00:18:02.980
But only time will tell.

340
00:18:03.660 --> 00:18:05.100
I will definitely follow up.

341
00:18:05.520 --> 00:18:09.900
But for now, cool party trick, but not

342
00:18:09.900 --> 00:18:12.480
any real value to me at least.

343
00:18:13.340 --> 00:18:15.020
So then, see you in the next one.
