Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions DESIGN.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: AI SQL Analyst
name: FrontierSQL
description: A conversational analyst in the familiar two-pane chat-app layout, where every answer shows the SQL that ran and why it was safe.
colors:
surface: "#ffffff"
Expand Down Expand Up @@ -206,7 +206,7 @@ components:
textColor: "{colors.ink}"
---

# Design System: AI SQL Analyst
# Design System: FrontierSQL

## Overview

Expand Down
4 changes: 2 additions & 2 deletions EVALUATION_PLAN.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
AI SQL Analyst — Evaluation Plan
FrontierSQL — Evaluation Plan

Objective

Measure how reliably the AI SQL Analyst turns natural-language questions into correct results on
Measure how reliably FrontierSQL turns natural-language questions into correct results on
the built-in demo database (Our World in Data CO2 and greenhouse-gas emissions, yearly data by
country, region and income group, pinned commit — see data/README.md), and that it stays safe.

Expand Down
4 changes: 2 additions & 2 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ LLM's SQL, and here's the test suite that proves it."
read from the actual recorded report, with the run, model and date they came from.
- The frontend (Milestone 12) lives in `frontend/`. An earlier build was removed and remains in git
history at commit `ae1cca7` / `50ee27e` as reference only.
- The code is MIT-licensed and public at https://github.com/Parth-Vasave/ai-sql-analyst-agent.
- The code is MIT-licensed and public at https://github.com/Parth-Vasave/frontiersql.
Star, contributor and usage counts must never be invented.

## Brand Commitments
Expand All @@ -95,7 +95,7 @@ each answer exposes, not in an unusual layout.
- Dataset: Our World in Data, "CO2 and Greenhouse Gas Emissions" (CC BY 4.0), pinned commit
`382ee6c662b0ece26e111f263b44c029afad7787`, 1750-2024, 254 entities (242 after cleaning), 50,411
rows x 79 source columns (`data/README.md`). Real, citable, safe to reference directly.
- Repository: https://github.com/Parth-Vasave/ai-sql-analyst-agent (MIT). Do not fabricate usage
- Repository: https://github.com/Parth-Vasave/frontiersql (MIT). Do not fabricate usage
or star metrics.
- Recorded evaluation: offline safety suite 28/28 blocked (2026-10-04) and one complete question
suite run, 74/78 (2026-10-04). EVALUATION_PLAN.md is the source of truth.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AI SQL Analyst
# FrontierSQL

Ask a question about a database in plain English. The analyst turns it into SQL, checks that SQL
deterministically, runs it on a read-only connection, verifies the result, and answers with a
Expand Down Expand Up @@ -204,7 +204,7 @@ are recorded in [EVALUATION_PLAN.md](EVALUATION_PLAN.md) only once a run exists.

