Unlock the future of AI in ERP systems with our latest episode of Dynamics Corner, where we promise to deliver groundbreaking insights into the integration of artificial intelligence within Microsoft Dynamics 365 Business Central. Join us as we reminisce with our special guests, Jeremy Viska, Dimitri Katzen, and Stefano D'Ameliano, about the exhilarating AI for Microsoft Dynamics 365 Business Central Hackathon hosted by Microsoft in February 2024. From exploring AI vector semantic search to sharing a love for F1 telemetry and Ferrari customizations, our guests bring their diverse expertise and infectious passion for innovation to the table.
Discover the riveting journey of a dynamic team that set out to revolutionize the sales line copilot during the hackathon. By harnessing semantic search and advanced AI technology, they crafted a powerful sales copilot, seamlessly integrated into Azure SQL, and even developed a Power App for natural language ordering. This episode delves into their collaborative process, the technical hurdles they overcame, and the creative strategies they employed to succeed, offering you a treasure trove of practical insights and inspiration.
But that's not all; we also dissect the nuts and bolts of efficient team communication and collaboration, highlighting the pivotal role of GitHub for code management. You'll gain a deep understanding of how semantic search and vector calculations can elevate search functionalities in Business Central, with practical examples and expert advice from Stefano on SQL optimization. Plus, we explore the myriad ways to engage with AI within the Power Platform, ensuring that whether you're an AI enthusiast or a seasoned Dynamics 365 professional, you'll leave this episode brimming with new ideas and knowledge. Tune in and transform your approach to AI in Business Central!
#MSDyn365BC #BusinessCentral #BC #DynamicsCorner
Follow Kris and Brad for more content:
https://matalino.io/bio
https://bprendergast.bio.link/
00:00 - AI Integration in Dynamics 365
10:53 - AI Hackathon for Business Central
29:44 - Effective Team Communication and Collaboration
36:43 - Semantic Search and Vector Calculations
53:24 - Enhancing Search Functionality With AI
01:07:04 - Exploring AI and Available Resources
WEBVTT
00:00:00.480 --> 00:00:11.560
Welcome everyone to another episode of Dynamics Corner, the podcast where we dive deep into all things Microsoft Dynamics, whether you're a seasoned expert or just starting your journey into the world of Dynamics 365.
00:00:11.560 --> 00:00:17.132
Innovative strategies, hackathon and a peek into the future with AI integration.
00:00:17.132 --> 00:00:18.565
I'm your co-host, chris.
00:00:19.341 --> 00:00:20.082
And this is Brad.
00:00:20.082 --> 00:00:23.853
This episode was recorded on February 22nd 2024.
00:00:23.853 --> 00:00:30.567
Chris, Chris, Chris, I learned something today, Me too, man, I didn't know this existed.
00:00:30.626 --> 00:00:31.791
I learned a lot.
00:00:32.820 --> 00:00:43.860
I finally understand this whole AI vector semantic search and I'm happy we had this conversation and I'm happy we had this conversation.
00:00:43.860 --> 00:01:25.597
Back in February, microsoft hosted the AI for Microsoft Dynamics 365 Business Central Hackathon and with us today we had the opportunity to speak with Jeremy Viska, dimitri Katzen and Stefano D'Ameliano about their contribution to the hackathon good morning everyone, good morning morning.
00:01:25.597 --> 00:01:26.397
Good afternoon.
00:01:26.718 --> 00:01:28.659
Hello, good afternoon.
00:01:29.840 --> 00:01:36.849
And also good future, Because Dimitri is with us from the future.
00:01:37.271 --> 00:01:37.953
From tomorrow.
00:01:40.240 --> 00:01:46.585
So it's evening, it's evening, it's a warm evening, oh, warm so it's not tomorrow, it's evening, it's a warm evening.
00:01:46.605 --> 00:01:47.087
Yes, oh warm.
00:01:47.087 --> 00:02:07.802
So it's not tomorrow, it's today, but in the evening yep yes I show you in your evening yes, yes, I get all this time stuff mixed up um I guess this is night it feels night time yeah, it feels it's dark.
00:02:07.861 --> 00:02:09.026
It's still dark out there, right?
00:02:09.045 --> 00:02:22.472
now exactly, it's already dark here, so we are on the dark side yeah, so.
00:02:22.472 --> 00:02:25.146
Stefano and Brett will be on the light side today.
00:02:25.146 --> 00:02:26.159
Yes, exactly, be on the light side today.
00:02:27.243 --> 00:02:28.026
Yes exactly.
00:02:28.026 --> 00:02:32.087
Two on the dark side, and I think well, jeremy will be in the light side too.
00:02:32.087 --> 00:02:39.913
So you know, but um, forza, forza, forza.
00:02:40.312 --> 00:02:40.653
Forza.
00:02:40.674 --> 00:02:45.211
Sorry, I said Forza Ferrari.
00:02:45.211 --> 00:02:45.774
Ah sorry, yes, forza Sorry.
00:02:46.056 --> 00:02:55.473
I said Forza Ferrari, ah sorry, yes, forza Ferrari, but I'm not a huge fan of car sports.
00:02:55.473 --> 00:03:11.236
So, yes, ferrari for Italy's like pizza, but I'm not a big follower of Formula 1 and stuff like that.
00:03:12.540 --> 00:03:14.225
You don't have so much money yet.
00:03:15.710 --> 00:03:16.211
Exactly.
00:03:16.211 --> 00:03:18.105
I'm working for that.
00:03:20.942 --> 00:03:23.330
You don't have to have a lot of money to watch.
00:03:24.221 --> 00:03:24.622
To watch.
00:03:24.622 --> 00:03:24.884
No.
00:03:25.800 --> 00:03:26.323
To go or to race.
00:03:26.323 --> 00:03:27.790
You have to have a lot of money to watch.
00:03:27.790 --> 00:03:29.340
To watch, no To go or to race you have to have a lot of money, exactly.
00:03:29.340 --> 00:03:33.050
And I didn't realize how much money was in that sport.
00:03:33.919 --> 00:03:36.108
To drive you need a lot of money.
00:03:37.741 --> 00:03:39.247
The drivers make a lot of money.
00:03:39.247 --> 00:03:48.330
The vehicles are millions of US dollars I think it's $16 million per and then what they put on for the tracks is crazy.
00:03:48.330 --> 00:03:53.748
I don't know if I'll like Ferrari next year, with them changing up the team, but we'll see.
00:03:53.748 --> 00:03:56.449
Right now this year, I like Ferrari and McLaren.
00:03:56.449 --> 00:03:59.366
Those are my two favorites.
00:04:00.871 --> 00:04:01.612
But, jeremy, welcome.
00:04:01.612 --> 00:04:08.834
We worked with Ferrari, I think seven, eight years ago.
00:04:08.834 --> 00:04:26.276
It was our customer for some parts and I have a live meeting with them and I saw how they create the internals of their uh their cars.
00:04:26.276 --> 00:04:28.160
It's absolutely incredible.
00:04:28.160 --> 00:04:29.341
So you can choose.
00:04:29.341 --> 00:04:48.279
Also when you buy a ferrari for yourself, if you have the money, you can choose the type of uh also the type of uh internals you want, uh, the colors, the type of way how internals are created.
00:04:48.279 --> 00:04:56.185
So you can choose every minimal types of details in the internals.
00:04:56.185 --> 00:04:57.250
It's incredible.
00:04:57.250 --> 00:05:15.855
They had more than 100 types of internal colors and stuff that you can choose from in order to customize your car.
00:05:15.855 --> 00:05:19.333
So it's incredible.
00:05:20.880 --> 00:05:22.583
Those cars are incredible.
00:05:23.324 --> 00:05:32.935
I think if Microsoft would like to talk about Business Central performance during these conferences, they need to have Ferrari as a customer.
00:05:36.081 --> 00:05:38.884
I was going to mention that telemetry.
00:05:38.884 --> 00:05:57.064
I never really understood telemetry as much as I did with what they do with F1 racing, because all of the tracking that they do on those vehicles is incredible if you take a look at all of the telemetry and the monitoring that they do.
00:05:57.625 --> 00:06:22.307
With the slight adjustments because you're talking fractions of a second performance gains it is for them and, um, I was fortunate enough to go to the f1 race in miami recently and you never appreciate how fast those vehicles are moving, until you see one zoom, you, you, that's just incredible.
00:06:22.307 --> 00:06:25.812
It's, um, it was absolutely incredible.
00:06:25.812 --> 00:06:33.660
But, uh, dimitri, stefano jeremy, thank you for taking the time to speak with us this morning.
00:06:33.660 --> 00:06:45.872
I have a lot of questions for you all and I'm happy that you are all here, because it's a topic that interests me and I was able to follow from afar, not as close, intimately as you.
00:06:45.872 --> 00:06:58.014
But before we get into the conversation, if you would, would each of you tell us a little bit about yourself, dimitri, yeah, hi everyone.
00:06:58.394 --> 00:06:58.896
I'm Dimitri.
00:06:58.896 --> 00:07:04.110
I'm MVP for Business Central and a central QA creator.
00:07:04.110 --> 00:07:14.887
I'm a big fan of AI in Business Central and a central QA creator and a big fan of AI in Business Central and in general.
00:07:14.887 --> 00:07:24.916
So, yeah, I would love to talk about our AI hackathon, that we hacked Our team hacked this February.
00:07:28.776 --> 00:07:29.139
Stefano.
00:07:29.139 --> 00:07:30.767
My name is Stefano, from Italy.
00:07:30.767 --> 00:07:35.430
I'm an MVP on Business Central and on Azure.
00:07:35.430 --> 00:07:44.410
I work from Business Central for a very lot of years and from an AV in the past.
00:07:44.410 --> 00:07:58.012
My work is actually mainly divided between Business Center and Azure Staffs, so I also, like Dimitri, I'm quite passionate about AI in general.
00:07:58.012 --> 00:08:07.494
I have done in the past, and actually currently doing, some projects in AI.
00:08:07.494 --> 00:08:24.754
I'm happy that Dimitri was the creator of this hackathon idea and with Jeremy and Dimitri I think we have done quite nice scenarios that I hope that in the future will be also embedded into the standard product.
00:08:24.754 --> 00:08:24.954
Excellent.
00:08:24.973 --> 00:08:26.858
One question that I have that in the future will be also embedded into the standard product.
00:08:26.858 --> 00:08:27.100
Excellent.
00:08:27.100 --> 00:08:32.304
One question that I have to ask Did you have pineapple pizza yet with Giulio?
00:08:34.168 --> 00:08:35.451
Yes, you did.
00:08:35.490 --> 00:08:39.667
Yes, and did you like the pineapple pizza?
00:08:41.341 --> 00:08:41.903
No, not too much.
00:08:41.903 --> 00:08:42.446
Not too much.
00:08:42.446 --> 00:08:47.062
I honestly prefer the Italian way.
00:08:47.062 --> 00:08:50.485
But, yes, we have done the experiment.
00:08:50.485 --> 00:09:02.136
I think that we will propose that in some next events, but I can confirm that the Italian style is better.
00:09:03.639 --> 00:09:04.604
Excellent, excellent.
00:09:04.604 --> 00:09:07.322
We'll have to follow up and have a conversation with the two of you on that.
00:09:07.322 --> 00:09:12.451
Yeah, uh, jeremy hey, uh, another.
00:09:12.631 --> 00:09:22.883
Just rounding out the gang of bc mvps on the call, since now you two are as well as christopher and brad, so there's five of us in the room, so a good hand in poker.
00:09:22.883 --> 00:09:31.836
Uh, been've been doing things for BC for a very long time and very much a generalist in lots of areas.
00:09:31.836 --> 00:09:45.879
I love to dive deep briefly into each thing and find all the different ways that things can be leveraged and used and brought together, mixing and matching different things, or mixing and matching different things.
00:09:45.879 --> 00:09:51.259
So it made me laugh watching you guys kind of talk pizza shenanigans from afar, because Swedish pizza shops have the same attitude of mix and match and see what works.
00:09:51.259 --> 00:09:56.692
So you know the horrors that people fight over the pineapple is.
00:09:56.692 --> 00:10:00.986
I would love to introduce them to some of the ones I love and some of the ones I fear here.
00:10:00.986 --> 00:10:07.147
Like they put shawarma on pizza, so it's a nice Turkish meat, very good.
00:10:07.147 --> 00:10:11.566
But also you can get pizzas here with bananas and peanuts and things like that.
00:10:11.566 --> 00:10:14.385
So it's a whole different culinary world.
00:10:15.229 --> 00:10:17.232
That takes it to a whole new level.
00:10:17.354 --> 00:10:20.390
Bananas and peanuts Shrimp tuna.
00:10:22.159 --> 00:10:23.505
Bananas and peas.
00:10:28.559 --> 00:10:29.698
I think we have to stop there, because now I'm afraid.
00:10:30.720 --> 00:10:31.240
Yeah, I blame myself.
00:10:31.240 --> 00:10:35.932
I ate the pizza with the apples just three days ago, oh wow.
00:10:36.642 --> 00:10:37.404
That's wild.
00:10:40.123 --> 00:10:43.309
You can write us where you will be in Venice.
00:10:44.732 --> 00:10:45.073
Exactly.
00:10:45.073 --> 00:10:47.807
But yeah, don't unfollow me.
00:10:47.807 --> 00:10:49.150
Yeah, it was just one.
00:10:53.481 --> 00:11:27.259
I think just the conversation with the thought of apples, bananas and peanuts on pizza just totally threw off my focus for a few moments, but, as you had alluded to in the introductions and back in February February 20th to February 23rd Microsoft hosted to explore the realm of AI within Business Central, the AI hackathon for Microsoft Dynamics 365 Business Central, and the three of you were on a team I guess, if you call it Is that the official word the team that submitted a contribution to this hackathon.
00:11:27.259 --> 00:11:48.974
I was able to watch from afar afterwards as you had discussions about your contribution or submission, and I wanted to speak with you about it, to learn more about your contribution as well as several other questions here about that.
00:11:48.974 --> 00:12:05.933
So, before we start, would one of you tell us what is a hackathon in general, just in a general basis, and then we can branch into what was the hackathon for Microsoft Dynamics 365 Business Central.
00:12:05.933 --> 00:12:08.245
Not everybody at once.
00:12:11.984 --> 00:12:16.894
So I, frankly speaking, got email from Microsoft team in the beginning of December.
00:12:19.143 --> 00:12:27.077
So it was their idea to organize this event, which they called hackathon.
00:12:27.077 --> 00:13:07.774
The idea was that they want they just introduced to the copilot toolkit in the business central two months ago in directions EMEA and they wanted to, you know, spread the world and show how different people, different partners, can use it to create something cool Not something, maybe will be used in the product, but you know but some ideas.
00:13:07.774 --> 00:13:11.047
What can we do with that, what scenarios it can cover?
00:13:11.047 --> 00:13:26.149
So I got this email in the beginning of December and they asked me about how I see this hackathon should be going, how should they prepare materials and so on.
00:13:26.149 --> 00:13:31.947
So I just gave the advice and that's it.
00:13:32.207 --> 00:13:35.634
So they organized everything by themselves.
00:13:35.634 --> 00:13:47.952
So maybe after I will describe about the idea and how we got to the idea.
00:13:47.952 --> 00:13:59.296
But in general the hackathon was intended for someone who was not involved into the AI world at all.
00:13:59.296 --> 00:14:23.072
So it's something that any partner who was not building before any AI solutions can jump into this event, make it, you know, join into a team or create his own team and invent something, something cool that will work inside of Business Central with the help of AI.
00:14:27.562 --> 00:14:28.245
Okay, great.
00:14:28.245 --> 00:14:49.370
So with that hackathon and the hackathon was the Microsoft's intent for teams to get together and create something with AI within Business Central, to explore or come up with ideas for how you could use AI within Business Central, and so the three of you had formed a team.
00:14:49.370 --> 00:14:52.129
How did you come up with the team?
00:14:52.129 --> 00:14:53.686
How did you form the team?
00:14:53.686 --> 00:14:56.389
The three of you are geographically dispersed.
00:14:56.389 --> 00:15:02.168
I know Jeremy and Stefano, you are a bit closer in time, and then Dimitri, you are several hours ahead of them.
00:15:02.168 --> 00:15:10.815
So to have a dispersed team like that is not uncommon in the world today, but it's also unique.
00:15:10.815 --> 00:15:13.028
So how did you come up with the team?
00:15:16.024 --> 00:15:18.671
I would start about how we come up with the idea.
00:15:18.671 --> 00:15:22.649
So, because first was the idea and then it was a team.
00:15:24.743 --> 00:15:26.408
Okay, so how did you come up with the idea?
00:15:27.779 --> 00:15:38.455
Yeah, so I think it's not NDA to say that we have internal meetings with Microsoft as MVPs right, I think it's not NDA.
00:15:38.455 --> 00:15:53.956
And we discuss future things that Microsoft is working on and they gather ideas from the MVPs and we have some, you know discussions.
00:15:53.956 --> 00:16:12.629
So we had an internal meeting with Microsoft and they showed us the sales line, copilot I think it's called like this.
00:16:13.529 --> 00:16:17.017
Yes, the copilot sales line was released in 2024 wave one.
00:16:18.841 --> 00:16:19.081
Yes.
00:16:19.081 --> 00:16:39.893
So it was released this way and we discussed this, like some months before, and we they presented the way, how they did that and we had some hot discussions about that and the way, about their approach.
00:16:39.893 --> 00:16:48.389
So I proposed one idea, so we talked about that.
00:16:48.389 --> 00:17:05.614
They stayed with their approach, but we decided to prove to ourselves that the way, how we see that, is possible.
00:17:05.614 --> 00:17:11.970
So it was a challenge for ourselves.
00:17:11.970 --> 00:17:45.390
First of all, because we got this idea that, like when you ask for create sales lines and internally they for create sales lines and internally they, internally they get the intent from the user and then search for these items in their database, but they search it in a like classical way, like a keyword search, and it's not always a best way.
00:17:45.390 --> 00:17:54.730
That's the bay, this, the way that we have available, so they use that, but we, what we proposed, is like a semantic search.
00:17:54.730 --> 00:18:00.482
So why wouldn't we use embedding selectors and embedding search for that?
00:18:00.482 --> 00:18:07.693
So we didn't know if it's really possible in Business Central.
00:18:07.693 --> 00:18:08.634
We never tried.
00:18:08.634 --> 00:18:16.030
So we decided to try and use this idea for the BC Hackathon.
00:18:16.030 --> 00:18:54.127
So that was the idea I work, I I've got a chance to have a session before with a Stefano and with a Jeremy in different conferences and I know that Stefano is very good in Azure, you and Jeremy is very good in generated ideas how to optimize business processes and I got this just a platform idea.
00:18:54.660 --> 00:19:11.373
So we decided to gather together and see how we can take my platform idea of semantic search, really challenge ourselves and simulate.
00:19:11.373 --> 00:19:14.787
How should Microsoft do this in the Azure SQL?
00:19:14.787 --> 00:19:19.166
So like simulate platform support.
00:19:19.166 --> 00:19:25.612
And then we asked Jeremy, okay, we have this cool thing, where can we use that?
00:19:25.612 --> 00:19:35.431
So Jeremy generated many ideas how can we use that from the business process point of view?
00:19:35.431 --> 00:19:42.814
So Jeremy proposed to create a sales copilot that we actually built as well.
00:19:42.814 --> 00:19:44.866
So we built a semantic search.
00:19:44.866 --> 00:19:53.720
We implemented this in the platform, in the Azure SQL, and we also created a sales copilot.
00:19:53.720 --> 00:20:21.654
We also exposed it as an API and Jeremy created a Power App that allows any external user to order anything in a Business Central just using its natural language, and it was very good in creating the sales orders with the items that really exist.
00:20:22.821 --> 00:20:25.369
And I'll not lie, I was a little nervous joining these two.
00:20:25.369 --> 00:20:34.269
Your technical skill levels with Azure and AI were well beyond mine and very sophisticated, so I was a little nervous being invited to the team.
00:20:34.269 --> 00:20:38.449
So, brad and Christopher, I was probably more like you going.
00:20:38.449 --> 00:20:46.166
I don't even understand how this under the hood works Because you know, the minute I get into the first meeting they're talking about doing.
00:20:46.166 --> 00:20:48.721
You know calculus and trigonometry and I'm going.
00:20:48.721 --> 00:20:50.608
How does that apply to search?
00:20:53.162 --> 00:21:04.968
So, it was definitely a learning curve, for sure, but the you know, as Dimitri said, one of the things we were thinking about is use case scenarios Like I like what Microsoft is doing.
00:21:04.968 --> 00:21:08.869
We were thinking about is use case scenarios Like I, like what Microsoft is doing.
00:21:08.869 --> 00:21:10.656
I don't know folks who have this experience, but my wife is very AI skeptic.
00:21:10.656 --> 00:21:11.519
She is going what are you doing?
00:21:11.519 --> 00:21:13.684
Putting Copilot in your accounting systems?
00:21:13.684 --> 00:21:14.507
Are you mad?
00:21:14.507 --> 00:21:17.121
You know it's generating stuff that's crazy.
00:21:17.722 --> 00:21:25.184
But if you think about what AI is for users, it's just a new kind of interface between the computer and the person.
00:21:25.184 --> 00:21:31.734
Once upon a time you would describe moving your hand, moving a virtual thing, as magic and weird.
00:21:31.734 --> 00:21:37.507
So AI is just a new way of talking to business central.
00:21:37.507 --> 00:21:43.683
Copilot is just a new means for it to understand what your linguistic gestures mean.
00:21:43.683 --> 00:21:50.002
So, by the very complicated things that I will stay out of, the how did we do it?
00:21:50.002 --> 00:22:01.612
By going into all of those very complicated areas of building that up, it meant that it was a new interface that you could just describe naturally what you wanted.
00:22:01.612 --> 00:22:29.567
And being able to describe naturally what you want means you can do things like hook up power virtual agents to have chatbots that are accessing that interface, that language processing, which means you can expose those contacts and connections to an API and allow users, via virtual chat, to talk to a sales order or to harvest that information out of an email without having to interpolate it over.
00:22:29.667 --> 00:22:32.200
You know, have a pre-filled table it.
00:22:32.200 --> 00:22:32.902
You know?
00:22:32.902 --> 00:22:39.905
Our demonstration example covered things like if you were using clothing, you know I want something warm and green.
00:22:39.905 --> 00:22:47.103
Well, look through the database and go, okay, well, we've got a sweatshirt and it has an item variant that's green.
00:22:47.103 --> 00:22:49.664
So that's probably what you meant.
00:22:49.664 --> 00:22:52.426
And you can't do that with keyword searching.
00:22:52.426 --> 00:22:58.752
So the wizards in the room here figured out how do we make the AI understand?
00:22:58.752 --> 00:23:01.595
Well, this roughly means this.
00:23:01.595 --> 00:23:08.803
So now I can interpret that for BC, and that was a sight to behold.
00:23:08.823 --> 00:23:09.765
Wow, that's incredible.
00:23:09.765 --> 00:23:13.332
And you were right at the very beginning, when dimitri started explaining this.
00:23:13.332 --> 00:23:15.905
I was going, I was starting to scratch my head going what?
00:23:16.488 --> 00:23:24.106
so I understand the ai, but the under the hood background of it is, um, you know, I'm still learning.
00:23:24.106 --> 00:23:26.310
I guess you could say so.
00:23:26.310 --> 00:23:53.270
Your idea for the hackathon was to have and I'm simplifying it because I'd like to learn a little bit more about it was to have a sales order entry process that was accessible internally and externally using natural language, just as if somebody were to call up, as you had mentioned, a virtual agent, or call up a customer service or sales representative and place an order over the telephone or ask what they were looking for.
00:23:53.270 --> 00:23:54.700
That is impressive.
00:23:56.505 --> 00:24:16.961
I would say that initial goal for us here was to implement the new technology in a business central which is called semantic search, and the sales copilot was an example of usage of this technology.
00:24:17.480 --> 00:24:26.611
But in general, like semantic search will revolution the way how you do search in business central.
00:24:26.611 --> 00:24:38.747
Like it is really fast and you can search like uh, not with a keyword but with the uh, whole semantics in.
00:24:38.747 --> 00:25:29.996
Like we showed in another hackathon that if you have a like list of items, like table and maybe like something from the furniture you mean, and if you, if you search for the furniture in classic search you will not find anything right because you have different items meaning furniture, but with a not exact word in that, in the name or description.
00:25:29.996 --> 00:25:36.811
But semantic search allows you to search for the furniture just like that.
00:25:36.811 --> 00:25:42.769
You just search furniture and you get everything that belongs to that.
00:25:42.769 --> 00:25:51.008
You can search for like black furniture or dark furniture and you will see like black tables.
00:25:51.008 --> 00:26:06.390
And the technology is really amazing and it's crazy how it's actually easy to implement from a mathematical point of view.
00:26:06.390 --> 00:26:09.308
I was blown away how easy it is to do that.
00:26:11.442 --> 00:26:21.169
I have to chuckle because it sounds so easy just to put together a search that says dark furniture and it will go through all of my items in my item table and pull up the tables.
00:26:22.101 --> 00:26:23.346
Yeah, we can discuss this later.
00:26:24.240 --> 00:26:26.950
Yes, no, I'm interested in discussing that and hearing it.
00:26:26.950 --> 00:26:36.843
So so the hackathon was the opportunity for you to come up with an idea and then create that idea and then submit it.
00:26:36.843 --> 00:26:39.729
Uh, you selected the team.
00:26:39.729 --> 00:26:42.240
I think you have a very strong team, as you had mentioned.
00:26:42.240 --> 00:26:45.691
Stefano's great with Azure performance, among other things.
00:26:45.691 --> 00:26:58.946
Jeremy's also great with, as you mentioned, the business processes as well as other business central development performances, as well as you with, I know you with your AI, with CentralQ and from the platform point of view.
00:26:58.946 --> 00:27:06.631
So you have a strong team that each of you had a specific role to contribute for this project.
00:27:06.631 --> 00:27:08.281
Yep, how did you?
00:27:08.281 --> 00:27:13.625
With everybody being in different countries and different time zones, how did you manage the project?
00:27:13.625 --> 00:27:16.605
And then, also, you worked on it.
00:27:16.605 --> 00:27:19.853
You had only could work on it from the 20th to the 23rd.
00:27:19.853 --> 00:27:22.086
Did you work for three days straight?
00:27:22.086 --> 00:27:25.009
How did you manage working through this project?
00:27:29.403 --> 00:27:33.310
So we met actually twice.
00:27:33.310 --> 00:27:34.913
That's it.
00:27:34.913 --> 00:27:40.309
Yeah, so we met with the meetings only twice.
00:27:40.309 --> 00:27:42.045
Okay, three times.
00:27:42.045 --> 00:27:46.859
The first one to have initial conversations.
00:27:47.000 --> 00:27:48.066
On the topics.
00:27:49.180 --> 00:28:08.174
Yeah, so we agreed that we will do that together and I described this idea and described the role of everyone, and then we just had separate work and communication through the email.
00:28:08.174 --> 00:28:59.806
Yeah, we had a WhatsApp group as well, just for very quick conversations, but you know, everyone in this team was doing a separate job, doing a separate job, um, and we you know everyone was really independent in this uh, what what he was doing, doing uh, we gathered and a second time when everyone uh presented uh the result of each job, of each one, and then we managed the process, how we will join everything together in in one, in one puzzle.
00:28:59.806 --> 00:29:08.193
Yeah, and then we actually, third time, we get it to record the pitch.
00:29:11.317 --> 00:29:11.896
That's great.
00:29:11.896 --> 00:29:23.432
See that right there shows how teams can work together remotely across time zones where you don't need a lot of meetings to get things done.
00:29:23.432 --> 00:29:29.125
In my opinion, sometimes meetings can slow you down, whereas you have the meetings when they're necessary.
00:29:29.125 --> 00:29:35.669
They're effective, you know not just to talk and then you can all do your work or your your tasks.
00:29:35.669 --> 00:29:37.873
Someone can bring them together.
00:29:37.873 --> 00:29:40.511
You can all bring them together to meet, as you had mentioned, to record it.
00:29:40.511 --> 00:29:43.604
Uh, so that's a good understanding of how you work together.
00:29:43.604 --> 00:29:45.590
Where did you manage all this?
00:29:45.590 --> 00:29:55.577
Did you have you had mentioned you use the WhatsApp group for communication as far as the management of the code that you were writing or whatever you were setting up?
00:29:55.577 --> 00:29:56.760
How did you manage all of that?
00:29:56.760 --> 00:30:02.758
Did you have a GitHub repo or did you have some other means of managing the systems of?
00:30:02.778 --> 00:30:19.655
managing the systems and the yeah, we had one GitHub repo for that, but we worked in different branches, but anyway, we saw the result of everyone.
00:30:19.655 --> 00:30:47.704
Yeah, so it was not very difficult to manage that, because we in this team, everyone is a professional and as everyone understood its role, and you know what inputs, what output should be, so it was.
00:30:47.704 --> 00:31:02.672
I don't say that we ever managed this somehow, we just were collaborating very easily Because each of us were working kind of independently of each other.
00:31:03.843 --> 00:31:10.192
A lot of times, when you're working closely together in a tight timetable, you have to work very, very closely together.
00:31:10.192 --> 00:31:16.208
So in our initial meeting we instead took the approach of knowing that we needed to work separately.
00:31:16.208 --> 00:31:29.367
Everyone kind of said this is where my part of it ends and this is what I'll need to give you, or this is what I'll need from you, and that way, you know, I talk all the time about APIs.
00:31:29.367 --> 00:31:39.026
It's an obsession, apparently, but that was kind of our internal API amongst ourselves of where does the responsibility end of what do you need from me as an output?
00:31:39.026 --> 00:31:55.992
You know there are great little competitions out there where people set up like marble races and each person has like a segment of the race and then you end up with a warehouse full of this beautiful chaos and the way they do that is everyone agrees to have their part and what the agreed input and output is.
00:31:55.992 --> 00:31:57.720
So that was a key part to this.
00:31:57.740 --> 00:32:06.612
It just shows that you guys are professionals, been in this space for a long time To work like that.
00:32:06.612 --> 00:32:07.294
That's awesome.
00:32:10.381 --> 00:32:19.690
I think, jack, we have used efficiently the communication between us, so not strictly having fixed meetings or something like that, but we were quite flexible on assigning roles.
00:32:19.690 --> 00:32:29.833
And then obviously we have exchanged emails or something like that in order to have maybe much more information about each other's works.
00:32:29.833 --> 00:32:34.291
But I think it was a nice experience.
00:32:37.045 --> 00:32:40.905
It shows a lot and you are professionals, as Jeremy you were talking about.
00:32:40.905 --> 00:32:42.089
It's what I like to say.
00:32:42.089 --> 00:32:45.487
Everyone stays in their lane, so you have a role and a responsibility.
00:32:45.487 --> 00:32:48.278
You know what, like you said, your input and your output is.
00:32:48.278 --> 00:32:51.268
You're not really concerned with what goes on in that black box, as they say.
00:32:51.268 --> 00:32:55.486
It's just I know I need to have this, give this over to someone else.
00:32:55.486 --> 00:33:04.365
They will process, do whatever they need to do and then, with the output, pass it along to where it needs to go.
00:33:04.365 --> 00:33:09.670
So, stefano, you had worked with the Azure side of this, correct?
00:33:09.670 --> 00:33:11.352
Is that what I heard?
00:33:11.412 --> 00:33:27.773
Yes, mainly because, as Dimitri said before, our idea in the hackathon was not to do something that is in the product, but we do something that is not present in the product.
00:33:27.773 --> 00:33:38.127
The product now has a lot of features like the sales order in sales line search or the search inside the business central data.
00:33:38.127 --> 00:33:43.147
That is based on full text search, and full text search has lots of limitations.
00:33:43.147 --> 00:33:55.749
So, like Dimitri said, one of the limitations is that you need to search for keywords that are in the data, not for semantic meaning of the search, and the other is performances.
00:33:55.749 --> 00:34:02.372
Full-text search scans the entire database, so performances, if you implement full-text, is not so powerful.
00:34:02.372 --> 00:34:17.389
So this was one of the limitations that we signaled to Microsoft also, when they start with the idea to implement, for example, the sales order creation, sales order creation is actually limited by this.
00:34:18.219 --> 00:34:21.731
So we want to show Microsoft in this hackathon two things.
00:34:21.731 --> 00:34:39.471
First things, as explained by Dimitri, we want to show you that if you implement semantic search, you have better results because you can search for the meaning of the words, not only for the keyword.
00:34:39.471 --> 00:34:41.605
And this was the first goal.
00:34:41.605 --> 00:35:02.695
The second goal that we want to show and this was my responsibility in this project was to Also to show Microsoft that if you do something, not only in the IL level, but also if you do something under the hood, so in the platform, in the database, performances of the semantic search will fly.
00:35:05.422 --> 00:35:16.802
So my task on this project was maybe working on that, maybe working on that.
00:35:16.802 --> 00:35:40.268
So, starting from a solution that dimitri implemented in fully ian code in business central, moving this part, at least part of this into the platform, so into the azure sql database, uh, in order to implement a vector search similarities inside the business center, the, the azure sql database, and uh, we can talk if you want more details about that, but uh, just just just.
00:35:40.268 --> 00:35:58.831
The result of that was that we was able to show that the full semantic search implemented in the platform level was extremely fast, faster than what is implemented in the AI language.
00:36:00.742 --> 00:36:02.047
Brett, can I show the slide?
00:36:04.219 --> 00:36:08.105
Yes, yes, you may show the slide and I do have a question.
00:36:08.105 --> 00:36:13.824
As you're sharing it, this should be a share button at the bottom of your screen sharing it.
00:36:13.824 --> 00:36:15.532
There should be a share button at the bottom of your screen.
00:36:15.532 --> 00:36:33.684
What fascinates me with AI, as you're showing your slide, is you're mentioning the semantics search, that we have a table and the table is furniture, but nowhere in the database do we say that a table is furniture within our data.
00:36:33.684 --> 00:36:41.313
How does the search, or the AI, know that a table is furniture?
00:36:43.664 --> 00:36:43.804
Right.
00:36:43.804 --> 00:36:45.510
So you see two implementations.
00:36:45.510 --> 00:36:52.413
The first one, on the left, is implementation of semantic search in a pure AL language.
00:36:52.413 --> 00:36:56.161
So just in a pure AL language, so just in just a normal cloud extension.
00:36:56.161 --> 00:37:23.061
And on the right, that what Stefano built in the Azure SQL it's like 20 times faster and you see that it takes, in a sequel implementation, half of the second to search through six thousand five hundred entries.
00:37:23.061 --> 00:37:30.105
Yeah, so now, actually, how, how do you search?
00:37:30.105 --> 00:37:41.869
I think I do have 0.31 comma, 1.2 and so on.
00:37:41.869 --> 00:38:14.914
Right, so this is the numbers actually represent uh, one item, so one item in Business Central.
00:38:14.914 --> 00:38:24.367
One record converts to these numbers and these numbers are called embeddings.
00:38:24.367 --> 00:38:33.532
We get these numbers from the Azure OpenAI model and then we save these numbers in a database.
00:38:33.532 --> 00:38:37.128
So that was a different way of saving this.
00:38:37.128 --> 00:38:47.896
So I saved it as an AL table and Stefano saved it as a SQL column index store.
00:38:49.163 --> 00:38:52.286
Column store index yes, Column store index right.
00:39:08.980 --> 00:39:09.641
Column store index yes.
00:39:09.641 --> 00:39:10.222
Column store index right.
00:39:10.222 --> 00:39:11.505
And now to find similar items.
00:39:11.505 --> 00:39:28.215
Actually, you need to find similar numbers, number one number to another number, and to compare one item with another item, you need to do 1535 calculations multiplied to this number.
00:39:28.215 --> 00:39:29.217
I'm following.
00:39:29.217 --> 00:39:29.998
I promise, jeremy, I'm with you.
00:39:30.177 --> 00:39:32.469
I'm with you, Jeremy when does math come from?
00:39:32.489 --> 00:39:36.367
I'm following, I promise the Mathematical, jeremy.
00:39:36.367 --> 00:39:36.748
I'm with you.
00:39:36.748 --> 00:39:38.161
I'm with you, jeremy, where?
00:39:38.181 --> 00:39:39.362
does math come into this?
00:39:39.963 --> 00:39:41.385
Yes, so Very simply speaking.
00:39:41.385 --> 00:39:42.367
Sorry, Very simply speaking about.
00:39:42.367 --> 00:39:44.869
So I want only to Continue.
00:39:44.889 --> 00:39:45.931
Yeah, no, I close the I close the.
00:39:46.032 --> 00:39:48.454
I close the.
00:39:48.516 --> 00:39:48.876
I close the.
00:39:48.876 --> 00:39:49.336
I close the.
00:39:49.336 --> 00:39:50.277
I close the.
00:39:52.722 --> 00:39:53.224
I close the.
00:39:53.224 --> 00:39:55.811
I close, I want only to continue.
00:39:55.851 --> 00:40:00.911
Yeah, I close my Go, Dimitri go.
00:40:02.760 --> 00:40:14.150
Okay, so actually to compare search text with all items that you have, you need to do 15 billion calculations.
00:40:16.804 --> 00:40:17.409
You see this.
00:40:17.409 --> 00:40:17.934
That's a lot.
00:40:18.641 --> 00:40:19.365
Yeah, that's a lot.
00:40:19.365 --> 00:40:26.143
And in AL it takes 10 seconds and in SQL it takes half of the second.
00:40:26.143 --> 00:40:30.550
Yeah, I'm done, Wow.
00:40:33.295 --> 00:40:33.775
Can I play?
00:40:35.204 --> 00:40:38.387
I want to just quickly explain what is that.
00:40:38.387 --> 00:40:49.445
When you convert a number, without going too much in depth into the mathematical things, but when you convert in AI, when you convert, you have a vector.
00:40:49.445 --> 00:40:52.322
A vector is a numerical representation of an entity.
00:40:52.322 --> 00:40:53.489
You convert an entity to a vector.
00:40:53.489 --> 00:40:55.360
A vector is a numerical representation of an entity.
00:40:55.360 --> 00:40:57.606
You convert an entity to a vector.
00:40:57.606 --> 00:41:08.652
That is a set of numbers, and when you want to compare two numbers, it's like a vector is like a representation of an information in the space.
00:41:08.652 --> 00:41:16.293
So imagine to have two axes and the vector is aligned between these axes.
00:41:16.293 --> 00:41:27.255
If you have two vectors, two vectors are more similar when the distance between the two vectors is smallest.
00:41:27.255 --> 00:41:32.311
So if I have two axes like this, they are different than two axes like this.
00:41:32.311 --> 00:41:34.083
Two axes like this are different than two axes like this.
00:41:34.985 --> 00:41:53.132
We implemented this calculation that is called cosine similarity, and cosine similarity is a quite standard algorithm in the AI world to calculate the semantic similarity between, for example, two entities.
00:41:53.132 --> 00:41:58.271
So this is the big part of the calculation.
00:41:58.271 --> 00:42:33.967
So first create the vectors and store the vector into a database and then, when you type, I want to create an order with a free desk, order with the free desk, the AI calculation, need to translate your sentence into vectors a vector representation and then go into the entire list of vectors that you have stored into the database, comparing the similarities or the cosine similarity and extracting what you mean by writing this sentence.
00:42:33.967 --> 00:42:36.989
This was the big part of the calculation.
00:42:36.989 --> 00:42:40.907
I know that is not easy.
00:42:42.382 --> 00:42:43.728
No, it's definitely not easy.
00:42:43.728 --> 00:42:44.744
I'm still stuck with.
00:42:44.744 --> 00:42:56.610
So every word is converted into a vector and then you're looking for the similarities of that word on that vector to determine what somebody means.
00:42:57.840 --> 00:42:58.382
Yes, a cosine.
00:42:58.382 --> 00:43:01.391
Similarity is a value bound between 0 and 1.
00:43:01.391 --> 00:43:06.369
0 means that two vectors are orthogonal, so not similar.
00:43:06.369 --> 00:43:12.800
1 is two vectors are extremely similar.
00:43:12.800 --> 00:43:21.630
So you calculate this similarity between vectors and the number of the similarity gives you the result.
00:43:21.630 --> 00:43:37.048
So when you type a search keyword, for example, by calculating the similarity between vectors gives you the top result that matches with your keywords Semantic match, not full-text match.
00:43:39.461 --> 00:43:46.530
If I may try to distill this, down to because it blew my mind when I started looking at what they were explaining.
00:43:46.530 --> 00:43:53.527
I had never heard of vectors at all in the context of language processing, so I was completely confused.
00:43:53.527 --> 00:43:55.347
So I'm not going to share my screen.
00:43:55.347 --> 00:44:01.731
I'm going to share a doodle which is dodgy on whether or not, it'll work.
00:44:02.393 --> 00:44:03.034
I see the doodle.
00:44:03.034 --> 00:44:04.865
You have a graph.
00:44:04.865 --> 00:44:05.909
It looks like Okay.
00:44:07.503 --> 00:44:11.869
We might do two axes of squishy to crunchy and sweet to sour.
00:44:11.869 --> 00:44:20.411
And you know, the language model knows that peanut butter is sweet and squishy and you know sour is pickles and that's also crunchy.
00:44:20.411 --> 00:44:24.791
So when you go to the language model, I'd like something like a banana.
00:44:24.791 --> 00:44:25.795
What do you have?
00:44:25.795 --> 00:44:33.213
The language model also has in its reference database that a banana is a squishy sweet tree.
00:44:33.213 --> 00:44:38.737
So when it looks at the graph to go from point of origin, how do I go out from there?
00:44:38.737 --> 00:44:47.112
What is the closest angle and what do I have in my info database that matches that angle of squishy and sweet?
00:44:47.112 --> 00:44:48.663
I've got peanut butter.
00:44:48.663 --> 00:44:50.047
That's a pretty close match.
00:44:50.047 --> 00:44:51.431
So it's 0.87.
00:44:51.431 --> 00:44:53.166
And it does that.
00:44:53.166 --> 00:45:01.340
But it does that on so many different measures beyond our ability to even remotely visualize in our head those different dimensions.
00:45:02.463 --> 00:45:05.027
You put that in words that I understand.
00:45:06.469 --> 00:45:11.869
And hopefully Stefano Dimitri, hopefully I'd just summarize that real simple but right.
00:45:13.456 --> 00:45:14.039
Yeah, exactly.
00:45:14.039 --> 00:45:46.452
So if it's like a two-dimensional thing, like, let's say, you have one dimension which is a fruit, the fruit is a dimension, right, and like, around this dimension, you can have like bananas, you can have oranges, uh, you can have, uh, pineapples, uh, but definitely, um, oh, apple is not a fruit, so it's uh it.
00:45:46.452 --> 00:45:55.302
Apple is a fruit, the seeds, yeah, okay.
00:45:55.302 --> 00:46:09.230
So let's say something sneakers, sneakers yes, definitely not a fruit not a fruit.
00:46:09.693 --> 00:46:12.447
So actually, you can think about how.
00:46:12.447 --> 00:46:32.570
So how similar sneakers to a banana, how similar banana is to a pineapple in terms of fruit and how similar sneakers to banana in terms of fruit.
00:46:32.570 --> 00:46:34.626
So fruit is one dimension.
00:46:34.626 --> 00:46:47.641
We can actually do these calculations in mathematical way and we find this, which Stefano mentioned, causing similarity.
00:46:47.641 --> 00:46:48.922
But this is like a distance.
00:46:48.922 --> 00:47:03.083
Distance, you know, it's a number, how, how close banana to an to an orange or how close banana to a sneakers.
00:47:03.083 --> 00:47:10.590
So we can do this and this is just one dimension.
00:47:10.590 --> 00:47:20.088
This vector is 1536 dimensions, so it's what AI gives us.
00:47:20.088 --> 00:47:40.313
So AI gives us these numbers in terms of like, we don't know actually, and nobody knows, but it just gives us these dimensions and we just do the very simple math on top of that.
00:47:42.284 --> 00:47:43.268
Very simple math.
00:47:43.268 --> 00:47:57.327
But to go back and to bring it back to what you had created and I have some questions, jeremy, I may need to go back to the doodle In Business Central.
00:47:57.327 --> 00:48:10.248
You created an AI extension or application that has a semantic search to allow you to create sales orders based upon the products and customers, I'm assuming within your database.
00:48:10.248 --> 00:48:26.463
Now, jeremy, on your doodle you had peanut butter, pickles and carrots, and peanut butters were soft and squishy and sweet Carrots were crunchy and sweet Pickles were sour and crunchy.
00:48:26.463 --> 00:48:37.255
If I enter an item into Business Central, that's a table I just enter, you know, athens desk, right?
00:48:37.255 --> 00:48:44.764
You go back to some of these you know and then some of the other standard data that you have Nowhere in the database.
00:48:44.764 --> 00:48:49.634
Do I put that a banana is squishy and sweet?
00:48:49.634 --> 00:48:51.543
Where does that part come from?
00:48:51.543 --> 00:48:52.327
That's where I'm.
00:48:52.327 --> 00:49:10.596
I understand now the comparison and the vector of the numbers, but how do we get the numbers for all of these items if no one in the database tells us that they are one of those 1,530 odd vectors?
00:49:12.601 --> 00:49:15.170
I had been very much confused by that myself.
00:49:15.170 --> 00:49:16.786
So it's a fair question.
00:49:16.786 --> 00:49:30.563
And that's where the OpenAI usage is coming into play, the Azure AI elements, because that language model is that giant book Think of it old style, it's a giant yellow pages.
00:49:30.563 --> 00:49:33.811
Where you go, I need to know what's the number for table.
00:49:33.811 --> 00:49:35.521
Give me that vector.
00:49:35.943 --> 00:50:02.742
So when you're creating the Athens table and you're creating all those attributes that go along with it because item attributes are great, we love them when you create that table with all those attributes those are the things that the solution Stefano and Dimitri built in it packages all of that BC information about that table and the variants and the attributes up and says, hey, already established language learning model, my yellow pages.
00:50:03.425 --> 00:50:06.431
I need the vector for this set of information.
00:50:06.431 --> 00:50:08.862
And it goes here's your giant string of what was it?
00:50:08.862 --> 00:50:10.867
1,500 data points.
00:50:10.867 --> 00:50:12.349
It gives us that.
00:50:12.349 --> 00:50:26.451
And then what was being done by Stefano's solution, for example, is in the BC side it would store that vector string and now we just have it because we've looked it up once and in an ideal way.
00:50:26.451 --> 00:50:37.972
What we were demonstrating is that if it could be stored in SQL natively, it would be even faster, because now we've got that field set of values that we asked for it once and we stored it.
00:50:37.972 --> 00:50:46.826
But where those numbers all come from is that when we enter that item info it goes out to the language model and says what's the number.
00:50:48.490 --> 00:50:49.032
Okay.
00:50:49.320 --> 00:51:00.952
So now when you enter in yeah, so technically, I think you're all familiar with the chat API from the Azure OpenAI.
00:51:00.952 --> 00:51:03.719
So chat API is very simple.
00:51:03.719 --> 00:51:14.849
You have an input as a text, you send it to the chat API, you receive back AI-generated, ai generated text.
00:51:14.849 --> 00:51:15.811
Right, so text to text.
00:51:15.811 --> 00:51:23.338
There is another model in the Azure open AI which is called embeddings model.
00:51:23.338 --> 00:51:33.530
So you send as input text the text you are interested in and the model returns you an array of numbers.
00:51:33.530 --> 00:51:36.875
So this is the array of numbers.
00:51:36.875 --> 00:51:42.606
So like 1536 numbers every time.
00:51:42.606 --> 00:51:45.891
So it's the array of a fixed length.
00:51:45.891 --> 00:51:55.405
It you always receive back this fixed back, this fixed quantity of numbers.
00:51:55.405 --> 00:52:02.068
Yeah, and then you need to store this and do then a math on top of that.
00:52:05.960 --> 00:52:35.309
So when you had stored the vector numbers from the central yellow pages, the Azure OpenAI database, in the SQL database for the item, did you build it just on the description, because the items will have an item number, they may have item attributes, they may have item categories, they have all of the fields that we have, right?
00:52:35.309 --> 00:52:37.487
You have the posting group.
00:52:37.487 --> 00:52:48.016
I mean we are all familiar with many of the fields that are on the item, as well as some of the ancillary information, such as bill of materials.
00:52:48.016 --> 00:53:02.268
How do you build the information for an item when you have all of those data points I used I'm trying to sound like I know what I'm talking about here the data points within the database.
00:53:06.561 --> 00:53:22.831
It's a really great question Because it's the first question that you need to ask yourself before you start implementing semantic search what data I want to search in.
00:53:22.831 --> 00:53:46.510
So in our case we made it very similar to the standard search that we have in Business Central now, where you can bookmark a table and a field which you want to include in this index.
00:53:46.510 --> 00:54:10.664
But together we did another experiment, we so we included in the index not only item with a sum of the fields like description, units of measure, remember other fields but also we include what you want.
00:54:11.666 --> 00:54:16.572
Yeah, so categories, attributes, uh, replacements.
00:54:16.572 --> 00:54:20.922
Um, I think jeremy actually.
00:54:20.922 --> 00:54:25.646
Uh, it was jeremy's task to provide us the input.
00:54:25.646 --> 00:54:30.072
What information should the index?
00:54:30.072 --> 00:54:34.016
So his app will benefit from that.
00:54:38.201 --> 00:54:38.360
Yep.
00:54:38.360 --> 00:54:50.005
So, for example, our demonstration search we use like clothing, because there's lots of apparel companies and you have lots of different sizes and variants and you might need to know if it's ecological cotton or those sort of things.
00:54:50.005 --> 00:54:58.788
So, like, all of that is information that you would want to add to the informational context of how you search, you know.
00:54:58.788 --> 00:55:03.195
So I need 12 large eco green sweaters.
00:55:03.195 --> 00:55:09.072
Well, we know that eco roughly means ecological and one of our attributes was named that.
00:55:09.072 --> 00:55:11.204
We know that large is a variant.
00:55:11.204 --> 00:55:13.108
We had some of that in the description.
00:55:13.108 --> 00:55:14.621
We know that.
00:55:14.621 --> 00:55:16.686
You know there was a green item.
00:55:16.686 --> 00:55:19.661
It wasn't called a sweater, it was like a varsity jersey or whatever.
00:55:19.661 --> 00:55:23.030
So there are things that made it very similar.
00:55:23.030 --> 00:55:42.231
But because it's using as its basis comparison point, all of that composed information of not only the description but all of the underlying attributes, much in a similar way to, like the marketing text kind of pulls from all of the underlying information to build something more rich.
00:55:44.735 --> 00:55:47.405
Okay, it's all coming to me now.
00:55:47.405 --> 00:55:50.269
I think you're bringing it down to where I can understand the pieces.
00:55:50.269 --> 00:55:54.086
So, to do this, did you use the?
00:55:54.086 --> 00:56:06.355
You used Azure, you used the platform and you used Business Central, and then you had used Power Platform to also consume an API that was in Business Central to be able to create an order.
00:56:06.355 --> 00:56:10.751
Yeah, when you were writing this, did you use the AI?
00:56:10.751 --> 00:56:15.291
Recently, they added what I call the AI library within Business Central.
00:56:15.291 --> 00:56:17.467
They have the AI code, units and functions.
00:56:17.467 --> 00:56:20.286
Did you use that or did you create your own library?
00:56:22.672 --> 00:56:38.746
No, so in AEL implementation we used Azure OpenAI libraries that are a part of the system app, so to get the embeddings.
00:56:38.746 --> 00:56:43.590
And yeah, so to get the embeddings.
00:56:43.590 --> 00:56:56.411
There is also opportunity in this kind of AI model to do that, but Stefano's implementation was different, so it was in the sql level.
00:56:56.411 --> 00:57:00.266
Yeah, so we used their um in the sql.
00:57:00.266 --> 00:57:15.454
Actually, we do have also um opportunity to call uh azure open ai apis from the sql directly, so we uh use this stored procedures approach to do that.
00:57:23.262 --> 00:57:24.586
The idea was exactly like this.
00:57:24.586 --> 00:57:30.231
We have two different version of the same functionalities.
00:57:30.231 --> 00:57:34.467
One is totally built in AI language, so it's in AI language.
00:57:34.467 --> 00:57:45.871
We call Azure OpenAI the text embedding model for retrieving the embedding, storing the embedding into a table and then, always in AI language, performing the similarity search.
00:57:45.871 --> 00:57:51.659
In the second version we do that at the SQL level.
00:57:52.802 --> 00:57:55.911
So in SQL we have done essentially two main parts.
00:57:55.911 --> 00:58:07.452
The first is creating a table, storing the embeddings and on this table creating what is called a cluster column store index.
00:58:07.452 --> 00:58:21.315
A cluster column store index is one of the key points of this implementation because it's a feature that you cannot do from the central but you need to do that in the platform.
00:58:21.315 --> 00:58:37.030
But creating this type of index on the embedding tables, the cluster column store, is useful for storing large fact tables with large dimensions and it's fast on querying data, retrieving data and so on.
00:58:37.030 --> 00:58:49.414
So by creating this type of index on the embedding tables we turn up a lot the performances on vector search, similarity.
00:58:49.414 --> 00:58:57.079
And the second part that we also implemented in SQL was the calculation of the vector similarity.
00:58:57.079 --> 00:59:17.746
So when someone types what they want to search, the SQL implementation calls a function created at the SQL level that calls Azure OpenAI gives the embeddings of the source that you type and do the similarity search on SQL.
00:59:22.320 --> 00:59:26.740
Yes, and there were, and this is the part where we connected AL to the SQL.
00:59:26.740 --> 00:59:37.675
So that was Stefano's API to create this stored procedure that we then can call in AL.
00:59:37.675 --> 00:59:55.594
And just from AL we got this user interface to type the search and then it goes under the hood and calls Stefano magic and return back the result.
00:59:57.181 --> 00:59:59.027
This definitely is all magic to me.
01:00:00.282 --> 01:00:01.166
Why we have done that?
01:00:01.320 --> 01:00:30.262
Because we would like to demonstrate to Microsoft team that if something is done at the platform, so if in the future we have something in the platform level for doing this type of search similarity in a language in in a future I don't know you, just you can just call a method of an object, I don't know what will logic will be and the similarity search will be very quickly created.
01:00:31.344 --> 01:00:49.251
So something similar that also the SQL team has done, announced yesterday at the Microsoft Build, they show some new function that will be available quite soon at the SQL level to perform similarity search.
01:00:49.400 --> 01:01:03.092
So in a single instruction you can perform a similarity search passing a vector, so avoiding all the extra stuff that we have actually forced to be done.
01:01:03.092 --> 01:01:17.929
So if in the future something, microsoft will use the same features that the SQL team has done for providing 2IL language, something like that, to perform this type of search.
01:01:17.929 --> 01:01:53.472
First of all, they can implement semantic search natively in the platform and this will be a huge benefit across the entire ERP, I think, because if they will be able to index the entire database and they can we can have a full text not a full text a semantic search ability across the ALP and then if having something done at the platform not always at the top level, like the AL language, but in the platform we can have performances, we can have more easy things to do in IL, something like that.
01:01:53.472 --> 01:01:56.730
So this was the goal that we want to demonstrate.
01:01:57.942 --> 01:01:59.547
So now I'm really satisfied.
01:02:00.099 --> 01:02:02.188
Yeah, so now I'm really satisfied.
01:02:02.188 --> 01:02:18.291
So it means that our idea proved not only on the Denmark team of Business Central but on the corporation team of Microsoft SQL right.
01:02:20.018 --> 01:02:20.519
No, that's good.
01:02:20.519 --> 01:02:27.623
It shows that your thoughts were on the right track, definitely With the hackathon.
01:02:27.623 --> 01:02:29.871
How many contributions were there?
01:02:29.871 --> 01:02:31.346
Do you know how many contributions there were?
01:02:31.346 --> 01:02:32.626
How many teams were there?
01:02:32.626 --> 01:02:33.773
Do you know how many contributions?
01:02:33.793 --> 01:02:33.996
there were.
01:02:33.996 --> 01:02:34.579
How many teams were there?
01:02:34.579 --> 01:02:36.164
I forgot the number.
01:02:36.164 --> 01:02:37.911
Honestly, I thought I saw a number.
01:02:39.161 --> 01:02:40.646
I think about 100 of teams.
01:02:42.110 --> 01:02:54.755
Yes, and then with the number of teams, do you know which of the submissions were chosen out of those 100.
01:02:54.755 --> 01:02:57.869
I know they rated those somehow in the hackathon.
01:02:57.869 --> 01:03:00.507
Did they release a list of what?
01:03:00.527 --> 01:03:01.369
they would call the top.
01:03:01.369 --> 01:03:04.405
I never saw that.
01:03:04.405 --> 01:03:07.347
So what I saw?
01:03:07.347 --> 01:03:49.449
Only the winner, and also so during the hackathon actually there were, like I don't remember exact number, but more or less about 100 of teams, but also they do have two days of pitch so that teams can present their solutions and as this pitch took only, I think, one hour or one hour and a half each, only like 15 or 20 teams per session could show their solutions.
01:03:49.449 --> 01:03:55.849
So I I saw about 30 or 35 solutions during these two sessions.
01:03:57.362 --> 01:03:59.068
How long did it take you to create this?
01:03:59.068 --> 01:04:03.710
So the hackathon was from the 20th to the 23rd of February 2024.
01:04:03.710 --> 01:04:07.626
How long did it take your team to put together your submission?
01:04:09.811 --> 01:04:15.190
So well, actually it took us this time we did have.
01:04:15.190 --> 01:04:24.893
We did have some proof of concept, small proof of concept, just to end research.
01:04:24.893 --> 01:04:29.445
So I like some research and some small proof of concepts.
01:04:29.445 --> 01:04:41.166
We've done before but the main job, we tried to be very aligned with these rules of Hackathon.
01:04:41.166 --> 01:04:46.407
So we you know our team worked for three days.
01:04:48.443 --> 01:04:48.905
Did you sleep?
01:04:52.902 --> 01:04:53.585
Yes, we were.
01:04:53.585 --> 01:04:57.570
I actually was on vacation at this time.
01:05:01.760 --> 01:05:05.728
Well, you're on vacation, but did you just work on this, or did you sleep?
01:05:05.728 --> 01:05:08.273
Or did the AI build it for you?
01:05:10.902 --> 01:05:16.659
I hope so, but it was really fun just to prove ourselves if it works.
01:05:16.659 --> 01:05:22.909
So it really gave us energy to do so.
01:05:23.389 --> 01:05:24.893
Oh, I can imagine we were sleeping.
01:05:24.893 --> 01:05:28.126
Oh good, I can imagine now the excitement of doing that.
01:05:28.126 --> 01:05:34.829
You had mentioned that the contributors to the hackathon were able to provide a pitch for their submission.
01:05:34.829 --> 01:05:37.769
Did you generate a pitch for your submission?
01:05:40.621 --> 01:06:20.472
Yes, and that actually was also a fun thing, because on our third meeting with Jeremy and Stefano we discussed how we should record the pitch and obviously we couldn't record it at the same time, so we decided that everyone will record his own area, and then the guys just sent me the recordings and I just put it in one video file.
01:06:23.623 --> 01:06:25.188
This was a very efficient team.
01:06:25.188 --> 01:06:33.867
I like it and that's the type of processes I like, where you can take pieces of information, everybody can do it on their schedule and then you can piece it together.
01:06:33.867 --> 01:06:39.733
It looks like one recording that was done all together.
01:06:39.733 --> 01:06:46.610
Is that available for anyone to watch, or is that something if I wanted to watch your pitch?
01:06:46.610 --> 01:06:47.826
That is accessible?
01:06:47.826 --> 01:06:50.679
Do you have it available online anywhere?
01:06:52.106 --> 01:06:58.746
I have a plan to publish this after we have this conversation available.
01:07:00.228 --> 01:07:02.733
Oh, excellent, see, I always like those.
01:07:02.733 --> 01:07:11.820
And another thing, as we're talking about this, you have all talked about a lot of great information when it comes to AI.
01:07:11.820 --> 01:07:26.695
I could spend all afternoon talking with you all about this, because it's everywhere and you can't go, I think, five minutes without hearing the word co-pilot or AI in some fashion, whether audible, reading or even thinking.
01:07:26.695 --> 01:07:47.659
Where would you recommend someone go to learn more about AI and how to use AI, and even maybe more specifically, ai within AL or in the case where Power Platform?
01:07:47.659 --> 01:07:50.365
Do any of you have any?
01:07:50.646 --> 01:07:56.768
resources that you think that someone could start out with so many resources there.
01:07:56.768 --> 01:08:18.265
I mean, I think you know, I can tell you from my experience, because when I started this research, there were no documentation at all, so the only the only source of truth for this one was the tweet.
01:08:18.265 --> 01:08:30.007
So, yeah, but I would say that you need to understand what you, what do you want to build.
01:08:30.007 --> 01:08:42.123
So if you have some idea about what do you want to build, that's a great starting point, because if you have this, you can start building this.
01:08:42.123 --> 01:09:26.430
And while you're building this, you can, you know, ask questions to the charge of D or Google that, or watch YouTube videos, but you will get the knowledge about your idea, how to make your idea possible, and during this way, I promise you, you will get so much insight about AI, get so much insight about AI, and I think that working on something is a really cool way of learning AI, and we have a session in the BC Tech Days as well.
01:09:27.412 --> 01:09:27.653
Nice.
01:09:29.461 --> 01:09:33.692
When is the session for BC Tech Days that you're going to have?
01:09:35.140 --> 01:10:00.323
So I will do have two workshops before Tech Days about building your own co-pilot for Business Central using the AI toolkit, and then we will have a 90-minute session with the Haurina from Microsoft, also about doing this co-pilot in Business Central using the toolkit.
01:10:00.323 --> 01:10:02.444
I don't know exactly.
01:10:02.444 --> 01:10:09.286
I think that schedule is not prepared yet, but the session is planned there.
01:10:10.560 --> 01:10:12.257
That would be an interesting session and I'm sure certain that many would like to attend it.
01:10:12.257 --> 01:10:12.605
The session is planned there.
01:10:12.605 --> 01:10:16.212
That would be an interesting session and I'm sure certain that many would like to attend it.
01:10:18.181 --> 01:10:28.871
If you're not able to attend BC Tech Days is one of the conferences that is nice enough to typically provide a lot of their content and sessions on YouTube after the event.
01:10:28.871 --> 01:10:44.445
So if, for any reason holidays, whatever, have you, for some reason you can't go to one of the best dev conferences for technical people around in the summertime there, then you know they're nice enough to share it, so you should be able to catch it afterwards.
01:10:44.806 --> 01:10:45.389
That's good to know.
01:10:45.859 --> 01:10:47.104
That's some great information.
01:10:47.104 --> 01:10:48.128
I will have to watch that.
01:10:48.128 --> 01:10:51.788
I thought I was going to call up Dimitri one day and he was just going to do it for me.
01:10:55.760 --> 01:10:57.966
Have a one-on-one training session on how to use AI.
01:10:57.966 --> 01:11:08.671
If I can add something about that AI, I think it's a very large world to explore.
01:11:08.671 --> 01:11:12.002
So there are lots of documentation at the moment because it's quite an odd topic.
01:11:12.002 --> 01:11:15.226
There are lots of documentation at the moment because it's quite an odd topic.
01:11:15.226 --> 01:11:38.680
I think that, strictly speaking about Business Central that's honestly my personal opinion AI in Business Central is currently limited by some aspects, especially because in business center we have something like an IL wrapper on top of standard Azure OpenAI APIs.
01:11:38.680 --> 01:11:54.091
Ai is not only that, and I personally experienced in different AI projects that we have done in my organizations that spans outside of the business center.
01:11:54.091 --> 01:12:07.233
Strictly only using Azure OpenAI API and stuff like that sometimes is not enough when you have a large AI project outside the business center box.
01:12:07.233 --> 01:12:09.347
There are lots of more functionalities.
01:12:09.347 --> 01:12:10.645
There are lots of more tools.
01:12:10.645 --> 01:12:13.942
Ai platform is also a platform is also scalability.
01:12:13.942 --> 01:12:33.587
So what I personally would like to have in the future in the platform is not only having IELTS wrappers on top of standard APIs, but having real-world AI objects to use from a language, For example.
01:12:33.787 --> 01:12:56.412
I'm currently doing some large AI projects, not business-centre-related, and we often use a Microsoft tool called Semantic Kernel Semantic Kernel, in my opinion, is one of the best AI tools currently in the Microsoft ecosystem at the moment because it abstracts the AI layers.
01:12:56.680 --> 01:13:02.832
It abstracts, for example, the vector database and something like that.
01:13:02.832 --> 01:13:05.127
It permits you to have plugins.
01:13:05.127 --> 01:13:09.065
This is the topic.
01:13:09.065 --> 01:13:20.994
This is something like what I would like to have in a YEL language, so not only a wrapper on top of standard OZero API APIs, but having the possibility to call an object.
01:13:20.994 --> 01:13:24.199
Like in C sharp, you do kernel dot something.
01:13:24.199 --> 01:13:27.199
I would like to have something like that in a YEL language.
01:13:27.199 --> 01:13:40.833
So the platform needs to embed and gives us some objects that we can use, and these objects are not built into the platform, not only calling Azure OpenAI APIs.
01:13:40.833 --> 01:13:58.588
One of the limitations of the current AI implementation is that we have code units on top of Azure OpenAI APIs and if you have a large AI project, for sure you will have token limits, rate limits problem, something like that.
01:13:58.588 --> 01:14:15.858
So there are more to know and to use my personal opinion in a complex AI project than that, but we do have now function callings also.
01:14:16.822 --> 01:14:17.765
We have function calling.
01:14:17.765 --> 01:14:26.011
Yes, exactly, we will show some of these features next week in Dynamics Minds.
01:14:26.011 --> 01:14:29.247
Jeremy, I think, will be there too.
01:14:30.440 --> 01:14:30.823
Yep absolutely.
01:14:30.842 --> 01:14:30.962
Jeremy.
01:14:30.962 --> 01:14:31.646
I think, will be there too.
01:14:31.646 --> 01:14:47.024
Yeah, we plan to have an AI path on this conference where we will talk about standard co-pilot features and then we will also have some discussion about what you can do more with the other tools.
01:14:48.306 --> 01:15:10.987
Sorry, I actually added a nice and I sorry, I actually added a nice contribution to the function calling and Microsoft already merged it to the main branch, so it will be available in one month in the platform which actually puts the function calling into the next level.
01:15:10.987 --> 01:15:13.378
Wow, wow, just to share a resource with the in the platform which actually puts the function calling into the next level.
01:15:13.399 --> 01:15:14.604
Wow, wow.
01:15:14.604 --> 01:15:18.009
Just to share a resource with the folks that are out here.
01:15:18.009 --> 01:15:21.750
One of the other things to help the getting started.
01:15:21.750 --> 01:15:33.970
When it comes to Business Central, my first URL of choice is always centralqai, but my second choice is this page right here, which is akams slash bcall.
01:15:33.970 --> 01:15:36.608
I hope people are aware of that one.
01:15:36.608 --> 01:15:43.545
It is a master reference to a lot of the jumping off points and that includes in this article list.
01:15:43.545 --> 01:16:01.916
We have the AI innovation and co-pilot section, and what that will take you to is all of the co-pilot resources that Microsoft has right now for working with AI not only the co-pilot aspect, but also a guide to some of the development steps.
01:16:01.916 --> 01:16:09.011
So akams slash bcall will get you to this list and then you can jump off to other places.
01:16:10.092 --> 01:16:11.074
It's a good reference, thank you.
01:16:11.140 --> 01:16:30.659
That's a great resource, a great reference to have, and with that, I'm looking forward to seeing if I could catch a recording of the BC Tech Days, as well as other future contributions to AI that you all have, as well as the pitch video that will be released after this podcast is released.
01:16:30.659 --> 01:16:35.970
So, chris, will have to speed this one up because I'm anxiously awaiting the release of that.
01:16:35.970 --> 01:16:45.350
But with that, I'd like to thank all of you for your time today I know your time is valuable and for sharing the information about this hackathon.
01:16:45.350 --> 01:16:49.368
Jeremy, thank you for bringing it down to the doodle that I can understand.
01:16:49.368 --> 01:16:50.545
I now understand more.
01:16:50.819 --> 01:16:51.563
And that's what.
01:16:51.582 --> 01:16:55.706
Dimitri and Stefano had said and I understand the vector now.
01:16:55.880 --> 01:16:58.149
That's why we had Jeremy in the team.
01:17:03.382 --> 01:17:11.371
And thank you, jeremy, because you gave me the support that I didn't feel so badly, that I was a little lost at the beginning.
01:17:11.981 --> 01:17:21.266
It took me to a rabbit hole Because, like right, when you mentioned about the semantic kernel, I had it up because I was curious about it, and then Stefano brought it up.
01:17:21.266 --> 01:17:23.025
It's like, oh okay, I'm going to read into this now.
01:17:23.207 --> 01:17:32.773
Today, yeah, I don't know, but with that, you had mentioned that you'll be at the conference.
01:17:32.773 --> 01:17:45.970
You have some workshops, dimitri, how else can someone get in contact with you to learn more about AI, centralq, the hackathon, or also contact you for any other questions they may?
01:17:45.989 --> 01:17:50.390
have my Twitter or LinkedIn is Dimitri Katzen.
01:17:50.390 --> 01:18:02.672
My blog is katatsoncom and you can use Central Queue to ask any of your questions.
01:18:02.672 --> 01:18:06.046
I'm behind this.
01:18:06.046 --> 01:18:07.506
I'm typing the answers.
01:18:19.220 --> 01:18:19.881
Stefano, how about you?
01:18:19.881 --> 01:18:20.221
How would someone?
01:18:20.055 --> 01:18:21.207
get in contact with you to learn more about the information that you have provided.
01:18:21.207 --> 01:18:28.341
I'm always available on social, so mainly LinkedIn and Twitter, or better called ETX.
01:18:28.341 --> 01:18:33.653
Now Also my website you can reach me from my website.
01:18:33.653 --> 01:18:35.346
That is demiglianicom.
01:18:35.346 --> 01:18:46.685
I will be next week together with Jeremy in Slovenia where Dynamics my Conference, where we'll talk about these topics.
01:18:46.685 --> 01:19:01.876
For sure, I hope to be with these two guys together again in other conferences, maybe to talk again about these topics quite soon.
01:19:01.876 --> 01:19:07.511
But yes, contact me via social media is the best way.
01:19:09.301 --> 01:19:16.806
If you're together again with these two great individuals at a conference, I think you need more than a one-hour session or a 90-minute session.
01:19:16.806 --> 01:19:20.323
I think they should schedule a half-day workshop.
01:19:20.344 --> 01:19:22.945
No, we just need Jeremy to describe what we mean.
01:19:24.090 --> 01:19:24.250
Okay.
01:19:24.250 --> 01:19:27.828
Jeremy can condense it all, which is great.
01:19:27.828 --> 01:19:39.851
Jeremy, how would one contact you to learn more information about yourself, as well as all the other great contributions you've done for this, as well as the community?
01:19:41.220 --> 01:19:45.570
Well, I mean LinkedIn and Twitter are both very popular places with partners.
01:19:45.570 --> 01:19:54.210
There was a great slide recently at one of the conferences talking about where people go to find info, and it's quite different between users and partners.
01:19:54.210 --> 01:19:57.367
Linkedin seems to be a nice little Venn diagram.
01:19:57.367 --> 01:20:09.412
In the middle of that, I'm currently announcing a variety of classes throughout the summer in that space and API book and your first 20 hours second editions are both coming up shortly.
01:20:09.412 --> 01:20:14.564
I'm trying to get that ready for tech days mid-June, so that's going to be fun.
01:20:15.287 --> 01:20:15.689
Oh great.
01:20:15.689 --> 01:20:21.653
I appreciated the API book that you released and I'm looking forward to the second edition.
01:20:22.539 --> 01:20:30.307
You'll get a good laugh at social media, on LinkedIn, of promoting the API ref book too, because they did a wonderful thing.
01:20:30.307 --> 01:20:35.064
Incoming documents is attachments and attachments is slash document attachments.
01:20:35.064 --> 01:20:41.962
So there's lots of fun to come and hopefully I will appreciate the extra book sales.
01:20:43.405 --> 01:20:43.806
That's great.
01:20:43.806 --> 01:20:52.572
So everyone check out the books as well as contact and see what everyone that was here today is working on, and hopefully we'll see that video soon.
01:20:52.572 --> 01:20:53.980
Again, thank you all for your time.
01:20:53.980 --> 01:21:04.269
I appreciate it, and thank you for all that you do, and also now I feel a lot more comfortable with this whole vector semantic search concept.
01:21:04.269 --> 01:21:07.444
I don't know if I could do it, but the concept at least I understand.
01:21:07.444 --> 01:21:08.726
Yeah, thank, you.
01:21:08.747 --> 01:21:10.471
Thank you again and have a good day.
01:21:10.471 --> 01:21:10.853
Ciao, ciao.
01:21:10.853 --> 01:21:18.649
Thank you, chris, for your time for another episode of In the Dynamics Corner Chair, and thank you to our guests for participating.
01:21:18.909 --> 01:21:20.456
Thank you, brad, for your time.
01:21:20.456 --> 01:21:23.944
It is a wonderful episode of Dynamics Corner Chair.
01:21:23.944 --> 01:21:27.431
I would also like to thank our guests for joining us.
01:21:27.431 --> 01:21:30.444
Thank you for all of our listeners tuning in as well.
01:21:30.444 --> 01:21:45.048
You can find Brad at developerlifecom, that is D-V-L-P-R-L-I-F-Ecom, and you can interact with them via Twitter, d-v-l-p-r-l-i-f-e.
01:21:45.048 --> 01:21:59.904
At matalinoio, m-a-t-a-l-i-n-o dot I-O, and my Twitter handle is matalino16.
01:21:59.904 --> 01:22:02.009
And you can see those links down below in the show notes.
01:22:02.009 --> 01:22:03.372
Again, thank you everyone.
01:22:03.372 --> 01:22:06.341
Thank you and take care you, you.