Building Kepler: An AI Data Analyst Agent for Internal Data Exploration

openai · Tech · 2026 · source Agentic: yes · promotional bias: low · source-backed · extracted with prompt 0.5.5 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Internal data analyst agent

OpenAI needed an internal agent that could answer data questions across a huge, fast-growing data platform without requiring users to manually discover tables, decode schema nuance, write long SQL, chase Slack/Notion context, and validate assumptions themselves.

Constraints:

Architecture

Kepler is an AI data analyst service that connects Slack, web UI, IDE, and MCP entry points to an LLM armed with a data-platform toolbox. Offline jobs build retrievable knowledge bases from table schemas, query history, lineage, code-crawled Codex descriptions, and company context from Slack, Notion, and Google Drive. At runtime, Kepler retrieves relevant context, uses MCP tools to search knowledge, inspect schemas, run data warehouse/Spark/Airflow calls, iterate over query results, and produce SQL, charts, anomaly explanations, or table answers. Memory stores corrections at user, channel, and global scopes. Evals compare generated and expected SQL/results with AST normalization and an OpenAI model grader. Security passes through user auth, redacts broad Slack outputs, and links raw results through permission-checked external UIs.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  data-question-user[Data question user] --> kepler-entry-points[Kepler entry points]
  kepler-entry-points --> kepler-agent-service[Kepler agent service]
  kepler-agent-service --> llm-reasoning-model[LLM reasoning model]
  kepler-agent-service --> mcp-toolbox[MCP toolbox]
  kepler-agent-service --> retrieved-context-layer[Retrieved context layer]
  kepler-agent-service --> memory-store[Memory store]
  kepler-agent-service --> raw-results-ui[Raw results UI]
  mcp-toolbox --> data-warehouse-and-platform-apis[Data warehouse and platform APIs]
  mcp-toolbox --> retrieved-context-layer
  offline-table-context-jobs[Offline table context jobs] --> retrieved-context-layer
  offline-table-context-jobs --> codex-code-crawling-tasks[Codex code crawling tasks]
  company-knowledge-service[Company knowledge service] --> retrieved-context-layer
  memory-suggestion-flow[Memory suggestion flow] --> memory-store
  memory-suggestion-flow --> data-question-user
  evaluation-system[Evaluation system] --> kepler-agent-service
  evaluation-system --> openai-evals-grader[OpenAI evals grader]
  authorization-and-redaction-layer[Authorization and redaction layer] --> kepler-agent-service
  authorization-and-redaction-layer --> raw-results-ui
  raw-results-ui --> data-question-user
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Data question user Employee asking natural-language analytics, table, anomaly, dashboard, or follow-up questions. Kepler entry points
Kepler entry points Slack agent, web UI, IDE/MCP, and MCP platform surfaces where users ask questions and receive answers. Kepler agent service, Data question user
Kepler agent service Core AI data analyst that reasons over context, calls tools, runs queries, handles follow-ups, and produces answers, charts, SQL, and analysis. LLM reasoning model, MCP toolbox, Retrieved context layer, Memory store, Raw results UI
LLM reasoning model Model that chooses reasoning paths, writes SQL, interprets results, uses memories, and generates final analysis. Kepler agent service
MCP toolbox Tool layer that lets Kepler search knowledge, check schemas, run queries, call data warehouses, and recover from wrong intermediate choices. Data warehouse and platform APIs, Retrieved context layer, Kepler agent service
Data warehouse and platform APIs Synchronous data sources such as warehouse queries, Spark, Airflow, and related platform APIs. MCP toolbox
Offline table context jobs Periodic jobs that generate and refresh table metadata, query history, lineage, and Codex-created table descriptions. Retrieved context layer, Codex code crawling tasks
Codex code crawling tasks Parallel daily codebase-crawling tasks that infer table purpose, downstream usage, grain, primary keys, freshness, alternatives, and lineage. Offline table context jobs
Company knowledge service Service that ingests Slack threads, Notion docs, and Google Drive docs into chunked, embedded, permission-checked retrieval. Retrieved context layer
Retrieved context layer Embedded table, lineage, query-history, code-generated, and company-context knowledge bases used at runtime. Kepler agent service, MCP toolbox
Memory store User, channel, and global scoped corrections and learnings retrieved at runtime and pruned or edited over time. Kepler agent service, Memory suggestion flow
Memory suggestion flow Workflow where Kepler suggests memories and users confirm, edit, resync, or scope them. Memory store, Data question user
Evaluation system Question-answer eval pipeline that generates SQL, runs expected and generated queries, normalizes SQL, compares results, and model-grades correctness. Kepler agent service, OpenAI evals grader
OpenAI evals grader Model-based grader that reasons over generated SQL/results and expected SQL/results to assign score and reason. Evaluation system
Authorization and redaction layer Pass-through authentication, pre-sanitized query ingestion, Slack output redaction, anonymization, and permission checks for raw results. Kepler agent service, Raw results UI
Raw results UI External UI where users with proper table permissions can inspect unredacted query artifacts and raw results. Authorization and redaction layer, Data question user