- PostgreSQL only; MySQL is not implemented.
- The rate limiter is in memory per process. Multi-instance or serverless deployments need a shared
store ([#7](https://github.com/Parth-Vasave/ai-sql-analyst-agent/issues/7)).
store ([#7](https://github.com/Parth-Vasave/frontiersql/issues/7)).
- No hosted demo yet. [docs/deployment.md](docs/deployment.md) describes a free Neon + Render +
Vercel + Groq setup; it has not been run end to end.
- Results depend on the chosen model; only one model has been evaluated so far.
Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describes each layer.
## Reporting a vulnerability

Please report vulnerabilities privately through
[GitHub private vulnerability reporting](https://github.com/Parth-Vasave/ai-sql-analyst-agent/security/advisories/new),
[GitHub private vulnerability reporting](https://github.com/Parth-Vasave/frontiersql/security/advisories/new),
not in a public issue.

Especially useful: SQL the validator accepts but should reject (writes, system catalogs, denied
Expand Down
2 changes: 1 addition & 1 deletion backend/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]:
def create_app() -> FastAPI:
settings = get_settings()
configure_logging(settings.log_level)
app = FastAPI(title="AI SQL Analyst", version="0.1.0", lifespan=lifespan)
app = FastAPI(title="FrontierSQL", version="0.1.0", lifespan=lifespan)
install_observability(app) # request IDs + request logs; added before CORS so CORS wraps it
app.add_middleware(
CORSMiddleware,
Expand Down
2 changes: 1 addition & 1 deletion database/schema.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- AI SQL Analyst — analytical schema for Our World in Data CO2 and greenhouse gas emissions.
-- FrontierSQL — analytical schema for Our World in Data CO2 and greenhouse gas emissions.
--
-- Source: https://github.com/owid/co2-data (CC BY 4.0), see data/README.md.
-- One source row = one entity (country or aggregate region) and year. It is split into
Expand Down
2 changes: 1 addition & 1 deletion docs/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ own address by forging the header.

The limiter keeps its windows **in memory, per process**: with several instances, each enforces
its own limits, so the effective limits multiply. The free plan runs one instance; keep it that way
until [#7](https://github.com/Parth-Vasave/ai-sql-analyst-agent/issues/7) adds a shared store. A
until [#7](https://github.com/Parth-Vasave/frontiersql/issues/7) adds a shared store. A
restart (including Render's spin-down) resets the windows.

**Data sent to Groq:** the schema, sampled values and up to 30 result rows for the written answer.
Expand Down
2 changes: 1 addition & 1 deletion evaluation/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Evaluation suite for the AI SQL Analyst (Milestone 11). See EVALUATION_PLAN.md.
"""Evaluation suite for FrontierSQL (Milestone 11). See EVALUATION_PLAN.md.

Run from the repository root, e.g. `python -m evaluation.run --help`. The backend package
(`app`) is imported from backend/, which is put on the import path here.
Expand Down
4 changes: 2 additions & 2 deletions frontend/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AI SQL Analyst — frontend
# FrontierSQL — frontend

Two static pages built by Vite:

Expand All @@ -10,7 +10,7 @@ Two static pages built by Vite:

Both are plain files in `dist/`, so any static host serves them without rewrite rules.

The chat UI for the AI SQL Analyst backend, in the familiar two-pane layout of Claude.ai or
The chat UI for the FrontierSQL backend, in the familiar two-pane layout of Claude.ai or
ChatGPT: past chats in a left sidebar, a settings menu bottom-left (switch or connect a database,
browse its schema, theme, help), and a conversation pane. Each answer shows the grounded answer,
the result table and a chart, under a one-line verification summary that opens into the plan, the
Expand Down
2 changes: 1 addition & 1 deletion frontend/chat/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
name="description"
content="Ask a database a question in plain language. The SQL that runs is validated before it runs, never trusted from the model alone."
/>
<title>Chat · AI SQL Analyst</title>
<title>Chat · FrontierSQL</title>
<script>
try {
var stored = localStorage.getItem('theme')
Expand Down
2 changes: 1 addition & 1 deletion frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
name="description"
content="Open-source text-to-SQL that never trusts the model: an LLM drafts the SQL, deterministic code validates it, runs it read-only, checks the result and shows every step."
/>
<title>AI SQL Analyst · text-to-SQL that never trusts the model</title>
<title>FrontierSQL · text-to-SQL that never trusts the model</title>
<script>
try {
var stored = localStorage.getItem('theme')
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/SettingsMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { DatabaseInfo } from '../api/types'
import type { ThemePreference } from '../hooks/useTheme'
import { CheckIcon, ChevronUpDownIcon, DatabaseIcon, GithubIcon, HelpIcon, MonitorIcon, MoonIcon, PlugIcon, SunIcon, TableIcon } from './icons'

const REPO_URL = 'https://github.com/Parth-Vasave/ai-sql-analyst-agent'
const REPO_URL = 'https://github.com/Parth-Vasave/frontiersql'

const STATUS_TEXT: Record<DatabaseInfo['status'], string> = {
ready: 'read-only',
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function Sidebar({ chats, currentId, onSelect, onNewChat, onDelete, onClo
<nav aria-label="Chats" className="flex h-full w-[17rem] flex-col bg-sidebar">
<div className="flex items-center justify-between px-3 pt-3 pb-2">
<a href={import.meta.env.BASE_URL} className="flex items-center gap-2.5 rounded-lg px-1.5 py-1" title="Project home">
<span className="text-[15px] font-semibold tracking-tight">AI SQL Analyst</span>
<span className="text-[15px] font-semibold tracking-tight">FrontierSQL</span>
</a>
<button
type="button"
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/home/HomePage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe('HomePage', () => {
}
expect(screen.getAllByRole('link', { name: /View on GitHub/ })[0]).toHaveAttribute(
'href',
'https://github.com/Parth-Vasave/ai-sql-analyst-agent',
'https://github.com/Parth-Vasave/frontiersql',
)
})

Expand Down
6 changes: 3 additions & 3 deletions frontend/src/home/HomePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const DEFENSES: { term: string; text: string }[] = [
]

const QUICK_START = `git clone ${REPO_URL}
cd ai-sql-analyst-agent
cd frontiersql
cp .env.example .env # set the two passwords and LLM_API_KEY
docker compose up -d # PostgreSQL, read-only role, API on :8000
docker compose run --rm seed # load the pinned OWID data
Expand Down Expand Up @@ -312,7 +312,7 @@ function TopBar() {
<header className={`sticky top-0 z-30 border-b bg-surface transition-colors ${scrolled ? 'border-line' : 'border-transparent'}`}>
<div className="mx-auto flex h-14 max-w-[72rem] items-center gap-2 px-4 sm:px-6">
<a href={import.meta.env.BASE_URL} className="mr-auto flex items-center gap-2.5 rounded-lg py-1 pr-2">
<span className="text-[15px] font-semibold tracking-tight">AI SQL Analyst</span>
<span className="text-[15px] font-semibold tracking-tight">FrontierSQL</span>
</a>
<nav aria-label="Sections" className="hidden items-center gap-1 md:flex">
<NavLink href="#how">How it works</NavLink>
Expand Down Expand Up @@ -492,7 +492,7 @@ function Footer({ preference, onTheme }: { preference: ThemePreference; onTheme:
<div className="mx-auto flex max-w-[72rem] flex-col gap-8 px-4 py-10 sm:px-6 md:flex-row md:items-start md:justify-between">
<div className="max-w-[28rem]">
<div className="flex items-center gap-2.5">
<span className="text-[14.5px] font-semibold tracking-tight">AI SQL Analyst</span>
<span className="text-[14.5px] font-semibold tracking-tight">FrontierSQL</span>
</div>
<p className="mt-3 text-[13px] leading-relaxed text-ink-faint">
Code under the{' '}
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/home/Replay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export function Replay({ result, recordedAt }: { result: AgentResult; recordedAt
>
<aside inert className="hidden w-[15.5rem] shrink-0 flex-col border-r border-line bg-sidebar md:flex" aria-hidden="true">
<div className="flex items-center gap-2.5 px-4.5 pt-4 pb-3">
<span className="text-[14.5px] font-semibold tracking-tight">AI SQL Analyst</span>
<span className="text-[14.5px] font-semibold tracking-tight">FrontierSQL</span>
</div>
<div className="px-3">
<p className="flex items-center gap-3 rounded-xl px-2.5 py-2 text-[14px] font-medium">
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/home/evaluation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// for effect: evaluation.test.ts recomputes every number here from evaluation/results/*.jsonl and
// fails when they drift. A new run means new result files, then updating this module.

export const REPO_URL = 'https://github.com/Parth-Vasave/ai-sql-analyst-agent'
export const REPO_URL = 'https://github.com/Parth-Vasave/frontiersql'
export const repoFile = (path: string) => `${REPO_URL}/blob/main/${path}`

export interface RecordedRun {
Expand Down
Loading