Search what the agent said.
Join it to what happened.

Your stack already records product events, metrics, logs, and traces. Agent runs add prompts, responses, and tool arguments alongside trace ids, model, latency, tokens, and status. Infino searches that content with BM25 and vectors, then joins it to surrounding telemetry in SQL. The indexes stay inside standard Parquet, so the rest of your stack keeps reading the same data.

existing telemetry events · metrics logs · traces agent runs prompts · tools · replies hybrid SQL · join on shared ids OBJECT STORAGE telemetry.sf.parquet agent_turns.sf.parquet

cat TELEMETRY.md

Existing telemetry already spans numbers and text

Product and infrastructure systems already emit several kinds of records.

  • Product analytics. Clicks, page views, funnel steps, timestamps, categorical properties, and numeric measures, keyed by visitor, user, or account id.
  • Infrastructure telemetry. Numeric metrics, text or JSON logs, and traces made of spans and attributes.
  • Shared keys connect them: trace id, session id, visitor id, user id, or account id.

cat AGENT_TEXT.md

What agent runs add

An agent turn combines searchable content with structured execution fields.

  • Prompts, replies, tool arguments, and tool output are long-form content.
  • Model, status, latency, token counts, trace id, session id, and user or account id remain ordinary columns.
  • The questions are search questions: find, rank, then count. “How many conversations last week were about refunds, including the ones that never said the word refund.”
  • A LIKE '%refund%' scan misses paraphrases and does not rank the matching turns.

cat TOOLS.md

Where Infino fits

Keep the systems that collect telemetry, run evals, and serve BI. Infino adds ranked retrieval over agent content and SQL joins to the records around it.

  • Observability and eval tools collect metrics, logs, traces, and run scores.
  • The warehouse keeps BI, product analytics, and governance.
  • Infino searches prompts, replies, and tool content with keyword and vector retrieval, then joins the matches to Parquet event or trace tables in SQL. Existing tools keep reading the same columns.

cat QUESTIONS.md

Questions across agent content and telemetry

Retrieve the matching turns, then count or join them to product and infrastructure records.

  • How many conversations in the last 7 days mention refunds, including paraphrases.
  • Of those visitors, who also clicked checkout in the same hour.
  • Which tool errors preceded conversations containing “this is broken”.
  • Which sessions had the same ask three times in a row.

cat retrieve.sql

Search as a table function

Find the refund conversations with keyword plus vector in one statement. Filters ride the same pass. The result is a relation you can JOIN and GROUP BY.

retrieve.sql
SELECT   trace_id, session_id, user_id, text, score
FROM     hybrid_search(
           'agent_turns',                          -- prompts + responses in your bucket
           'text', 'refund this is broken',        -- the keyword side
           'embedding', :q, 200                     -- the vector side, 200 deep each
         )
WHERE    ts >= now() - interval '7 days'          -- scalar filters ride the same pass
ORDER BY score DESC;

-- → BM25 + vector, fused, over the last week of agent content

The table-valued functions in full →

cat join.sql

Then join it to product events

This example joins on user id. The same pattern joins agent turns to spans by trace id or to sessions by session id.

join.sql
-- which pages did refund conversations also touch

WITH hits AS (
  SELECT user_id, text, ts, score
  FROM   hybrid_search('agent_turns', 'text', 'refund',
                       'embedding', :q, 500)
)
SELECT   e.page,
         e.event,
         count(DISTINCT h.user_id) AS users
FROM     hits h
JOIN     events e
  ON     e.user_id = h.user_id                     -- a shared identity key
  AND    e.ts BETWEEN h.ts - interval '1 hour'
                  AND h.ts + interval '1 hour'
GROUP BY e.page, e.event
ORDER BY users DESC;

-- → pages and events grouped by users with matching conversations

RAG: the same primitives on any corpus →

cat PARQUET.md

Fast text search without another data format

Infino adds BM25 and vector indexes inside standard Parquet. Existing tools keep reading the column data; Infino uses the embedded indexes for ranked text retrieval.

  • DuckDB, Spark, and warehouse readers keep opening the same files. The embedded search indexes are Infino-specific.
  • If event and trace tables already live as Parquet, Infino can search and join those files in one statement.
  • If a table remains only in another engine, retrieve the matching ids in Infino and join them in that system.
  • Start with the agent tables; the whole lake does not have to move first.

How hydration works →  ·  Isolation and deletion →

cat FAQ.md

Where does Infino fit beside ClickHouse, Elasticsearch, or an eval platform?

Infino can replace Elasticsearch as the search layer for agent content. It runs beside warehouses used for BI and observability or eval tools used for metrics, logs, traces, and run scores.

Does Infino replace our product analytics?

No. Keep the SDK, event pipeline, and product analytics UI. Infino indexes agent content and joins it to existing events by visitor, user, or account id.

Do we have to migrate the whole event store first?

No. Start with the agent-turn tables. If event or trace tables are available to Infino as Parquet, join them directly. If they remain only in another engine, retrieve the matching ids in Infino and join them in that system.

Where do embeddings come from?

Infino can embed text on ingest using the model selected for the table. You can also send vectors from your own model. Some teams embed every prompt and response; others embed a conversation summary. Keyword search and SQL need no embeddings.

Can we keep writing Parquet ourselves?

Yes. Infino adds BM25 and vector indexes inside the Parquet while preserving the standard column data. DuckDB, Spark, and warehouse readers keep reading those columns. A generic Parquet rewrite drops Infino’s embedded indexes, so rehydrate after such a rewrite.

How is tenant data isolated?

On Infino Cloud, each database is its own OS process and object-store tokens are scoped to that tenant’s prefix. Dedicated single-tenant deploys are Enterprise. The security page covers Cloud, the open-source engine, and how to request a DPA.

How do deletes work?

Files are never edited. Deletes are tombstones over those immutable files. A query that already pinned a manifest does not see a delete that committed after it started.