Data flow

A user asks Kepler a data question through Slack, UI, Cursor/MCP, or another MCP platform. Kepler retrieves table metadata, code-generated table descriptions, lineage, query history, company docs, and scoped memories from embedded knowledge bases. It then uses MCP tools to search, inspect schemas, run warehouse/Spark/Airflow calls, examine results, revise bad joins or thresholds, and continue until it has a defensible answer. When data is returned, Kepler provides linked query artifacts and raw-result references. The eval system separately sends natural-language questions through the agent endpoint, runs generated and expected SQL, compares result sets, and asks an OpenAI evals grader to score semantic correctness.

6 supporting quotes
“At its core, the Kepler service leverages the model to produce AI-powered results when you need them. This could be on Slack.”article, stated
“There's the UI. There's also the Slack agents. Then, you can hook up local or remote MCP. There's the top part which is the preprocessed offline information which I'll get to. This is the knowledgebases. There's the bottom part for sync calls, so I'm”article, stated
“or to other data platform sources like Spark or Airflow. This is really the core of it all. It's Kepler talking to the model armed with this toolbox. I'm just going to take a step back here and explain why using MCP has been so helpful for us. The reason is because with”article, stated
“Kepler can go back and repeat the steps. We internal knowledge search. We check the schemas, run the query. We got to redo it again.”article, stated
“All of this basically gets fed in into an embedding that we use the OpenAI API for, and then stored so that it can be live retrieved”article, stated
“If Kepler ran any queries that resulted in data, Kepler will link those and provide the reference ID so you can click into the raw results.”article, stated

Why this architecture

Kepler's architecture exists because data-analysis correctness depends on context, iteration, and permissioned live access. Offline retrieval makes 70k tables and company context searchable without stuffing everything into a prompt. MCP gives the agent a recoverable tool loop for schema checks, queries, and warehouse calls. Memory captures hard-to-infer local corrections. Evals protect against regressions in SQL generation. Auth pass-through and redaction let the agent act as an analyst without becoming a new entitlement surface.

6 supporting quotes
“over the whole time. We have the whole steps which just make for a better answer at the end. Agents without context can give wildly wrong answers. Take this example where somehow the agent thought that there were 5 million ChatGPT users compared to the actual 800 million”article, stated
“fitting all 70k tables with their schemas and query history is just too much data to put into a model's context window.”article, stated
“The reason is because with all these tools, Kepler can use them to start off with. Then after realizing that something is wrong.”article, stated
“For us, memory is really the mechanism that helps the agent continuously learn and improve. Context will get you maybe 80%, 90% of the way there. Sometimes you need those final little corrections that are just really hard to just infer. Let's say you rolled”article, stated
“Kepler does not provide any extra authorization. It actually does pass the authentication. This means that Kepler won't grant you extra access to tables you don't have access to. When you don't have access, Kepler will actually helpfully tell you which”article, stated
“evals are surprisingly often all you need. There's a lot of truth to that in our case. Our evals consist of sets of question-answer pairs. A question is usually some important metric we want to get right. Then we have a manually curated expected SQL”article, stated

Models used: OpenAI models · GPT-5 · OpenAI embedding API · OpenAI evals grader · Codex

Scale

Alternatives considered (roads not taken)

Continue manual data-question escalation through data scientists, engineers, meetings, and Slack.

Rejected because: Simple questions were too slow and expensive to answer manually at OpenAI's data scale.

