Latest / Agentic Conversations (formally mlops.community) / [Exclusive] Zilliz Roundtable // Why Purpose-built Vector Databases Matter for Your Use Case
Transcript
- 0:06Hey Ohh, what is happening? Everyone, welcome, welcome,
- 0:14welcome to another ML OPS community roundtable today who
- 0:21got something special in the works talking all about vector
- 0:26databases and hopefully gonna demystify a bit of what you're
- 0:33looking at when you're thinking and you're testing out your
- 0:36vector databases. I figured you know what?
- 0:39As we like to do around here, I might as well bring out our
- 0:43guest of honours with a little diddly.
- 0:48And so I brought my guitar And if you will permit me, in this
- 0:51moment, I'm going to start playing that guitar because
- 0:55we've got three incredible speakers or panellists, if you
- 1:02want to call them that. And it's only right that we give
- 1:08them a warm welcome. So while I am jumping in here
- 1:14and making some noise or what some people might call music, I
- 1:20would love to hear in the chat where you all are calling in
- 1:24from. Let's get this started, huh?
- 2:41AO. Let's bring out our guests of
- 2:45honour. Now where they at, Mr Frank?
- 2:49There is, for everybody that do not know.
- 2:53Head of AI and ML at Zillas. I see you laughing.
- 2:57You were not expecting that kind of intro, were you?
- 3:00I I was not expecting that kind of intro, but I'm very
- 3:02pleasantly surprised as I have always.
- 3:05When someone serenades you, we've also got Eugene.
- 3:08Where you at, man? Hey, there you are, these
- 3:10developer advocate at Zillas. And last but not least then
- 3:15where are you that there you are, Head of AI platform and
- 3:19Ecosystem. So today folks, we're going to
- 3:23be talking all about why purpose built vector databases matter
- 3:29and if you should be thinking about them for your use case.
- 3:34We really want to get into a deep dive on the vector database
- 3:41scene because right now it feels like just about every database
- 3:46out there has bolted on a vector offering.
- 3:52And so I think there is this huge question in people's eyes
- 3:57as far as when do I just use the vector database that I've got
- 4:03and use these vector offerings from whatever my favourite
- 4:11vector database or favourite database flavour is versus when
- 4:15do I just totally look at going all in on a vector database and
- 4:20why I would want to, what are the trade-offs that I'm thinking
- 4:24about? And so I'm excited.
- 4:27I can't believe we got all three of you on here on this call at
- 4:30the same time. It's an absolute delivered
- 4:33privilege and an honour. And so I think what we should
- 4:38start off with And Frank, because I brought you up first,
- 4:40I'm going to direct this first question at you Shit.
- 4:44When it comes to vector databases, there are always the
- 4:48questions of if you need it or not, because these LLM context
- 4:55windows are increasing right? And most specifically, when we
- 4:59talk about rags, I think a lot of people as Google put out
- 5:05their their paper like, ohh do we need vector databases
- 5:09anymore? Because now the LM month ends
- 5:13like that. It's just you're gonna grow the
- 5:15Bible out of it and you can throw the Koran at it and you
- 5:18can throw the Tibetan Book of the dead at it.
- 5:19Whatever you want to throw, you can throw it all and more at it.
- 5:23So where you sitting in this? How do you look at it?
- 5:28Well, yeah, you could throw the Bible at it.
- 5:29You know, you can throw the crown at it, whatever.
- 5:31You could throw the, but can you?
- 5:34I think the real question is, there's a couple of key factors
- 5:37here I think about. First is, do you really want to
- 5:40pay? If you're gonna query over,
- 5:43let's say, the Bible, do you really wanna pay a dollar per
- 5:45query? Right.
- 5:45Do you? Do you really wanna say, OK, I'm
- 5:47gonna have all this stuff into the context window for my large
- 5:51language model and I'm gonna pay a dollar to ask a question right
- 5:55now. If I have 100,000 questions, I
- 5:58have to pay $100,000 just for for, you know, just for all of
- 6:01that. So that's one of the questions.
- 6:02So it adds to the context. As you have more and more
- 6:04context, the the price of what you're charged becomes more and
- 6:09more expensive. And not just from a dollar
- 6:12perspective, but also from a compute perspective as well.
- 6:15So large language models, it's more based at the end of the
- 6:19day. So they have, they really are
- 6:22are quadratic when it comes to the token length in terms of
- 6:26compute complexity, right, in terms of runtime complexity.
- 6:28So it's both factor of time as well as cost.
- 6:31The other thing to think about is, OK, you have a million
- 6:33tokens that you can feed your large language model.
- 6:37But if I'm trying to index, let's say you know the San
- 6:39Francisco Public Library or if I have a tonne of books that I
- 6:43wanna index, it's not all going to fit into the context.
- 6:45Whether it's still, I think it's still.
- 6:48There's these two factors. Irrespective of how long your
- 6:51context window is, irrespective of whether or not you have a
- 6:57language model that how large it is, you will still need vector
- 7:02databases to really retrieve to store and retrieve all contacts
- 7:08that you really. Yeah, I see you and I I see that
- 7:13you were like thinking maybe ohh, should I go?
- 7:16Should I step up to the mic? I'll just be I mean like the
- 7:21other thing that I would say with this is just like you know
- 7:23there's still they still have this kind of like lost little
- 7:25problem and you know I don't know what like clause sorry clot
- 7:33threes and new cost is like $75.00 for a million tokens and
- 7:39that's that's that's a lot you know.
- 7:42So just to kind of add on to what Frank was saying, like a
- 7:46dollar per per question might actually be underestimating it
- 7:49if you're gonna be talking to the.
- 7:50Bible, you know. Yeah, and it does feel like I I
- 7:53often wonder about the performance on if that is the
- 7:57best way to do it. So there is a clear piece around
- 8:02speed not being up to par. And then the other side is like
- 8:08you're potentially going to burn a hole in your pocket, but like
- 8:13is this actually going to give you the most relevant answer is
- 8:18probably the most important thing because maybe people will
- 8:20pay at the end of the day and they will wait.
- 8:24But if it also doesn't give you that the most relevant answer or
- 8:29the best answer that you could get, I think then it just makes
- 8:33no sense. So that's another piece that I I
- 8:36would love. I haven't seen much around that.
- 8:38I don't know if any of you guys. Have I think that's an
- 8:41interesting question. I think a lot of the a lot of
- 8:42the research at least I've seen today when it comes to retrieval
- 8:46is is very much what people what's called needle in the
- 8:49haystack retrieval. So they'll have you know, you'll
- 8:51have, I think one of the earliest examples is you have
- 8:55Harry Potter, you know you have the Harry Potter series.
- 8:57They add it what, Harry Potter and the Chamber of Secrets.
- 9:02And you take this entire book, all of its tokens, and you fit
- 9:05that into the token window. And then right in the middle you
- 9:08have a sentence like and Ujan is a developer advocate as it is.
- 9:14Or something silly like that, right?
- 9:15And Eugen loves machine learning.
- 9:17Something like that. But to me it's a really, really
- 9:20unfair comparison. First, because how many times
- 9:22does the phrase machine learning appear in the Harry Potter
- 9:25right? How many times does the word
- 9:26Ujan appear in the Harry Potter series?
- 9:29Probably no tie like it doesn't appear at all.
- 9:33So it's very, very easy. You know, it's very, very easy
- 9:36for. It's very, very easy for a large
- 9:38language model for these attention mechanisms that are
- 9:41elements to pick out that that subset of those phrases.
- 9:45And the other thing is, I think there's also recent research.
- 9:48I was reading a paper recently. It talks about the Holy Grail of
- 9:52sort of large language models. Is reason and generalisation
- 9:55right across you know different? You know across different tasks.
- 10:00And if you try to do reasoning across you know.
- 10:04If you try to, you know you have long context and you add these
- 10:07sort of bits and pieces and you try to do reasoning across all
- 10:09context, The performance becomes much worse as you increase the
- 10:13likelihood, as you increase like the amount of tokens you're.
- 10:16So think of the day it's still relevant and retrieval is still
- 10:19very, very relevant wise. And I think it will continue to
- 10:22be now maybe one day. I think one day really, really
- 10:26far down the road, it doesn't really make sense to use rag I I
- 10:30do see that potentially happening, but I think in the
- 10:32short term doesn't matter how long these contacts.
- 10:37Yeah. The other thing that I often
- 10:38think about too is like how much goes on outside of just a prompt
- 10:44and the context window and how many other pieces you need to be
- 10:48thinking about. That is not just like, oh cool,
- 10:52I'm going to put all this data into a context window and then
- 10:56it's going to make my life easier.
- 10:59And really, it reminds me of that famous Google paper back in
- 11:03the day where it had the model and that was like just one part
- 11:07of the entire system. And so it still feels like this,
- 11:11like the context window is just one part, like, how clean is the
- 11:14data? How are you ingesting that data?
- 11:16How are you quality controlling? Like if you're getting tables
- 11:19from PDF's, how do you make sure that those tables are actually
- 11:24water in the PDF? And there's there's just so many
- 11:28other questions that are beyond the the context window and so
- 11:32that that's another huge piece. Yeah, absolutely.
- 11:36I think I want to, I want to give Jack Jack some time to
- 11:39speak about this as well because he, he does, he does those
- 11:41pipelines and he's got tonnes of experience.
- 11:43You mentioned PDFs, tables, all these kind of different
- 11:46modalities of data, but the the analogy that I like to use is
- 11:51that the context window. I saw this somewhere, I don't
- 11:54remember where I saw this, but I thought it was a great analogy,
- 11:57right? It's the context windows like
- 11:58your it's like ramp or it's like it's like it's like an L1L2L3
- 12:02cache and your database is is like this.
- 12:07Now can you store everything your database?
- 12:08Probably not unless you want your costs to be astronomical.
- 12:11But it is meant to give you, it's meant to give you different
- 12:15different layers of storage so to speak, right.
- 12:18And you don't want to just as you don't want everything to be
- 12:22in your RAM all the time and continue to ask questions over
- 12:25that, you don't necessarily you want to offload those
- 12:29capabilities to disc to your vector database.
- 12:33So anyway that's just my two cents.
- 12:35I think, I think perhaps maybe we haven't done as great of a
- 12:38job of educating community as why word search is so relevant
- 12:41with these long context models that can do needle haystack
- 12:44retrieval. But that's what we're doing
- 12:48here, right? And so it's like, you know,
- 12:51hopefully in the future, you know things will, things will
- 12:54change. Talk to us.
- 12:56Yeah. Talk to us about pipelines.
- 12:57Yeah. Yeah, so coming coming from a
- 12:59background of search indexing, I I do have a lot to say about
- 13:03this. This kind of, I would say a hype
- 13:06of lung contacts will take over everything.
- 13:10To me that doesn't really make sense from a production
- 13:13perspective because well, there are just so many things to
- 13:17consider where our serving user queries in a real world are
- 13:21considering the latency or considering the user experience.
- 13:24You're considering the cost like all sorts of of aspects are not
- 13:30considered when when doing this more abstractive like academic
- 13:34research on needle in haystack experiment.
- 13:38It's more of a stress testing of the capability of large language
- 13:43model rather than promoting. While you should use this in
- 13:46your production setup. I think that that makes no sense
- 13:50but why? So I can I can give some
- 13:53examples or some throw in some some ideas here.
- 13:56So one thing is on we like in in the in the search world we
- 14:02always have the analogy that the serving time like serving user
- 14:06queries, just people, the expert, there's a whole amount
- 14:10of efforts being spent in the offline indexing time.
- 14:15Doing so is because a lot of the analysis of the understanding of
- 14:20the content are like really, really expensive.
- 14:24They are like they involves running many machine learning
- 14:29models and they involve like doing very lengthy analysis on
- 14:34those content and you cannot simply cannot afford doing that
- 14:38when the user is sending a query to you, right, you are supposed
- 14:41to give back an answer within like 10 minutes, seconds or
- 14:44something like that. So that there's a, there's a a
- 14:48huge principle of doing all those kind of heavy lifting
- 14:52stuff offline. And that's I think that's that's
- 14:55one of the main principle of RACK as well, right For for RAG
- 15:00you you do retrieval to augment or to enhance the large language
- 15:05models and a huge part of retrieval is that you need to
- 15:09understand the content and prepare all those efficient
- 15:12index for those content before the user query becomes.
- 15:17So I think that the pattern is a great advantage or value of of
- 15:22right. There are also other
- 15:24considerations because by doing this offline you are saving
- 15:28time. Not only time but also cost
- 15:32because if you are not doing that then every time the user
- 15:36query comes, you need to do that once more like for for that
- 15:40particular query and that's not affordable.
- 15:43So even though like say understanding this whole Bible
- 15:47takes say $3, right, like spending $3 once is whole
- 15:52different story, that's spending in for millions of times when
- 15:56the user query comes. So all those sorts of things
- 15:59we're now considered in this experiment.
- 16:01I'm I'm like personally excited about this experiment because
- 16:04that's really extending the boundary of the capability of
- 16:07large language models. But like looking back into what
- 16:11kind of production system we want today, I think RAG is still
- 16:15relevant. Is is never more relevant than
- 16:18than right? I really enjoy this idea that
- 16:21you're talking about about like what the needle in the haystack
- 16:25should be looked at is more of a stress test, not like a daily
- 16:29driver type thing. It's not a a best practise that
- 16:33people are advocating for. It's just like how far can we
- 16:35push this, and at least not today in we shouldn't be
- 16:41thinking that's how we we wanna architect our systems and we
- 16:46wanna like leverage that. It's just that, OK, this is
- 16:48another tool in our arsenal. I also don't want to let anybody
- 16:54think that I did not let it go over my head.
- 16:58We are using the Bible as our reference here, which some
- 17:05people on YouTube have said I bear striking resemblance to a
- 17:09person in the Bible. And so we can kind of book now
- 17:14if you want. We could talk about maybe like
- 17:17encyclopaedia for you. Know the encyclopaedia worse as
- 17:20well? Yeah, the encyclopaedia or Harry
- 17:24Potter was great. Yeah, Harry Potter's good.
- 17:27Harry Potter is probably more culturally relevant than the
- 17:30encyclopaedia. So now that we got that out the
- 17:35way, I, Frank, were you able to find what the name of that paper
- 17:41was that you you referenced a minute ago?
- 17:43And if not, I'll let you look for it, Yeah.
- 17:45Unfortunately, haven't I? I need a little bit more time.
- 17:47There is. And I'm wrote in the chat.
- 17:49When there are so many papers coming out that it just kind of
- 17:53drives me crazy and you know, I I I try to go through these days
- 17:56I only read the the intro and the conclusion.
- 17:59He's just like, smart, man. You are smarter man.
- 18:03Yes, I try and understand it and then if it's really interesting,
- 18:07then I'll try and dive into it. But all right, there is one
- 18:11thing that I want to talk about. So we talked about this rag idea
- 18:14and we talked about hey is, is there still room for vector
- 18:20databases there. But let's move on a little bit
- 18:23more because as we are talking in this the general setting of
- 18:28vector database, it's a purpose built vector database versus
- 18:33like just vector database bolted on the normal database that I'm
- 18:37using whatever my flavour is And before we get there maybe can we
- 18:43set a bit of a scene because are there other things.
- 18:46So if you have another database that is specialised in certain
- 18:53areas and then it throws on the vector database aspect to it,
- 18:58that's one thing. But with like vector databases,
- 19:01are there other types of data that you would think about
- 19:05storing in a vector database and why?
- 19:08If yes, like why would you do? That I guess I can, I can take
- 19:12this one to start with and then Frank and John can give their
- 19:16opinions on this. So I've been saying this for a
- 19:19while because I I heard this from James and I was kind of
- 19:21curious to look into this. But vector databases are really
- 19:26compute engines and the whole like name vector database is
- 19:29actually just a miss nowhere. It's just that it's easier to
- 19:33tell people it's a database because you're storing
- 19:35something, but the reality is you're actually storing
- 19:37something in you are storing vectors in memory, but most of
- 19:41the data that you store is actually held into permanent
- 19:44storage, so like S3 or mini or something like that.
- 19:47So you can store basically any types of data that you want in
- 19:50investor database, just like you could treat it just like a Nosql
- 19:54database and you would store things like text for rag, or if
- 20:00you're going to be working with multimodal rag, you're gonna be
- 20:02storing images perhaps, you know, probably links to images,
- 20:05videos, things like that. And you should store this stuff
- 20:08and you just store the metadata and maybe it tells you like,
- 20:10hey, this is when this was published, this is who wrote it,
- 20:13this is, you know, XYZ about the the information that you're
- 20:17storing. And this will basically let you
- 20:19use something that was originally built as the Compute
- 20:22Engine to do vector search on top of you know.
- 20:27A permanent storage layer, as if it were a real database.
- 20:31And this is basically kind of how let's say Nosql databases
- 20:34work and the difference between the way that a purpose built
- 20:40back to database works and something that you just tack on
- 20:42to let's say no SQL database or SQL database is in the way that
- 20:47it's designed. And you know, we all kind of
- 20:52have this intuition that things are best used for the purposes
- 20:59that they're designed for. And so vector databases are
- 21:03designed to be able to do this high amount of compute
- 21:06efficiently and effectively at scale.
- 21:08I mean let's just say open source for example.
- 21:10If you just look at some of the open source projects, you can go
- 21:12in and you can look at how much work was really put into this.
- 21:15And I'm not going to say that that is the only indicator of
- 21:19how many lines of code maybe is not the only indicator of how
- 21:22robust or feature rich system is.
- 21:25But it is definitely something where you can kind of look at
- 21:28and be like OK, like you know, there's a lot of, you know,
- 21:32features here that kind of help you do things perhaps on an
- 21:35enterprise scale or at a most or at a more robust level.
- 21:39Yeah, I think if you if you think of vector database in the
- 21:43ecosystem of search or information retrieval, it is
- 21:47supposed to be the most efficient way of retrieving some
- 21:50information that has been offline, index and and
- 21:53organised. However, when you organise the
- 21:56information, you probably don't want to want to organise the say
- 22:01the IDs or the the the index of it.
- 22:04You also want to kind of put the original content as close as
- 22:08possible to it, because that's what you really want to retrieve
- 22:12and return back to your customers or clients, right?
- 22:16So with this mindset we we do design ways of storing not only
- 22:21vector data but also other kind of unstructured data which is
- 22:25the source of the information where those vectors are
- 22:28generated from. We by placing them closely with
- 22:33vectors and returning them at the same time or together, we
- 22:38can help the developers to build more efficient applications
- 22:41because they do not need to retrieve these raw data from
- 22:47somewhere else again and they they can achieve the best
- 22:51efficiency from this pattern. Yeah, I I was sorry.
- 22:56I was sort of busy searching for that paper.
- 22:58I have not about it yet. So I I apologise to the as as as
- 23:04soon as they are able to direct places I will find it.
- 23:07Yeah, you know, I don't find it by.
- 23:08Better search it. I don't find it by the end of
- 23:11the session. I will.
- 23:13I will. Build the new search.
- 23:15On Twitter, I'll build a new search.
- 23:16Yeah, I'll post it. On Twitter, I'll tag you choose.
- 23:19Yeah, archive. You're gonna build a whole new
- 23:21archive search function so that you can find it next time.
- 23:25Yeah all these papers I mean cause the way the way I'm
- 23:30searching for it now or which you know it sounds really it's
- 23:33it sounds realistic. It's pure keyword based on I'm
- 23:35searching like you know, reasoning capabilities as
- 23:38context window increases and it's just not popping up.
- 23:41There's actually there's actually some diagrams in there
- 23:44which I actually remember very very fondly.
- 23:48And if I find those images I'll sort of share them with you as
- 23:51well. Dimitrios, maybe you can nice
- 23:53post them, but. Yes, please.
- 23:55We'll send an e-mail out to everyone to the The other thing
- 24:00that I was going to mention unless did you have something
- 24:02you want to attack on there? I imagine you were.
- 24:05I think, I think Jane and Jane said it really, really well,
- 24:09right at the end of the day, you know this about your database is
- 24:12a compute engine. But the one thing that the one
- 24:16thing that I do want to say is my personal opinion.
- 24:18I do think Jiang disagrees with me here, so it would be
- 24:21interesting to just chat about, chat about a little bit more.
- 24:24If you look at, look, you got guys like manga to be coming in
- 24:29and data, sex and and you know, elastic or whatever.
- 24:32I'm not, I'm not trying to throw shade on them.
- 24:34I think these are really great systems, but what what is their
- 24:39marketing team you say, right? They say hey you should just
- 24:41come use us because you can store structured or semi
- 24:46structured data in in in here. You can even store JSON
- 24:49documents in MongoDB and you can store vector data too, right?
- 24:53To kill two birds with one stone, right?
- 24:55Just to just use us and I think they really missed the point in
- 24:59that these databases at the end of the day, you know vector
- 25:02databases were built for different things.
- 25:04Vector databases are built from the ground up to support vector
- 25:06search and filtered search and and hybrid sparse does search.
- 25:11It doesn't mean that vector databases don't support JSON
- 25:13Data, right. You could have a blog post
- 25:16that's coming up that's all about just storing using your
- 25:19vector database as a pure Nosql data store.
- 25:22You can just store JSON Data without vectors.
- 25:24You can do that if you want. It's like, hey, if MongoDB wants
- 25:27to play that game, we can play that game too.
- 25:29It's just that we don't because I think we've always been, at
- 25:33least in my eyes, we've always been very much about
- 25:36accelerating the adoption of vector search and accelerating
- 25:39the adoption of of of embeddings and embedding based retrieval.
- 25:43That is my two cents. I know there are, I know that
- 25:47there are differing opinions out there And I'm not saying that
- 25:49you should store JSON Data injector database.
- 25:52I'm not saying that all The thing is that if you are, if you
- 25:55don't want to manage multiple databases, if you don't want to
- 25:57manage multiple sources of data, start with the vector database.
- 26:01Right future pretty yourself, right?
- 26:03Don't, don't. You know, don't listen, you
- 26:07know, don't listen to the, you know, don't drink the kool-aid,
- 26:10so to speak. Or what is it?
- 26:12What is the phrase that folks use for this kind of stuff these
- 26:14days? What are all the cool kids
- 26:15saying? They What are?
- 26:16The cool kids saying, you know, I don't think.
- 26:18He doesn't want to crochet, but I'll throw shade, try to store
- 26:211,000,000 a million vectors in MongoDB, retrieve them and come
- 26:24back to me. Yeah, I mean, I think, I think
- 26:28Mongo DB is great. It's excellent, right.
- 26:30But at the end of the day it's it's, it's you're doing
- 26:33different things. It doesn't mean that we don't
- 26:35support JSON Data which don't support it as well as MongoDB
- 26:38does, just like MongoDB doesn't support vector data as well as
- 26:40we do. That's and that's exactly it.
- 26:43It's like, why are why is there a whole market of so many
- 26:47different databases? Because each database has their
- 26:50specific flavour that they do things really well at, and for
- 26:54use cases you need these different flavours because it is
- 27:00what you're optimising for. Yeah, as a matter of fact, we
- 27:04are actually building this data connectivity with all sorts of
- 27:08connectors. So even if some of the data,
- 27:11while they are more meant to be stored and managed by another
- 27:18purpose to back a database or data management system, we do
- 27:23have a valid path for those data to become vectors.
- 27:28Like being generated as vectors and then being send to vector
- 27:34database for efficient and timely retrieval.
- 27:37So there there's some questions coming through in the chat that
- 27:40I want to ask and then I want to get into a few ways to future
- 27:44proof yourself and how to like use specific features in the
- 27:50vector databases that can help you.
- 27:54But we've got one question coming through since we are
- 27:57talking about like pros and cons of different vector databases.
- 28:02So someone is asking about Novis versus Pine Cone.
- 28:07I think one piece is, but I'll start Mill, this is open source.
- 28:12Pine cone is not right. I think that's probably the the
- 28:16biggest thing in my mind. But you all have fielded this
- 28:20question many more times than I have.
- 28:22So is there anything else that you can say?
- 28:25I'm looking at Eugene looking at licking his lips.
- 28:27He's like, let me add it, hold on, let me turn myself off mute.
- 28:31I got other stuff to say. I was already talking about
- 28:33Mongo. Now Pine Cone, this is the best
- 28:34day of my life. You got centre stage, dude.
- 28:38I I don't wanna, I don't wanna be too inflammatory here.
- 28:42But go on Pine Cones website, see how big you can, how many,
- 28:48how many, how much data you can really store.
- 28:50We've got some. We've got some benchmarks for
- 28:52this. They're open source, as is the
- 28:55ethos here as Ellis and you can really take a look at the data
- 29:00sets we use and the way we test the data and benchmark the data
- 29:05and just look at just you can just text the benchmarks
- 29:08yourself. Like, I don't think I need to
- 29:10say too much about this. I'm just going to say look at
- 29:12the benchmarks. It's all open source.
- 29:13You can see exactly how it's done.
- 29:15All the data is out there. You can bring your own data,
- 29:17just benchmark it yourself. Yeah, I think on top of that
- 29:22other than the open source malware will, we also have
- 29:25managed meals which is series called and in silence cloud we
- 29:29added 10s of features On top of that we have a even more
- 29:34performance even though like Melissa is already performing.
- 29:37We have even more performant core or like indexing engine
- 29:43until it's out. And we have this this feature
- 29:47called Silk called Pipelines, which provides the streamlined
- 29:52fashion of generating vegetarian bindings and then storing and
- 29:57retrieving them in vector database.
- 29:59And we also have the data connectivity that we mentioned.
- 30:02We are building data connectors with all sorts of data sources
- 30:06in this ecosystem and all those features.
- 30:11I think those provide some differentiation between US and
- 30:15and pine cone if if open source is not only the the
- 30:20differentiator. Excellent.
- 30:22The the next question coming through in the chat is asking
- 30:26I'm vector DB curious but very ignorant on the topic.
- 30:31How flexible or feasible would it be to use the same vector DB
- 30:35of images with annotations for data loading during training as
- 30:41part of the inference deployment?
- 30:44So you're looking to use vector databases in your training loop
- 30:46and I think that's it's it's actually not a common use case
- 30:50that we see today just across the board but it will be very
- 30:55very common for it And we've already got you know I won't
- 30:59necessarily name who but we already have folks that actually
- 31:01use build this in the training loop not just for large language
- 31:06models but for other models as well.
- 31:08And one of the things that they use it for is for example the
- 31:12duplication of your training data.
- 31:13And one really interesting way that you can using actually just
- 31:17say hey, I'm going to I have this model that I've trained.
- 31:21I'm going to use it to fetch items that are make sure that I
- 31:26fetch items for training my new model that I know are are not
- 31:31duplicates of what I've already used.
- 31:33And there's also other ways other really interesting ways to
- 31:36use your back to database in the training loop as well which I
- 31:38won't get too much into some of the details.
- 31:40But specifically as it comes to your use case, when it comes to
- 31:43image, images with annotations, if you have, let's say you're
- 31:47trying to train, let's say a very large multimodal model, you
- 31:51can take some of these smaller embedding models that you have
- 31:53and you can especially if you have these multimodal models and
- 31:57then you can say, hey, I want to maybe for this particular batch
- 32:00or I want to shrink this particular expert on some, you
- 32:04know, one particular cluster of images or one particular, one
- 32:08particular set of images, right. And that's one of the really,
- 32:11really interesting, just one of the large subset of ways I think
- 32:15you can use this. You can use not just Milkis,
- 32:17right, other vector databases as well inside of your.
- 32:20I think we're going to see more and more of these sort of use
- 32:24cases for vector search in the future.
- 32:28Really ties in very, very nicely with ML OPS.
- 32:31Yeah. But we did see some use cases of
- 32:34using vector database as retrieval and for deduplication
- 32:38of images during the training phase.
- 32:40I don't think we have seen like kind of combining this workload
- 32:44with the online serving workload because one is like one comes in
- 32:49bulk and it will probably take over some of the computing
- 32:53resource of the of your collection.
- 32:55So even though both of the use cases are are being seen in your
- 33:01in your clients use cases, it kind of makes sense to to with
- 33:06them into two different collections or even two
- 33:08different physical setups so that you don't hurt the
- 33:12performance of the online serving with your like offline
- 33:15training use cases. Yeah, there's also like we can
- 33:19kind of actually see some people are already doing something
- 33:21similar to the the, the question askers question.
- 33:28So you go look at. Your question askers question.
- 33:31Right. But yeah, if you look at you
- 33:33know like ARISE and VASSAL 51 and Galileo and like some of
- 33:39these companies are doing this kind of thing where they're
- 33:41using effective database to kind of show you the data quality and
- 33:45the way that your data is clustered.
- 33:47And I know I just worked on something with Jacob from 51
- 33:52where you know, we use Milvus to store some data and to load some
- 33:59similar data and to to observe some of the vector embeddings
- 34:03and and how they look like. And so I think this is
- 34:05definitely something that people are looking at doing and and in
- 34:08fact already being done by a bunch of startups.
- 34:13Great question, Burhan. I really appreciate that one
- 34:16because I did not think of that at all.
- 34:18And so it's almost like, yeah, that beginner's mind came
- 34:22through and who would have thought that this is actually a
- 34:26pattern that you're starting to see emerge and probably will be
- 34:29something as we move forward. So now before we jump into
- 34:33embeddings, because I feel like we can't talk about vector
- 34:36databases without talking about embeddings, I do want to talk
- 34:39for a minute about the different like ways to future proof your
- 34:47AI applications and especially when you are using a purpose
- 34:50built vector database. Like what are things that we
- 34:55should be thinking about as we are moving through our life
- 35:00cycle? And like how we're setting U our
- 35:02system? And when it comes to most
- 35:06specifically like the vector database, are there features
- 35:09that we need to be keeping in mind?
- 35:10Is there metadata that we need to be thinking about?
- 35:12All of that fun stuff? There's a lot of new features
- 35:15coming in Millis 24 like hybrid search.
- 35:19And by the way, I'm gonna define hybrid search here.
- 35:21Hybrid search is when you do metadata filtering on your
- 35:26vector US hobby or vector search pre filtering on your metadata
- 35:29for your for your vector search. OK that will hybrid searches.
- 35:32Anybody who says otherwise is wrong.
- 35:34And then there's also a multi vector search coming.
- 35:37So that's when you're gonna be able to search multiple vectors
- 35:40and you're gonna be able to rerank based on how the vectors
- 35:43are. So for example a use case for
- 35:46this might be that you have both a semantic similarity aspect
- 35:50that you would like as well as maybe a visual similarity aspect
- 35:54that you would like. In which case you would want
- 35:56that vectors to do the semantic similarity search to get your
- 35:59traditional or what we call vector embeddings right now to
- 36:02do your semantic search. And then you're going to want
- 36:04maybe something like full embeddings to do your visual
- 36:06search. So there's definitely these use
- 36:09cases that we start seeing come up for multi vector search and
- 36:13maybe even you have text and you want to compare it and rerank
- 36:16based on the text or things like that.
- 36:18So there's a lot of these kinds of different new use cases that
- 36:22are a little bit more, let's say, advanced that are coming in
- 36:25the last two, four. Yeah, this this term of hybrid
- 36:28research. It's really funny.
- 36:29It's like everybody's using it for different meetings to my
- 36:34understanding. Well initially I was thinking
- 36:36like hybrid search is probably you're you're searching the same
- 36:39thing through different modality or like different different ways
- 36:43of while to to avoid the confusion I will just I will
- 36:47just describe that way of which directly rather than using this
- 36:51fancy terms. So yeah, genocide.
- 36:55In the upcoming 2.4 release we are supporting, we're supporting
- 36:58the while last hybrid the the mix of surf with with dense and
- 37:06sparse inviting because there are definitely some great
- 37:09features or properties of sparse embedding baby graphs.
- 37:13The they the graphs the the individual concepts of a long of
- 37:18a lengthy documents a bit better or like in a more understandable
- 37:22way than the dense embedding. So that there are definitely
- 37:26some developers fearing sparse search if not I stand alone but
- 37:31also like combined with the the the dense embedding retrieval so
- 37:37that yeah we we told the echo that requirement we we build
- 37:41that feature really really fast and we are releasing it very
- 37:46shortly. There is also while we're still
- 37:49enhancing the other aspects of the of the Mills offering.
- 37:55Just internally we are working on providing a a set of like how
- 38:02easy to use utility functions to generate the embeddings from the
- 38:07client side. So that you don't need to play
- 38:10with all sorts of frameworks and get confused in between them.
- 38:14If you have a relatively simpler requirements regarding which
- 38:19kind of actually embedding you want to generate.
- 38:21For example if you want to generate the sparse embedding
- 38:23from split model or BM25 which is more like old school way of
- 38:29representing text or definitely the hugging phase, sentence
- 38:35transformer and open eye and other the game writing services.
- 38:39So you bring up a very good point and I think it is the
- 38:43perfect segue into embeddings in general.
- 38:48And there was a question that came up in the MLS community
- 38:51slack and it was kind of around the lines of So what are some
- 38:55good practises around generating embeddings?
- 38:57What are the best models? And the consensus was it's kind
- 39:01of just like throwing spaghetti at the wall right now.
- 39:04You see what works and hopefully you get lucky.
- 39:08Go on to the leaderboard, grab a few of those models and then
- 39:13does it work for your use case? Cool.
- 39:15You're lucky it doesn't not keep searching.
- 39:17You know, Maybe you guys have seen better practises than that
- 39:21because it feels like there's got to be a different way,
- 39:24right? Well first I want to say this
- 39:26whole story of machine learning and artificial intelligence is
- 39:30like throwing sky onto the wall and see what works and so system
- 39:35of technology are are being developed but we don't want
- 39:40every single developer to do that again and again we we do
- 39:43want to provide some insights on that.
- 39:46Yeah, I would let Frank to to speak on our left.
- 39:49Frank is that while the great work in this area.
- 39:53OK, my my, my personal opinion is so I see, I see a lot of
- 39:57folks I talk to a lot of devs out there and you know when they
- 40:00when they're building out their application that leverages Lambs
- 40:03or leverages you know? Generative AI.
- 40:07They just say I'm using Open AIS API or I'm using opening eyes at
- 40:11an endpoint, which is great. Like I don't wanna, I don't
- 40:14wanna throw shit on them. I think it's a great embedding
- 40:15model, but like there's not one like it.
- 40:20There's no way that there's one embedding model that fits your
- 40:23use case right? If you look at I have this, I I
- 40:27wrote this, I wrote this blog and there's this great example
- 40:29on there where I I don't remember where I got this
- 40:34example from. Again, I I get a lot of these
- 40:36from different locations, different locations around the
- 40:39web, from different people, and I sort of repurposed them.
- 40:41So, you know, this is a great example where one sentence is
- 40:47let's eat, I'm going to say let's eat.
- 40:50Eugene here, let's eat, let's eat, right?
- 40:53And the other sentence is let's eat comma Eugene.
- 40:55And these mean two very, very different things right now for
- 40:59some applications, let's say you know for some applications,
- 41:04let's say you're you're you're talking a legal context or
- 41:06you're talking in that type of you're talking in things that
- 41:12are a little bit fuzzier. You probably want the embeddings
- 41:14for these two sets to be very, very close to each other.
- 41:16They're very related. They have almost the same tokens
- 41:19with the exception of some punctuation.
- 41:21And the people, the person that I'm talking about football,
- 41:24these are this case is is huge. It's to set it right.
- 41:28And in other you know, if you if you want to, if you want to talk
- 41:31about these two sentences from a the perspective of what does it
- 41:34actually mean. These mean very, very two
- 41:36different things, Two very, very different things.
- 41:39In one sentence I'm saying let's actually, you know, physically
- 41:42Yugen, which, you know, let's not do that.
- 41:45And then the other sentence I'm saying hey you Jen, let's go
- 41:48get, let's go get lunch or let's let's go out to eat.
- 41:51These mean two very different things.
- 41:53For some you know, it depends on what you want to do.
- 41:56You know there's there's no one-size-fits-all embedding
- 41:59embedding all. And if you look at a lot of the
- 42:01metrics out there of how, oh, you know, weddings aren't as
- 42:04good as be of 25, it's it's because you're not using
- 42:07something that is tailored to your application, right?
- 42:12That is tailored, you know, that is semantically relevant to your
- 42:15application. And I think try.
- 42:17My recommendation if you're looking to do if you're looking
- 42:19to get started with vector database directory search, try
- 42:22different models. I know it's A and you know
- 42:25hugging face and sense Transformers, and you know
- 42:28there's Voyage as well. They make it, you know these.
- 42:30They make it very easy for you to try different things, try
- 42:32different models and see what works best for your application.
- 42:35Use the LDM attend test, right? You know if I try, try tendering
- 42:41examples. Let's see which one looks the
- 42:42best, or try 20 different examples and see which one looks
- 42:46at best. At the end of the day, there's
- 42:48you know humans are still the best evaluators, right?
- 42:52And you should, depending on what it is that you're trying to
- 42:55build, evaluate your embedding model accordingly.
- 42:58I'll give a slightly different answer here.
- 43:02You should fine tune your embedding models.
- 43:05You should fine tune your embedding models with like that
- 43:08of what you're going to be doing.
- 43:10And actually this was. I talked about this in my paper
- 43:14with voxel 51 as well. We took some examples with Clip,
- 43:19VIT and the CFAR 10 data set and we searched 3 words Ferrari,
- 43:25pony and Mustang. And so you know, you can see
- 43:28Ferrari, he's gonna give you cars back, pony is gonna get
- 43:31animals back, but must say is going to give you both horses
- 43:35and cars back. And so, depending on what you're
- 43:38working on, let's say for example you're working on cars,
- 43:41you don't really want pictures of horses back, and so you have
- 43:44to fine tune your embeddings models to kind of get back the
- 43:47right next. Yeah, I think there are are just
- 43:52just so many embody models available on the market and
- 43:57unfortunately most of the developers just choose, say open
- 44:01eye embedding not because of this quality, but because of the
- 44:04name of open. So that's definitely not the way
- 44:08I would recommend. I think surprisingly just with a
- 44:13very small data set, you can probably test the effectiveness
- 44:18of the embedding model on your particular use case.
- 44:21So that my top recommendation is that if you have this with this
- 44:27capacity of doing some testing and evaluation, definitely build
- 44:30your own data set which can speak best for you or your use
- 44:35case than any other open data site such as Ms Macro or Beer.
- 44:40And also this, this, this public public leaderboard from
- 44:47packaging base. I'm dead right.
- 44:49This I'm tab leaderboard has been overfitted by many, many
- 44:54models already, so it's really hard to simply judge.
- 44:58I mean, that's still instructive, but we we should
- 45:02then simply judge by by their ranking on this leaderboard.
- 45:06However, that being said, if you don't have the capacity of doing
- 45:10an evaluation, then choosing from some big name is still a
- 45:14practical way of making the job. So there there's something
- 45:18fascinating that you said there, like creating your own data set.
- 45:22And I think I just saw some posts on one of the social
- 45:30medias talking about like how a big question and open question
- 45:34is how much data is enough to be able to say like, yeah, this is
- 45:40good And especially if we're doing for taking your Jane's
- 45:43recommendation and saying, all right, we'll fine tune our
- 45:46embedding model. Have you seen best practises
- 45:49around that? Like what is a good amount of
- 45:53data look like and how can you assure the quality of that?
- 45:57Also like how can you make sure that it is nice and diverse,
- 46:02robust, all the fun stuff in there too.
- 46:06So there was a recent paper from 2023 or maybe it's 2022, I think
- 46:11it's 2023. It's called neural priming and
- 46:14it comes out of. Ohh man I don't know what
- 46:18school. It comes out of, but it's it's
- 46:20Ali Farhadi is the, the lead researcher for that.
- 46:22He's currently the CEO of AI 2:00.
- 46:24And basically what they show is that if you prime a model with
- 46:30some images. So this isn't even fine tuning.
- 46:32This is I mean this is like kind of fine tuning.
- 46:33It's like very you know it's a very small amount of fine tuning
- 46:36with the right amount of with the right contacts, you will get
- 46:39some decent percentage improvement in results.
- 46:42And of course this will vary from data set to data set.
- 46:45But for images, you're really only looking at 2025 images to
- 46:50kind of skew the to skew the model towards what you're
- 46:54looking for. And for texts, you're looking at
- 46:57maybe like 100 to 120 sentences. From my just my experience of
- 47:02working with the evaluation, I think the bare minimum is
- 47:05definitely tends to hundreds of of examples to give you a
- 47:10meaningful indication of how well this model performs.
- 47:15If you have thousands of examples, you are probably in
- 47:17good shape as a general rule of. So basically it to try and
- 47:23summarise this so that it's not throwing spaghetti at the wall,
- 47:26right. Well, what we're going to do is
- 47:28we're going to go on the leaderboard.
- 47:30We're going to grab a few models, test those out with
- 47:33maybe 100 if you can, 100 different types of of examples.
- 47:41And then if you see that there's one that's performing well, go
- 47:45ahead, add that extra tuning, Fine tune it data as you can.
- 47:50But you probably don't need to be thinking more than like 1000
- 47:53examples. You probably should be thinking
- 47:56more in the hundreds of examples and may be able to get away with
- 48:00the 10s of examples. The data has to be really high
- 48:03quality. Though, right?
- 48:04So you don't want to what large language models are really, or
- 48:09what large language models are really good at is, you know,
- 48:11they have just a huge wealth of pre training data.
- 48:15And if you want to, if you want to use very, very little data,
- 48:19that's OK. But you just have to make sure
- 48:21that it's really, really relevant to your data set.
- 48:24It's very It makes sure that it's a good representation for
- 48:29what things are actually going to look like when you go to
- 48:31product. Yeah, that's so true.
- 48:33I and that was a another great paper, the Lima paper like less
- 48:37is more. It's alignment.
- 48:39I I remember that one. I'll drop that one in the chat.
- 48:42That one I can definitely find because it's an easy name,
- 48:45right. Eugene, if you have the link to
- 48:48the paper that you've referenced, throw it over.
- 48:50So before we jump folks, I want to get a few cool maybe hot
- 48:57takes. I don't know.
- 48:58We'll see mild takes to her, but I think there's, there's
- 49:04something that we could talk about which has been taking
- 49:08Twitter by storm, right, which is the Colbert model and it
- 49:13feels like these late interaction models.
- 49:16Maybe you, Jen, can you talk to us about what those are and why
- 49:19that's interesting and what what you think the reason for it to
- 49:24become more popular right now is?
- 49:27Yeah, so this this whole bear. Paper and the late interaction
- 49:31model behind it that's that's really interesting and that's
- 49:34catching the eyes be because right now people kind of realise
- 49:39that this paradigm of embedding model plus after retrieval is a
- 49:44perfect thing for like for for retrieving a bunch of like
- 49:49candidates of the final result. But if you add another layer
- 49:54which is called rerun car model on top of this to kind of refine
- 49:58the results and select the very best from the best candidates
- 50:03then you can probably achieve better results.
- 50:06We did some quantifiable analysis on this.
- 50:09Yes you you can improve the like the recall numbers or a all
- 50:16those quality metrics by a few percent.
- 50:19So that's that's that's meaningful difference.
- 50:22However, this Republican model is super expensive.
- 50:26You are probably doing. Something.
- 50:29That you should do you know, offline indexing at online query
- 50:33serving time just because you're using this regular because they
- 50:37they use the cross encoder model which needs to basically just
- 50:42look at the, the, the, the whole query and all the candidate
- 50:46documents rather than just computing the cosine similarity
- 50:50score, which is quite cheap computational wise, right?
- 50:53So to solve this problem, there is this late interaction model
- 50:59being proposed which kind of combines the good things about
- 51:04embedding vector retrieval and this crossing coder rank.
- 51:09It generates a whole set of embeddings from one single query
- 51:14or document and then do the late introduction.
- 51:19By. Computing the, I would say the
- 51:21the similarity score between them at query time.
- 51:25So that's cheaper than regular, but that represents more raw
- 51:29information than the single dense bacterial bag.
- 51:34So I think that's that's a great idea.
- 51:37But again putting it into production that's that's
- 51:40questionable to, I mean at least per se because it it definitely
- 51:47used more like space to encode this information.
- 51:51So that creates a new challenge during the online retrieval
- 51:55time. And moreover like a lot of the
- 51:59efforts from those community has been put on single vector data
- 52:03embedded so that the embedding model is being refined and being
- 52:07like being trained over and over with better data so that it does
- 52:12achieve better performance than the Colbert embedding which has
- 52:16been only trained by the academia community.
- 52:21However, we are seeing like more and more efforts on this.
- 52:24So it's hard to say what will happen in the future.
- 52:26We are looking into this and we are also thinking of we start to
- 52:33think about how to how to integrate this pattern into the
- 52:37vector retrieval facilities that we are building so that in the
- 52:42future this becomes the, I would say a popular choice among
- 52:46developers will have a solution that pairs it.
- 52:49Here's your hot take for this, OK?
- 52:50Forget Colbert. The only Colbert you need to
- 52:52know is Stephen Colbert. What you should really be doing
- 52:55is you should be using Millis's multi vector search with re
- 52:58ranking to produce the same results at the at at a better at
- 53:02a better price. And it's easier.
- 53:04We all love cheaper. That is very, very useful to
- 53:09know. The cheaper the better I think.
- 53:12And that's cool that you all have been inspired and taken
- 53:17that into account. I know we talked a little bit
- 53:20about I I want to take the next like 2 minutes just to shine a
- 53:25light on some of the cool stuff. You all are doing it now this
- 53:28and Zillas because we talked about the pipelines.
- 53:32We also talked about the the Rancour, what other?
- 53:38Features out there I. Know that we said that there's
- 53:41in the pipeline. We've got a few features that
- 53:43are coming out, like the is it sparse embeddings and and a few
- 53:50others, but by this time the reader is coming out.
- 53:57So the either we have just supported the reranked model in
- 54:01the cloud pipelines and for the open source milvus we are about
- 54:07to support the sparse and dense vector hybrid retrieval.
- 54:11I cannot avoid using the word hybrid in the next release.
- 54:17Frank loves it. Frank's like, oh, we got to get
- 54:20a better naming convention around this.
- 54:23Well. Fellas, this has been awesome.
- 54:25I really appreciate you doing this One thing as we end, I
- 54:30would love to ask you a question that I tend to ask when it comes
- 54:36to vector databases. It's not like doesn't really fit
- 54:39into the specific. Is this a specific vector
- 54:43database or like kind of catch all database that has vectors
- 54:48support theme but I do. I was talking to some data
- 54:55engineers two weeks ago from Quantum Black and they were
- 55:00saying how hard it is to make sure that when you put
- 55:05information into a vector database for your rags, how do
- 55:10you ensure that that information, if it gets updated
- 55:15it is the one that is being retrieved when you want to go in
- 55:22ask answer questions O they gave me an example of like an HR
- 55:27policy being updated and now all of a sudden you have less
- 55:30vacation time and so if you have a chat bot that gives the old
- 55:34vacation time, that's not good because then the company all of
- 55:38a sudden is like hey no actually you only have 10 days not 20 and
- 55:44you could get some pissed off employees.
- 55:46So how have you all seen best practises around that?
- 55:51Yeah, it should treat your. Vector database as like a living
- 55:55entity, right? And it may as you as you know
- 55:58create these. And this is one of the great
- 56:00things about what some of the subject has does had Jiang and
- 56:04his team have done, which is as you have, as you you have all
- 56:08these all this data, you have all these embeddings inside your
- 56:11vector database and create these real time sources, these real
- 56:14time syncs and make sure that it's up to date at all times.
- 56:17I know that sounds, I know it's like a really, really simplistic
- 56:20answer, which it is, but I think at the end of the day, that's
- 56:24really. Your vector database you'd want
- 56:28to treat. It almost as other other as you
- 56:31do other databases, as well as a single source of truth for
- 56:35semantic information for semantic representations, and
- 56:38that shouldn't change just because you're only using it
- 56:41just because you want to be able to do.
- 56:42Just because approximates never search is different from the way
- 56:46you typically query other databases.
- 56:48Yeah, see, it all comes down to. Manage the data carefully,
- 56:52carefully crafting the business logic that identify each piece
- 56:55of information. For example, the HR the policy
- 56:59is in some document, then once you update the policy,
- 57:02definitely have updated the document.
- 57:04Then just do like purging and reinserting or better off of the
- 57:10dust, single dating. Or if there's a single piece of
- 57:13text chunk, then just identify the text chunk and then update
- 57:17it. Treehouse use.
- 57:20Triggers. Yeah, yeah, That's.
- 57:22I So that's awesome to think about like for a for that use
- 57:27case. And I think the other one is
- 57:31like a little bit more grey where you're like, OK, we
- 57:34actually want to see how this document has evolved over time.
- 57:38So we don't necessarily want to do a find and replace, but it's
- 57:42100% like what you're saying. Data engineering has been
- 57:47working on these types of problems for a long time.
- 57:50It's typical data, data OPS, database stuff.
- 57:55And it's not like all of a sudden we should forget about
- 57:58all of that, because now we're dealing with vectors, we can
- 58:01still bring some of those best practises into the mix.
- 58:05Yeah, of course. I think that is it.
- 58:09Our time here is sadly coming to an end.
- 58:14I want to give you all a huge thanks and for everyone that
- 58:19joined us virtually, this was super cool.
- 58:21Thank you for all the questions. For anybody out there that is
- 58:25looking for a new piece of cool clothing, I will remind you that
- 58:32we have this I hallucinate more than Chad GP T-shirt.
- 58:36Yeah, it is hot off the press where they're selling like hot
- 58:41cakes. So maybe you can get yourself
- 58:44one by scanning that QR code. Before I end this stream.
- 58:49I'll let all these guys go. This has been awesome.
- 58:52Thank you all.