Add a customer quote component with customer avatar and logo (#2644)

* Add a customer quote component and apply it to three case studies

Customer quotes in case studies are written four different ways -
`> "quote" - Name, Title`, italic text with an italic attribution line,
quoted sentences buried mid-paragraph, or nothing at all. None of them
produce a visually distinct, attributed quote.

The root cause is that the six existing testimonial partials all read
`.Page.Params`, so they only work on landing pages driven by data files.
A case study written in markdown has no way to reach any of them, and
there was no quote shortcode, so authors fell back to raw markdown.

Add a `quote` shortcode with a matching stylesheet. Only `text` and
`name` carry the quote; `role`, `company`, `avatar`, `logo` and
`featured` are all optional and degrade gracefully.

Apply it to one case study per broken convention:

- bayer:       attribution glued onto the end of the quoted sentence,
               where the hyphen before the name collides with the one
               inside the job title. Converts 3 of 12; the rest are a
               mechanical repeat.
- tripadvisor: quote sat at line 57 of 64. Promoted to the lead quote
               and trimmed to a contiguous excerpt, with an ellipsis
               marking the omitted middle. Moved, not duplicated.
- sprinklr:    quote buried mid-paragraph. No avatar exists for this
               speaker, which exercises the graceful degradation.

The stylesheet nests its descendants so every rule carries two classes
of specificity. The article stylesheet targets bare `blockquote`, `p`
and `figcaption` under `.qdrant-post__content`, which otherwise wins
over a single-class selector and re-applies its own card and margins.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Convert Bayer's remaining nine quotes to the quote component

Finishes the conversion started in the previous commit: all twelve quotes
in the article now use the shortcode, and no bare blockquotes remain.

All twelve come from the same speaker with an identical attribution
suffix, so this was a mechanical pass. The repeated attribution is worth
a look in review - twelve cards each carrying the same face, name, role
and Bayer logo may be heavier than it needs to be when the speaker never
changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Slim the repeated attributions in the Bayer case study

Every quote in the article is from the same speaker, so twelve cards each
carrying the same face and Bayer logo was heavier than it needed to be.

The lead quote keeps the full treatment. The other eleven keep name and
role, which still identifies the speaker for a reader who lands partway
down the page, but drops the repeated avatar and logo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Add the Sprinklr logo to the Sprinklr quote

Fills the empty right-hand side of the card. No headshot exists for this
speaker yet, so the avatar slot stays empty until one is supplied.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Restore both customer quotes to their published wording

The Tripadvisor quote had a sentence cut out of it and replaced with an
ellipsis, and the Sprinklr quote had its trailing comma changed to a
period once it stood on its own. Neither was ours to decide. Both now
match the published text exactly.

Audited all 14 quotes on this branch against master, comparing words and
punctuation. The twelve Bayer quotes were already verbatim.

Two changes to attribution remain, since they are formatting rather than
the speaker's words, but are worth a look in review:

- Bayer's title renders as "Senior Director AI/ML, Precision Medicine &
  Insights" instead of the original hyphen, which was what collided with
  the dash before his name.
- Tripadvisor's attribution used to link to Rahul Todkar's LinkedIn. The
  component has no link support, so that link is now only in the body.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Drop the trailing comma from the Sprinklr quote

The comma joined the quotation to "explains Sonavane" in the original
sentence. Standing on its own in a block, it reads as an unfinished
sentence, so the quote ends in a period.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Restore the two attribution details lost in the conversion

Add a `name_url` param so a speaker's name can link to their profile, and
use it to restore the link to Rahul Todkar's LinkedIn that the original
Tripadvisor attribution carried.

Put back the hyphen inside Hooman Sedghamiz's job title. It was changed
to a comma because the original line ran two hyphens together - one
separating the quote from the speaker, one inside the title itself - and
they were indistinguishable. The component gives the speaker its own row,
so the first hyphen is gone and the one in the title reads clearly again.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Lift the remaining standalone Sprinklr quotes into the component

Four more were buried in prose: one closing a paragraph, one opening
another, one mid-paragraph, and one sitting as its own line. All are now
quote cards, and the logo moved to whichever card comes first on the page.

Words are verbatim. The only change is the trailing comma that joined each
quote to "says Sonavane", which belongs to our sentence rather than to the
speaker and goes with it.

Three quotes inside the "Why Qdrant?" bullet list are deliberately left
alone - lifting those would restructure the list, which is a layout call.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Put the "key challenge" quote back into the prose

It states the problem Sprinklr had, not anything about Qdrant, so on its
own in a card it reads as context-free. It did its job as the setup
sentence it was written to be. Restored exactly as published, original
comma included.

Sprinklr keeps the four quotes that stand on their own.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Reformat the benchmark code block in the Sprinklr case study

Every record was split across two lines with a blank line between them and
nothing was indented, so the block rendered as a wall of fragments. Each
record is now one indented line.

The fence was tagged json while the contents are Python - a `data = [...]`
assignment with single-quoted keys - so nothing was highlighted. Corrected
to python.

The records were parsed and re-emitted rather than retyped, and the values
were compared before and after, so the data is unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Stop repeating the company name next to its logo

A card showing the Bayer logo read "Senior Director AI/ML - Precision
Medicine & Insights, Bayer" right beside it. The logo already says which
company it is.

The name is hidden with CSS rather than dropped from the template, because
the logo is hidden below the md breakpoint and the company name has to
carry that job again on narrow screens.

Cards with no logo are unchanged and still name the company.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Give the two strongest Bayer quotes the visual weight

All twelve quotes stay as cards. The article was written with twelve pull
quotes and that structure is the author's, not ours to rewrite. What
changes is which ones carry the face and logo, and where two of them sit.

The omnimodal quote becomes the lead. It is the strongest thing in the
piece - a senior director at a 116,000 person company saying vector
databases outgrew RAG, and that "no one had" an omnimodal search engine
until this one. We could not make that claim ourselves.

The 20% efficiency quote gains the face and logo where it already sits. It
is the only quantified outcome spoken rather than reported, and a number
is worth more in the customer's voice than in ours.

The grounding quote that used to lead moves into the agents section, after
the paragraph introducing deep agents - "if you remove the search from the
agent" is what that section is about. It becomes a light card.

Also restores the blank line after seven cards that were glued to the
paragraph following them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Highlight the grounding quote instead of the 20% one

"20% efficiency" has no denominator - efficiency of what, measured how -
and it ends on "it wouldn't be possible without the components", which
does not say which components. It stays as a card, just not a highlighted
one.

The grounding quote takes the second face and logo. "If you remove the
search from the agent, the results go back to two years ago" is the most
concrete line in the piece, and it complements the lead rather than
repeating it: one says what Qdrant became, the other what breaks without
it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Set the lead quote at the same size as the others

The lead quote was 24px against 20px elsewhere, which made Tripadvisor's
long quote a wall of text. Position, the face and the logo already mark it
out. Drops the mobile override that only existed to scale the 24px back
down.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Apply the designer's type settings to the quote text

font-size 1.125rem, line-height 1.65rem, margin-bottom 1.5rem.

The margin needed the rule nested a level deeper to take effect. The
article stylesheet sets `blockquote p:last-child { margin-bottom: 0 }`,
which outranked the flat selector, so the spacing was being dropped.

Removes the narrow-screen override, which set the same 18px the designer
asked for and differed only in line-height.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kumar Shivendu
2026-08-20 15:24:31 +05:30
committed by GitHub
co-authored by Claude Opus 5
parent 352a51ecb4
commit eff51a142b
7 changed files with 310 additions and 55 deletions
+66 -13
View File
@@ -27,7 +27,14 @@ Bayer is a global life sciences company operating at the intersection of two of
Turning that ambition into production systems for 116,000 employees is a hard infrastructure problem. It requires retrieval that stays fast under sustained load, grounds large language models (LLMs) in real data to suppress hallucinations, satisfies strict life sciences compliance requirements, and adapts as the underlying AI workloads shift from simple chatbots to autonomous agents. This is the story of how Bayer built that foundation, and why Qdrant has sat at the center of it for nearly three years.
> "If you don't have a Qdrant vector store behind the scenes, it's very difficult to ground LLMs into reality. If you remove the search from the agent, the results go back to two years ago." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="People used to look at vector databases only for RAG applications. Now they're solving enterprise search problems. No one had an omnimodal search engine where you could search videos, audio, and every asset the company generates. We realized Qdrant was turning into that."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer"
avatar="/img/customers/hooman-sedghamiz.svg"
logo="/img/brands/bayer.svg"
featured="true" >}}
## A Platform Born Weeks After ChatGPT
@@ -37,7 +44,11 @@ Bayer moved quickly. Within three months, Sedghamiz's team stood up myGenAssist,
From there, it scaled into a full platform layer. Today, myGenAssist serves the entire company, processes over 1.5 million messages a month, and has ingested more than 450,000 uploaded documents, all while keeping the complexity of RAG hidden from the end user.
> "The whole stack of RAG is hidden from users. For them it's just a file upload, but it ends up going through several layers of retrieval-augmented generation, Qdrant being part of it. That has proven to be quite successful to bring grounding and reduce hallucinations for LLM applications." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="The whole stack of RAG is hidden from users. For them it's just a file upload, but it ends up going through several layers of retrieval-augmented generation, Qdrant being part of it. That has proven to be quite successful to bring grounding and reduce hallucinations for LLM applications."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
## Choosing a Vector Search Engine, Three Years Ago
@@ -45,7 +56,11 @@ Three years ago, Bayer evaluated vector search. The company's first prototype, M
The team evaluated across several dimensions: price-performance ratio, latency, and openness. Qdrant was open source, which meant the team could test it fast without procurement friction. Latency was strong. And it was written in Rust, a signal of the memory efficiency and predictable performance that life sciences workloads would later demand.
> "There weren't many options back then. We did benchmarking across price-performance, latency, and other aspects. The first points we really liked: it was open source, we could test it very fast, latency was good, and it was written in Rust. We ended up going with Qdrant." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="There weren't many options back then. We did benchmarking across price-performance, latency, and other aspects. The first points we really liked: it was open source, we could test it very fast, latency was good, and it was written in Rust. We ended up going with Qdrant."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
## From Self-Hosted to Hybrid Cloud: Meeting Compliance Without Drowning in Ops
@@ -55,7 +70,11 @@ Pure self-hosting satisfied the compliance side but became demanding for a team
![Timeline of Bayer's path from a Redis prototype through benchmarking and self-hosted Qdrant to the current Qdrant Hybrid Cloud deployment, with the scale, infrastructure, and compliance pressures that drove each step](/blog/case-study-bayer/bayer-qdrant-timeline.png)
> "Life science companies want data to stay inside and use the platform self-hosted if possible. But self-hosting was already quite demanding for us. Our team is not that big, so we decided to use hybrid management." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="Life science companies want data to stay inside and use the platform self-hosted if possible. But self-hosting was already quite demanding for us. Our team is not that big, so we decided to use hybrid management."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
## Scaling to Millions of Messages and an Evolving Data Model
@@ -65,7 +84,11 @@ Much of the operational strain has come not from Qdrant itself but from the surr
The data model itself is also expanding. Bayer is migrating toward an omnimodal approach, driven by the reality of life sciences data: medical images, X-rays, CT scans, and molecular databases sit alongside text. With embedding models that handle multiple modalities, the team can now treat search as a problem across all enterprise assets, not just documents.
> "For every enterprise, it's very important to be able to find assets no matter what format they're in: images, text, a molecular image, anything. We've started looking at these not just for simple RAG applications, but to let people search across all the assets they're dealing with." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="For every enterprise, it's very important to be able to find assets no matter what format they're in: images, text, a molecular image, anything. We've started looking at these not just for simple RAG applications, but to let people search across all the assets they're dealing with."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
The omnimodal pipeline is concrete, not aspirational. When a scientific PDF enters the system, a vision model generates search-optimized descriptions of every figure (content summary, OCR'd labels, key concepts) and injects them into the text stream before chunking.
@@ -77,7 +100,11 @@ For the people querying the platform, two things matter most. The first is laten
The second is retrieval quality. Grounded, high-quality answers are what keep users satisfied and drive measurable productivity gains. Hallucinations do the opposite. This is where [hybrid search](https://qdrant.tech/documentation/concepts/hybrid-queries/) became decisive. Two years ago, semantic search alone was not enough. The combination of keyword and semantic retrieval in a single query proved far more capable, and it is now central to how Bayer's agents find relevant context.
> "You want your retrieval to be very fast. A low-latency platform helps the user experience a lot. And the second point is the quality of retrieval inside that latency. It's important that your vector search supports hybrid search, for example. That's great." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="You want your retrieval to be very fast. A low-latency platform helps the user experience a lot. And the second point is the quality of retrieval inside that latency. It's important that your vector search supports hybrid search, for example. That's great."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
![Qdrant as enterprise retrieval backbone: four layers from 116K employees through the deep agent harness to Qdrant Hybrid Cloud and GxP-ready observability](/blog/case-study-bayer/qdrant-enterprise-retrieval-backbone.png)
@@ -85,18 +112,28 @@ The second is retrieval quality. Grounded, high-quality answers are what keep us
The most significant shift in Bayer's architecture is the move from chatbot-style interactions to deep agents. Bayer now runs agentic applications on a LangGraph-based harness, comparable to the deep research and coding agents that have become common, and these agents are far hungrier for search than the simpler systems that preceded them. A single deep research run unrolls a long tool-calling loop, hundreds of steps deep, and can fire thousands of retrieval queries before it returns, which makes per-query latency matter even more than it did before. Every one of those tools, from web search to PubMed to the FDA connector, is itself backed by a Qdrant collection.
{{< quote
text="If you don't have a Qdrant vector store behind the scenes, it's very difficult to ground LLMs into reality. If you remove the search from the agent, the results go back to two years ago."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer"
avatar="/img/customers/hooman-sedghamiz.svg"
logo="/img/brands/bayer.svg" >}}
Crucially, Bayer exposes the Qdrant API directly to the model. Whether the requester is a human or an agent, the same interface is available, and the agent can choose how to retrieve based on the task. This is exactly the composable model Qdrant is designed for: retrieval primitives the caller combines at query time, rather than a fixed pipeline hidden behind an opaque API. Under the hood, the hybrid path runs dense and sparse queries in parallel and fuses them with Reciprocal Rank Fusion before a BGE reranker sharpens the final ordering. The agent sees a clean set of tools, not that machinery.
![Flow diagram of Bayer's composable retrieval: a deep agent chooses keyword, semantic, or hybrid search through the Qdrant API across four collections, returning grounded answers from roughly 135M points on four nodes](/blog/case-study-bayer/composable-retrieval-agents.png)
A feature Bayer calls knowledge bases makes this concrete. Users start a project, drop in folders of data in any format, and the agent works against that data much like a coding agent works against a file system. Bayer extended the agent's command set so that when keyword search fails, it can escalate to semantic or hybrid search through the Qdrant API. It can also fan a single question into several reformulations (keywords, a question form, a hypothetical answer) and search them at once. The agent decides which retrieval strategy fits the moment.
> "This is very powerful because the agent now decides: I didn't find anything with keyword search, so I can switch to semantic search, or I can use hybrid search that the API exposes to me. Two years ago, semantic search alone wasn't enough. Now with hybrid search it's way more powerful." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="This is very powerful because the agent now decides: I didn't find anything with keyword search, so I can switch to semantic search, or I can use hybrid search that the API exposes to me. Two years ago, semantic search alone wasn't enough. Now with hybrid search it's way more powerful."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
This is also where the omnimodal direction pays off. Users upload meeting transcripts, images, audio, and video, and the agent discovers and connects them. Qdrant increasingly serves as the agent's memory, letting it recall what a user has been working on and tailor answers accordingly. Teams elsewhere in the company can point their own applications at a shared collection to build their own search experiences, from molecule search to internal enterprise search.
> "People used to look at vector databases only for RAG applications. Now they're solving enterprise search problems. No one had an omnimodal search engine where you could search videos, audio, and every asset the company generates. We realized Qdrant was turning into that." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
Retrieval quality benefits from a parallel query expansion strategy. A single user question generates four Qdrant searches simultaneously: the verbatim query, a question-form rewrite, extracted keywords, and a HYDE hypothetical answer. Results are fused, deduplicated with a diversity cap of three chunks per document, and optionally reranked. The approach is particularly effective for pharmaceutical literature, where the same concept appears under different nomenclatures across regulatory filings, clinical protocols, and marketing materials.
Document parsing itself is agentic. Rather than pre-processing every upload through expensive OCR, the platform defers extraction until the agent actually needs a document's content. A lightweight sandbox-local parser handles simple formats instantly; complex PDFs with tables and figures fall through to server-side Docling OCR on demand. Results are cached and indexed into Qdrant on first use. With 450,000 documents uploaded and most never read beyond their metadata, this lazy parsing strategy cuts compute costs by roughly 80 percent compared to eager processing. This agentic parsing pipeline (the tiered extraction, the lazy on-demand OCR, and the path that turns a raw upload into Qdrant-indexed content the moment an agent reaches for it) was built by Balkrushn Hirani, myGenAssist's backend developer lead.
@@ -155,7 +192,11 @@ Bayer measures impact through KPI surveys run every six months across two user g
The team is careful not to over-attribute. It does not isolate which component drives which fraction of the gain. But the connection to retrieval is direct: a large part of the efficiency comes from getting grounded responses, and grounding is impossible without the vector store underneath. Hallucinated answers tank survey scores; grounded answers lift them.
> "We've seen 20% efficiency when it comes to using AI platforms. A big part of that gain is that you have to get results from AI that are grounded. If you get hallucinations, people are not satisfied. It wouldn't be possible without the components." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="We've seen 20% efficiency when it comes to using AI platforms. A big part of that gain is that you have to get results from AI that are grounded. If you get hallucinations, people are not satisfied. It wouldn't be possible without the components."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
With the recent shift to more autonomous agents, the measurement problem itself is evolving. Earlier chatbot-style systems delivered incremental time savings: a faster email summary, a quicker draft. The new agents can run for 10 to 15 minutes unattended and return a completed task: research done, document written, a notification sent to the user's phone. That changes the question from "how much time did we save" to "how well was the whole task done," a harder thing to quantify but a larger prize.
@@ -175,7 +216,11 @@ Traceability extends beyond user-facing citations into the infrastructure itself
The Bayer team actively tracks Qdrant releases and adopts performance features as they ship. It uses incremental HNSW indexing to absorb the constant stream of document updates without full reindexing. It adopted binary quantization to compact points and reduce the memory footprint shortly after release. One engineer recently went through the latest Qdrant publications to update the team's search strategy and apply current optimizations.
> "Qdrant is one of the more feature-rich platforms where you can do all those things directly inside the vector store. We always try to be on top of the features you push out to reduce the memory footprint and the latency." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="Qdrant is one of the more feature-rich platforms where you can do all those things directly inside the vector store. We always try to be on top of the features you push out to reduce the memory footprint and the latency."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
This matters to Bayer because it reduces the gap between a published optimization and a deployed one. When Qdrant ships something like improved compression, Bayer can fold it into a live, compliance-bound, enterprise-scale platform without re-architecting.
@@ -183,7 +228,11 @@ This matters to Bayer because it reduces the gap between a published optimizatio
Bayer's experience drove an architectural conviction to focus on retrieval rather than agent orchestration. Even when Bayer ships an end-to-end agent that handles everything, its users still prefer access to the underlying pieces. Developers building on the platform's API want lower-level components they can inspect and optimize, not an opaque pipeline they have to trust blindly.
> "People still prefer to have access to these pieces themselves, like Qdrant. It's very important to give developers a platform that's composable, where they can optimize each part and build their own workflows. Not all agentic pipelines are applicable to all use cases." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="People still prefer to have access to these pieces themselves, like Qdrant. It's very important to give developers a platform that's composable, where they can optimize each part and build their own workflows. Not all agentic pipelines are applicable to all use cases."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
That preference is sharpened by the proliferation of hyperscaler agent frameworks. With Google, AWS, and Azure each pushing their own solutions, teams struggle to manage and optimize systems they cannot see into. A composable engine that exposes its retrieval primitives lets engineers build pipelines tuned to their specific workload, rather than accepting opaque defaults.
@@ -195,4 +244,8 @@ Bayer's roadmap continues to push on the dimensions that drew it to Qdrant in th
Bayer started with a Redis prototype and a thousand users. Three years later, it runs a compliance-bound, Hybrid Cloud deployment serving 116,000 employees, processing millions of messages a month, grounding autonomous agents, and increasingly searching across every modality the company produces. Qdrant has been the constant underneath that evolution: the retrieval layer that keeps answers grounded, the API the agents call directly, and the composable foundation that has adapted as Bayer's AI workloads shifted from chatbots to agents.
> "We're turning into the AI search engine for the company. There are various applications for a vector database even beyond simple RAG, beyond the chatbot. It supports memory for the agent, it powers enterprise search, and it lets any team build their own multimodal search engine on top." - Hooman Sedghamiz, Senior Director AI/ML - Precision Medicine & Insights, Bayer
{{< quote
text="We're turning into the AI search engine for the company. There are various applications for a vector database even beyond simple RAG, beyond the chatbot. It supports memory for the agent, it powers enterprise search, and it lets any team build their own multimodal search engine on top."
name="Hooman Sedghamiz"
role="Senior Director AI/ML - Precision Medicine & Insights"
company="Bayer" >}}
@@ -29,7 +29,14 @@ Raghav Sonavane, Associate Director of Machine Learning Engineering at Sprinklr,
*Figure:* Sprinklr’s RAG architecture
Sprinklr’s platform is composed of four key product suites - Sprinklr Service, Sprinklr Marketing, Sprinklr Social, and Sprinklr Insights. Each suite is embedded with AI-first features such as assist agents, post-call analysis, and real-time analytics, which are crucial for managing large-scale contact center operations. “These AI-driven capabilities, supported by Qdrant’s advanced vector search, enhance Sprinklr’s customer-facing tools such as FAQ bots, transactional bots, conversational services, and product recommendation engines,” says Sonavane.
Sprinklr’s platform is composed of four key product suites - Sprinklr Service, Sprinklr Marketing, Sprinklr Social, and Sprinklr Insights. Each suite is embedded with AI-first features such as assist agents, post-call analysis, and real-time analytics, which are crucial for managing large-scale contact center operations.
{{< quote
text="These AI-driven capabilities, supported by Qdrant’s advanced vector search, enhance Sprinklr’s customer-facing tools such as FAQ bots, transactional bots, conversational services, and product recommendation engines."
name="Raghav Sonavane"
role="Associate Director of Machine Learning Engineering"
company="Sprinklr"
logo="/img/customer-logo/sprinklr.svg" >}}
These self-serve applications rely heavily on advanced vector search to analyze and optimize community content and refine knowledge bases, ensuring efficient and relevant responses. For customers requiring further assistance, Sprinklr equips support agents with powerful search capabilities, enabling them to quickly access similar cases and draw from past interactions, enhancing the quality and speed of customer support.
@@ -56,9 +63,21 @@ After evaluating several options of vector DBs, including Pinecone, Weaviate, an
Sprinklr’s transition to Qdrant was carefully managed, starting with 10% of their workloads before gradually scaling up. The transition was seamless, thanks in part to Qdrant’s configurable [Web UI](https://qdrant.tech/documentation/interfaces/web-ui/), which allowed Sprinklr to fully utilize its capabilities within the existing infrastructure.
“Qdrant’s ability to index [multiple vectors](https://qdrant.tech/documentation/manage-data/vectors/#multivectors) simultaneously and retrieve and re-rank with precision brought significant improvements to our workflow,” Sonavane remarks. This feature reduced the need for repeated retrieval processes, significantly improving efficiency. Additionally, Qdrant’s [quantization](https://qdrant.tech/documentation/manage-data/quantization/) and [memory mapping](https://qdrant.tech/documentation/manage-data/storage/#configuring-memmap-storage) features enabled Sprinklr to reduce RAM usage, leading to substantial cost savings.
{{< quote
text="Qdrant’s ability to index [multiple vectors](https://qdrant.tech/documentation/manage-data/vectors/#multivectors) simultaneously and retrieve and re-rank with precision brought significant improvements to our workflow."
name="Raghav Sonavane"
role="Associate Director of Machine Learning Engineering"
company="Sprinklr" >}}
Qdrant now plays a key supportive role in enhancing Sprinklr’s vector search capabilities within its AI-driven applications, which is designed to be cloud- and LLM-agnostic. The platform supports various AI-driven tasks, from retrieval and re-ranking to serving advanced customer experiences. “Retrieval is the foundation of all our AI tasks, and Qdrant’s resilience and speed have made it an integral part of our system,” Sonavane emphasizes. Sprinklr operates [Qdrant as a managed service on AWS](https://qdrant.tech/cloud/), ensuring scalability, reliability, and ease of use.
This feature reduced the need for repeated retrieval processes, significantly improving efficiency. Additionally, Qdrant’s [quantization](https://qdrant.tech/documentation/manage-data/quantization/) and [memory mapping](https://qdrant.tech/documentation/manage-data/storage/#configuring-memmap-storage) features enabled Sprinklr to reduce RAM usage, leading to substantial cost savings.
Qdrant now plays a key supportive role in enhancing Sprinklr’s vector search capabilities within its AI-driven applications, which is designed to be cloud- and LLM-agnostic. The platform supports various AI-driven tasks, from retrieval and re-ranking to serving advanced customer experiences. Sprinklr operates [Qdrant as a managed service on AWS](https://qdrant.tech/cloud/), ensuring scalability, reliability, and ease of use.
{{< quote
text="Retrieval is the foundation of all our AI tasks, and Qdrant’s resilience and speed have made it an integral part of our system."
name="Raghav Sonavane"
role="Associate Director of Machine Learning Engineering"
company="Sprinklr" >}}
### Key Outcomes with Qdrant
@@ -73,7 +92,11 @@ The Sprinklr team conducted a thorough internal benchmark on applications requir
- **Low Latency for Real-Time Applications:** In Sprinklr's benchmark, Qdrant delivered a P99 latency of 20ms for searches on 1 million vectors, making it ideal for real-time use cases like live chat, where Elasticsearch and Milvus both exceeded 100ms.
- **High Throughput for Heavy Query Loads**: In Sprinklr's benchmark, Qdrant handled up to 250 requests per second (RPS) under similar configurations, significantly outperforming Elasticsearch's 100 RPS, making it ideal for environments with heavy query loads.
“Qdrant is a very fast and high quality retrieval system,” Sonavane points out.
{{< quote
text="Qdrant is a very fast and high quality retrieval system."
name="Raghav Sonavane"
role="Associate Director of Machine Learning Engineering"
company="Sprinklr" >}}
![case-study-sprinklr-3](/blog/case-study-sprinklr/image3.png)
@@ -111,40 +134,15 @@ Key Observations:
![case-study-sprinklr-8](/blog/case-study-sprinklr/image8.png)
```json
```python
data = [
{'system': 'Qdrant', 'index_size': '1,000', 'MAP': 0.98, 'P95 Time': 0.22, 'Mean Time': 0.1, 'QPS': 280,
'Upload Time': 1},
{'system': 'Qdrant', 'index_size': '10,000', 'MAP': 0.99, 'P95 Time': 0.16, 'Mean Time': 0.09, 'QPS': 330,
'Upload Time': 5},
{'system': 'Qdrant', 'index_size': '100,000', 'MAP': 0.98, 'P95 Time': 0.3, 'Mean Time': 0.23, 'QPS': 145,
'Upload Time': 100},
{'system': 'Qdrant', 'index_size': '1,000,000', 'MAP': 0.99, 'P95 Time': 0.171, 'Mean Time': 0.162, 'QPS': 596,
'Upload Time': 220},
{'system': 'ElasticSearch', 'index_size': '1,000', 'MAP': 0.99, 'P95 Time': 0.42, 'Mean Time': 0.32, 'QPS': 95,
'Upload Time': 10},
{'system': 'ElasticSearch', 'index_size': '10,000', 'MAP': 0.98, 'P95 Time': 0.3, 'Mean Time': 0.24, 'QPS': 120,
'Upload Time': 50},
{'system': 'ElasticSearch', 'index_size': '100,000', 'MAP': 0.99, 'P95 Time': 0.48, 'Mean Time': 0.42, 'QPS': 80,
'Upload Time': 1100},
{'system': 'ElasticSearch', 'index_size': '1,000,000', 'MAP': 0.99, 'P95 Time': 0.37, 'Mean Time': 0.236,
'QPS': 348, 'Upload Time': 1150}
{'system': 'Qdrant', 'index_size': '1,000', 'MAP': 0.98, 'P95 Time': 0.22, 'Mean Time': 0.1, 'QPS': 280, 'Upload Time': 1},
{'system': 'Qdrant', 'index_size': '10,000', 'MAP': 0.99, 'P95 Time': 0.16, 'Mean Time': 0.09, 'QPS': 330, 'Upload Time': 5},
{'system': 'Qdrant', 'index_size': '100,000', 'MAP': 0.98, 'P95 Time': 0.3, 'Mean Time': 0.23, 'QPS': 145, 'Upload Time': 100},
{'system': 'Qdrant', 'index_size': '1,000,000', 'MAP': 0.99, 'P95 Time': 0.171, 'Mean Time': 0.162, 'QPS': 596, 'Upload Time': 220},
{'system': 'ElasticSearch', 'index_size': '1,000', 'MAP': 0.99, 'P95 Time': 0.42, 'Mean Time': 0.32, 'QPS': 95, 'Upload Time': 10},
{'system': 'ElasticSearch', 'index_size': '10,000', 'MAP': 0.98, 'P95 Time': 0.3, 'Mean Time': 0.24, 'QPS': 120, 'Upload Time': 50},
{'system': 'ElasticSearch', 'index_size': '100,000', 'MAP': 0.99, 'P95 Time': 0.48, 'Mean Time': 0.42, 'QPS': 80, 'Upload Time': 1100},
{'system': 'ElasticSearch', 'index_size': '1,000,000', 'MAP': 0.99, 'P95 Time': 0.37, 'Mean Time': 0.236, 'QPS': 348, 'Upload Time': 1150},
]
```
@@ -22,6 +22,16 @@ partition: case-studies
![How Tripadvisor Drives 2–3x More Revenue with Qdrant-Powered AI](/blog/case-study-tripadvisor/case-study-tripadvisor-summary-dark.jpg)
{{< quote
text="Qdrant has been crucial for our transformation. When you're dealing with over a billion plus user-generated, multi-modal pieces of content from hundreds of millions of monthly active users across 21 countries, 11M businesses and all the complex user interactions that come with it, you need a way to bring it all together. Now, we can represent everything from hotel preferences to restaurant choices to user behavior in a unified way. And we’re seeing real business results. Users engaging with our AI-powered features like trip planning are showing 2-3x more revenue."
name="Rahul Todkar"
name_url="https://www.linkedin.com/in/rahultodkar"
role="Head of Data and AI"
company="Tripadvisor"
avatar="/img/customers/rahul-todkar.svg"
logo="/img/brands/tripadvisor.svg"
featured="true" >}}
Tripadvisor, the world’s largest travel guidance platform, is undergoing a deep transformation. With hundreds of millions of monthly users and over a billion reviews and contributions, it holds one of the richest datasets in the travel industry. And until recently, that data, particularly its unstructured content, had incredible untapped potential. Now, with the rise of generative AI and the adoption of tools like Qdrant’s vector database, Tripadvisor is unlocking its full potential to deliver intelligent, personalized, and high-impact travel experiences.
## Activating Billions of Data Assets
@@ -54,10 +64,6 @@ The team is using Qdrant to build a **user graph**, a multidimensional represent
And unlike traditional databases, Qdrant is built for **real-time, unstructured data**, making it ideal for powering conversational AI, search augmentation, and recommendation engines.
*“Qdrant has been crucial for our transformation. When you're dealing with over a billion plus user-generated, multi-modal pieces of content from hundreds of millions of monthly active users across 21 countries, 11M businesses and all the complex user interactions that come with it, you need a way to bring it all together. Now, we can represent everything from hotel preferences to restaurant choices to user behavior in a unified way. And we’re seeing real business results. Users engaging with our AI-powered features like trip planning are showing 2-3x more revenue.”*
[*Rahul Todkar*](https://www.linkedin.com/in/rahultodkar) *\- Head of Data and AI*
## What’s Next
With Qdrant as a foundational layer, Tripadvisor is only just beginning to tap into the power of its data. The team is already exploring new use cases and looking to deepen its integration of vector search across every stage of the customer journey. And as interest grows in shared learnings and industry best practices, Tripadvisor is also helping shape how other companies apply AI in the real world.
@@ -7,6 +7,7 @@
@import 'partials/pagination';
@import 'partials/newsletter';
@import 'partials/qdrant-post';
@import 'partials/customer-quote';
@import 'partials/qdrant-articles-hero';
@import 'partials/qdrant-articles-posts';
@import 'partials/carousel';
@@ -32,6 +32,7 @@
@import 'partials/pagination';
@import 'partials/newsletter';
@import 'partials/qdrant-post';
@import 'partials/customer-quote';
@import 'partials/carousel';
@import 'partials/leadership';
@import 'partials/open-roles';
@@ -0,0 +1,117 @@
@use '../helpers/functions' as *;
// Descendants are nested (rather than written with `&__`) so each rule carries
// two classes of specificity. The article stylesheet styles bare elements via
// `.qdrant-post__content blockquote / p / figcaption`, which would otherwise
// win over a single-class selector and re-apply its own card and margins.
.customer-quote {
margin: $spacer * 3 0;
padding: pxToRem(32) pxToRem(40);
border-radius: $spacer * 0.5;
background: linear-gradient(180deg, $neutral-20 0%, #0e1424 100%);
.customer-quote__quote {
margin: 0;
padding: 0;
background: none;
border-radius: 0;
// Nested one level deeper than the other rules so this beats the article
// stylesheet's `blockquote p:last-child { margin-bottom: 0 }`.
.customer-quote__text {
margin-bottom: 1.5rem;
font-size: 1.125rem;
line-height: 1.65rem;
text-align: left;
color: $neutral-98;
a {
color: $neutral-98;
text-decoration: underline;
}
}
}
.customer-quote__attribution {
display: flex;
align-items: center;
gap: $spacer;
text-align: left;
}
.customer-quote__avatar {
flex-shrink: 0;
width: pxToRem(48);
height: pxToRem(48);
margin: 0;
border-radius: 50%;
object-fit: cover;
}
.customer-quote__meta {
min-width: 0;
text-align: left;
}
// text-align is set on each <p> rather than inherited from __meta: the
// article stylesheet centers figcaption paragraphs directly, so inheritance
// never reaches them.
.customer-quote__name {
margin: 0;
font-size: pxToRem(16);
line-height: pxToRem(24);
text-align: left;
color: $neutral-94;
a {
color: inherit;
text-decoration: underline;
text-decoration-color: $neutral-50;
&:hover {
text-decoration-color: $neutral-94;
}
}
}
.customer-quote__role {
margin: 0;
font-size: pxToRem(14);
line-height: pxToRem(21);
text-align: left;
color: $neutral-60;
}
// The logo already says which company this is.
&.customer-quote_has-logo .customer-quote__company {
display: none;
}
.customer-quote__logo {
flex-shrink: 0;
margin: 0 0 0 auto;
max-width: pxToRem(120);
max-height: pxToRem(32);
// Company logos are authored for light backgrounds; this card is dark.
filter: brightness(0) invert(1);
opacity: 0.75;
}
// Lead quote: sits directly under the hero, before the article body.
&.customer-quote_featured {
margin-top: 0;
}
@include media-breakpoint-down(md) {
padding: pxToRem(24);
.customer-quote__logo {
display: none;
}
// No logo at this width, so the company name has to carry it again.
&.customer-quote_has-logo .customer-quote__company {
display: inline;
}
}
}
@@ -0,0 +1,79 @@
{{- /*
Customer quote block for case studies and blog posts.
Usage:
{{< quote
text="Qdrant has been crucial for our transformation."
name="Rahul Todkar"
name_url="https://www.linkedin.com/in/rahultodkar"
role="Head of Data and AI"
company="Tripadvisor"
avatar="/img/customers/rahul-todkar.svg"
logo="/img/brands/tripadvisor.svg"
featured="true" >}}
Only `text` and `name` carry the quote; every other param degrades
gracefully, so a quote with no avatar or logo still renders correctly.
`featured="true"` is the lead quote that sits above the article body.
`text` is rendered as markdown, so inline links work:
text="See our [docs](https://qdrant.tech/documentation/) for details."
Use `&quot;` for a literal double quote inside `text`.
*/ -}}
{{- $page := .Page -}}
{{- $text := .Get "text" | default "" -}}
{{- $name := .Get "name" -}}
{{- $nameURL := .Get "name_url" -}}
{{- $role := .Get "role" -}}
{{- $company := .Get "company" -}}
{{- $avatar := .Get "avatar" -}}
{{- $logo := .Get "logo" -}}
{{- $featured := eq (.Get "featured" | default "false") "true" -}}
{{- if not $text -}}
{{- errorf "quote shortcode in %q needs a `text` param" $page.Path -}}
{{- end -}}
{{- /* The company name is redundant next to the logo, so it is hidden when
one is shown. It is marked up rather than dropped because the logo is
hidden on narrow screens, where the name has to come back. */ -}}
<figure class="customer-quote
{{- if $featured }} customer-quote_featured{{ end }}
{{- if $logo }} customer-quote_has-logo{{ end }}">
<blockquote class="customer-quote__quote">
<p class="customer-quote__text">{{ $page.RenderString (trim $text "\n ") }}</p>
</blockquote>
{{- if $name }}
<figcaption class="customer-quote__attribution">
{{- with $avatar }}
<img
class="customer-quote__avatar"
src="{{ . }}"
alt="{{ $name }}"
width="48"
height="48"
loading="lazy"
/>
{{- end }}
<div class="customer-quote__meta">
<p class="customer-quote__name">
{{- with $nameURL }}<a href="{{ . }}">{{ $name }}</a>{{ else }}{{ $name }}{{ end -}}
</p>
{{- if or $role $company }}
<p class="customer-quote__role">
{{- $role -}}
{{- with $company -}}
<span class="customer-quote__company">{{ if $role }}, {{ end }}{{ . }}</span>
{{- end -}}
</p>
{{- end }}
</div>
{{- with $logo }}
<img class="customer-quote__logo" src="{{ . }}" alt="" loading="lazy" />
{{- end }}
</figcaption>
{{- end }}
</figure>