3 supporting quotes
“You consult a data scientist, but they're actually like, "This is hard. Let me get back to you". They don't know what table to look at, so they ask another engineer, but then the other engineer doesn't know. After three code deep dives, two quick meetings,”article, stated
“After three code deep dives, two quick meetings, and five Slack threads, we finally have an answer. Simple questions shouldn't be this difficult and this time consuming, but they are. The reason why this is hard is because there is so much data. I'm Bonnie”article, stated
“and five Slack threads, we finally have an answer. Simple questions shouldn't be this difficult and this time consuming, but they are. The reason why this is hard is because there is so much data. I'm Bonnie Xu. I'm on the data productivity team at OpenAI. I'm here to talk to you today about how”article, stated

Put all table schemas and query history into the model context.

Rejected because: 70k tables made that impossible, so Kepler preprocesses and retrieves relevant context instead.

3 supporting quotes
“fitting all 70k tables with their schemas and query history is just too much data to put into a model's context window.”article, stated
“their schemas and query history is just too much data to put into a model's context window. We have to do some preprocessing ahead of time. Table schema information is particularly important because that way the model knows how to actually query the table. That's”article, stated
“stored so that it can be live retrieved via specific table search and semantic search when the agent is actually answering questions.”article, stated

Rely on table schemas alone.

Rejected because: Schemas lacked semantics, relationships, lineage, query history, freshness, grain, primary keys, and alternate-table guidance needed for correct answers.

3 supporting quotes
“Schemas alone aren't enough to understand the semantics and the relationships between data. That's why here you see query history, lineage. Those are important things to provide this extra context. All of this basically gets fed in into an embedding that we”article, stated
“relationships between data. That's why here you see query history, lineage. Those are important things to provide this extra context. All of this basically gets fed in into an embedding that we use the OpenAI API for, and then stored so that it can be live retrieved via specific table search and”article, stated
“It's not enough to look at the table by itself just as is. You need to understand how the table was created and where it came from.”article, stated

Evaluate generated SQL by exact text equality.

Rejected because: Semantically equivalent SQL can differ syntactically, so the eval normalizes ASTs, compares result sets with tolerance, and uses a model grader.

3 supporting quotes
“exact SQL text equality isn't really a good representation, whether a SQL eval passed. Like you could write a date filter in multiple different ways and meaning is still the same. We normalize things. We convert things, everything into its AST”article, stated
“multiple different ways and meaning is still the same. We normalize things. We convert things, everything into its AST representation. This helps us get around these minor SQL syntax different things. Also, when we compare result sets, we actually give a little wiggle room for things that don't”article, stated
“results, expected SQL, expected SQL results, and we feed that all in to the OpenAI evals grader. This evals grader is actually doing a model grading. This is particularly important because a lot of times generated SQL might differ by a little bit, but it still doesn't meaningfully”article, stated

Give Kepler extra authorization over data.

Rejected because: The system passes through user authentication so it cannot grant tables the user lacks, while still linking authorized users to raw result views.

3 supporting quotes
“Kepler does not provide any extra authorization. It actually does pass the authentication. This means that Kepler won't grant you extra access to tables you don't have access to. When you don't have access, Kepler will actually helpfully tell you which”article, stated
“provide any extra authorization. It actually does pass the authentication. This means that Kepler won't grant you extra access to tables you don't have access to. When you don't have access, Kepler will actually helpfully tell you which access group to join. Or it might use a similar”article, stated
“users who have permissions to those tables, so they would have been able to run the queries themselves anyway, we do permissions check there to make sure that they should actually be seeing that data. This is true for all the terrible pieces that the agent”article, stated

Start from a web-first agent surface only.

Rejected because: OpenAI's analytics work already happened in Slack, so a Slack interface drove adoption by meeting users where they asked questions.

3 supporting quotes
“asking right now. The other thing that really helped us was meeting users where they are. A lot of agent interfaces are actually web, for example, ChatGPT. We actually started with the Slack interface because OpenAI is a really Slack heavy company. People post analytics updates”article, stated
“We actually started with the Slack interface because OpenAI is a really Slack heavy company. People post analytics updates on Slack all the time. People ask data questions on Slack all the time. We realized the key to success was actually getting people to”article, stated
“We realized the key to success was actually getting people to ping Kepler with their analytics questions instead.”article, stated

Patterns

tool-use-orchestration (agent-architecture)

Kepler uses MCP tools to search knowledge, inspect schemas, run queries, examine results, and recover when an intermediate action such as a join key is wrong.

3 supporting quotes
“using MCP has been so helpful for us. The reason is because with all these tools, Kepler can use them to start off with.”article, stated
“Kepler can go back and repeat the steps. We internal knowledge search. We check the schemas, run the query. We got to redo it again.”article, stated
“Instead of you giving the feedback, Kepler is running tools, giving feedback, then using the right tools to take the next potential steps”article, stated

rag-retrieval (retrieval)

Kepler retrieves embedded table metadata, query history, lineage, code-generated descriptions, Slack threads, Notion docs, and Google Drive chunks at runtime.

3 supporting quotes
“stored so that it can be live retrieved via specific table search and semantic search when the agent is actually answering questions.”article, stated
“internal knowledge service at OpenAI that ingests things like Slack threads, or Notion docs, or Google Drive docs.”article, stated
“they're broken down into chunks and again embedded using the OpenAI embedding API.”article, stated

agent-memory (state-management)

Kepler stores corrections and learnings as retrievable memories scoped to users, channels, and global fixes, with suggestions, edits, pruning, and runtime retrieval.

3 supporting quotes
“For us, memory is really the mechanism that helps the agent continuously learn and improve.”article, stated
“There are user level ones because users might want their own customizations. We also want to protect potentially private information.”article, stated
“There's channel level for team scoped memories, and then also global memories for just general fixes that can benefit everyone.”article, stated

eval-driven-development (evaluation)

Kepler's team built question/expected-SQL evals, generated SQL through the agent endpoint, ran expected and generated queries, and used a model grader with AST-normalized SQL and result comparison.

3 supporting quotes
“Our evals consist of sets of question-answer pairs. A question is usually some important metric we want to get right.”article, stated
“We hit our agent query generation endpoint to turn our natural language question to generate SQL and then run the query.”article, stated
“This evals grader is actually doing a model grading. This is particularly important because a lot of times generated SQL might differ by a little bit, but it still doesn't meaningfully change the results.”article, stated

observability-tracing (observability)

Kepler streams chain-of-thought for audit, user interruption, debugging assumptions, and eval failure diagnosis.

3 supporting quotes
“we stream Kepler's chain of thought as Kepler is answering the question”article, stated
“It's been really helpful as an audit and also because in a bunch of cases it's important to understand the assumptions that went into the answer.”article, stated
“we also expose the chain of thought in our evals. This is really helpful for debugging failures.”article, stated

safety-policy-enforcement (security)

Kepler passes through user authentication, avoids granting extra access, redacts broad Slack outputs, ingests pre-sanitized queries, and gates raw results by table permissions.

3 supporting quotes
“Kepler won't grant you extra access to tables you don't have access to.”article, stated
“When we ingest internal knowledge, we actually ingest pre-sanitized queries so that important IDs, for example, aren't accidentally leaked.”article, stated
“we also redact sensitive outputs. This is done by intercepting the results and then passing it to our internal anonymization service that detects PII.”article, stated

data-quality-loop (operations)

User feedback, Slack threads, manual thumbs up/down, common questions, memory edits, and eval questions feed back into prompt, backend, memory, eval, and future fine-tuning work.

3 supporting quotes
“We owe a lot of our initial success to just having a really quick feedback loop with our users.”article, stated
“they're manually generated now just so we can get the right set, but they're pretty much based on the top common questions”article, stated
“There is a manual feedback mechanism that people can use to upvote or downvote.”article, stated

Tradeoffs

Use retrieval and preprocessing instead of stuffing all data context into prompts.

Chose embedded table/company context plus live retrieval over full schema/query-history context in every model call.

Rationale: The table universe was too large for context windows, and retrieval let Kepler load just the relevant table, lineage, query, company, and memory context at runtime.

3 supporting quotes
“fitting all 70k tables with their schemas and query history is just too much data to put into a model's context window.”article, stated
“stored so that it can be live retrieved via specific table search and semantic search when the agent is actually answering questions.”article, stated
“putting everything into the embedding and then returning that at runtime is really helpful.”article, stated

Autogenerate rich table descriptions with Codex tasks.

Chose daily parallel code-crawling jobs over manual data-catalog descriptions alone.

Rationale: Manual descriptions go stale and miss creation, lineage, downstream usage, grain, and freshness details that determine correct analysis.

3 supporting quotes
“descriptions get easily outdated and often they become a burden to maintain.”article, stated
“We solve this by autogenerating as much as possible. We also include information beyond what is just in our data catalog.”article, stated
“These Codex tasks are launched in parallel daily. They crawl the codebase to understand things like a table's purpose, downstream usage patterns”article, stated

Expose chain-of-thought and query artifacts.

Chose streamed reasoning, links to queries, and reference IDs over opaque final answers only.

Rationale: Users need to audit assumptions, interrupt wrong paths, inspect raw results, and debug eval failures in a high-stakes data-analysis setting.

3 supporting quotes
“we stream Kepler's chain of thought as Kepler is answering the question”article, stated
“If you see Kepler veering off track because we stream up the chain of thoughts, you can see where Kepler is going, you can interrupt Kepler”article, stated
“If Kepler ran any queries that resulted in data, Kepler will link those and provide the reference ID”article, stated

Grade SQL semantically rather than syntactically.

Chose AST normalization, result-set wiggle room, and LLM-based grading over exact SQL text equality.

Rationale: Equivalent SQL often differs in syntax or harmless result details, while a model grader can reason about whether the generated answer actually matches the expected result.

3 supporting quotes
“exact SQL text equality isn't really a good representation, whether a SQL eval passed.”article, stated
“We normalize things. We convert things, everything into its AST representation.”article, stated
“when we compare result sets, we actually give a little wiggle room for things that don't meaningfully impact the answer.”article, stated

Preserve existing permissions instead of giving the agent broad data access.

Chose pass-through authentication and permission-checked raw result links over agent-specific superuser access to tables and raw results.

Rationale: Kepler answers questions without becoming a privilege escalation layer, while still giving authorized users access to raw artifacts they could have produced themselves.

3 supporting quotes
“Kepler does not provide any extra authorization. It actually does pass the authentication.”article, stated
“Kepler won't grant you extra access to tables you don't have access to.”article, stated
“we do permissions check there to make sure that they should actually be seeing that data.”article, stated

Meet users in Slack before relying on a web interface.

Chose Slack-first agent adoption over web-only analytics assistant UX.

Rationale: OpenAI users already asked analytics questions and posted updates in Slack, so a Slack agent lowered adoption friction.

3 supporting quotes
“We actually started with the Slack interface because OpenAI is a really Slack heavy company.”article, stated
“People post analytics updates on Slack all the time. People ask data questions on Slack all the time.”article, stated
“getting people to ping Kepler with their analytics questions instead.”article, stated

Gotchas (what bit them)

Agents without the right data context can produce wildly wrong answers.

Root cause: Similar table names, hidden schema differences, stale descriptions, and missing company context make the model infer the wrong source or meaning.

Resolution: Retrieve rich table metadata, query history, lineage, company context, code-crawled descriptions, and memories before and during analysis.

3 supporting quotes
“Agents without context can give wildly wrong answers. Take this example where somehow the agent thought that there were 5 million ChatGPT users compared to the actual 800 million answer.”article, stated
“the agent thought that there were 5 million ChatGPT users compared to the actual 800 million answer.”article, stated
“Instead of knowing that a table is only about ChatGPT analytics, you know that the table contains first-party ChatGPT traffic and not third-party traffic, and that it's enriched by safety signals.”article, stated

Small table-semantics mistakes can create catastrophic business answers.

Root cause: Tables can differ by encryption, fraud adjustment, pre-filtering, feedback status, or other nuances that are not obvious from names alone.

Resolution: Autogenerate richer table descriptions from code, lineage, query history, grain, primary keys, and freshness rather than depending on names or schemas alone.

3 supporting quotes
“some tables have encrypted IDs, some tables have unencrypted IDs, but we still might want to join them.”article, stated
“Some tables have columns that adjust for fraud rates. Some tables don't. Some tables are pre-filtered by feedback. Some are not.”article, stated
“Missing one nuance can lead to an answer that is wrong by an order of magnitude, and this can be catastrophic when making important business decisions.”article, stated

Too many overlapping tools can confuse the model.

Root cause: Similar tool calls with subtle distinctions such as service auth versus user auth made tool discovery harder for the agent.

Resolution: Reduce and simplify the available tool calls so the model can find the right tool more reliably.

3 supporting quotes
“if you give the model too much information, especially when it's overlapping, it can get really confused.”article, stated
“we have a lot of tool calls that are a little similar just because one might use service auth, one might use user auth”article, stated
“We actually ratcheted down the tool calls that agent can use for easier tool discovery.”article, stated

Overly specific prompts made the agent worse.

Root cause: Data questions branch in many ways, so rigid instructions forced the model down paths that did not fit the user's actual question.

Resolution: Use more general prompting and let GPT-5 reasoning choose the path from the available context and tools.

3 supporting quotes
“we found the results were worse when there were really specific instructions.”article, stated
“Being overly prescriptive actually hurt us because the model would try to follow an exact set of instructions that didn't really make sense”article, stated
“we leave it to the reasoning of GPT-5 to understand the exact path that it should take.”article, stated

Memory can regress answers if bad or conflicting memories are retrieved.

Root cause: Generated memories may be accidental, non-reusable, scoped poorly, or simply wrong.

Resolution: Scope memories, let users inspect/edit them, prune them offline, and use chain-of-thought/auditing when bad memories influence answers.

3 supporting quotes
“Sometimes maybe it's like a bad memory, it actually does meaningfully present a failure that shouldn't be the case.”article, stated
“that's again why the chain of thought is useful. We can inspect what's going on.”article, stated
“Obviously, there still is that gap between when that offline job runs and when it live runs.”article, stated

Trust depends on validation beyond a plausible answer.

Root cause: Kepler can make mistakes and users will not adopt it if answers cannot be audited or validated against known sources.

Resolution: Stream assumptions, link queries/raw results, run evals, and plan extra validation steps such as comparing results against dashboard numbers.

3 supporting quotes
“Just like a human, Kepler can also make mistakes. That's why we stream Kepler's chain of thought as Kepler is answering the question, as you saw in those screenshots before.”article, stated
“We care a lot about our users' trust in Kepler. We want the responses to be validated and correct.”article, stated
“Kepler can take this result and can do a comparison just to make sure that the number matches”article, stated

Evaluation

Kepler uses both formal evals and live user feedback. Formal evals are question-answer pairs with manually curated expected SQL. The system generates SQL through Kepler, runs generated and expected queries, normalizes SQL to ASTs, compares result sets with semantic tolerance, and asks an OpenAI evals grader to score and explain correctness. Product feedback also comes from quick user loops, manual upvote/downvote signals, Slack-thread feedback, top common questions used to create evals, and planned extra validation against dashboards.

Metrics: eval pass score and reason · generated SQL versus expected SQL · generated results versus expected results · AST-normalized SQL equivalence · result-set semantic match with tolerance · top common questions represented in evals · manual upvote/downvote feedback · chain-of-thought debugging signal · dashboard-number validation for future confidence

6 supporting quotes
“Our evals consist of sets of question-answer pairs. A question is usually some important metric we want to get right.”article, stated
“manually curated expected SQL statement that we want to be the correct answer to match.”article, stated
“This evals grader is actually doing a model grading. This is particularly important because a lot of times generated SQL might differ by a little bit, but it still doesn't meaningfully change the results.”article, stated
“All of this ends up giving us a score and a reason, so we can see how our evals did.”article, stated
“they're pretty much based on the top common questions that people might answer and also the important ones to get right.”article, stated
“There is a manual feedback mechanism that people can use to upvote or downvote.”article, stated

Outcomes

The source reports 80% of the company using 15 data-platform tools over 600PB/day and 70k datasets, a 160-line SQL example, a wrong 5M-vs-800M answer without context, 24/7 Kepler access, a 56-reply thread, 375 pickups in a follow-up demo, user/channel/global memory scopes, and expansion from data scientists to GTM, finance/econ, API, Sora, ChatGPT, and whole-company usage.

6 supporting quotes
“At OpenAI, we built Kepler, an AI data analyst that takes the full context of data platform and answer these data questions for you.”article, stated
“Morning commutes, weekdays, at rush hour, and late nights are the most unreliable, for anyone taking a New York taxi this week.”article, stated
“Kepler was able to figure out that it was related to ImageGen that we launched.”article, stated
“One of our users mentioned, for example, how Kepler they felt like was the most useful bot that we had at the company.”article, stated
“Someone mentioned how Kepler to them felt like the closest thing to AGI that they've used.”article, stated
“we've branched out. We now have users across GTM. We have users in finance and econ, API as well.”article, stated