{"id":31818246,"url":"https://github.com/arevalolance/sqlgen","last_synced_at":"2026-06-29T08:31:20.486Z","repository":{"id":311769760,"uuid":"1016463272","full_name":"arevalolance/sqlgen","owner":"arevalolance","description":"Generate SQL with natural language","archived":false,"fork":false,"pushed_at":"2025-08-27T04:18:46.000Z","size":157,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-11T10:57:37.723Z","etag":null,"topics":["ai","llm","postgresql","prisma","sql"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arevalolance.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T03:58:53.000Z","updated_at":"2025-08-27T04:18:50.000Z","dependencies_parsed_at":"2025-08-26T16:59:40.792Z","dependency_job_id":"69240552-e688-4415-836b-a1842a83ae58","html_url":"https://github.com/arevalolance/sqlgen","commit_stats":null,"previous_names":["arevalolance/sqlgen"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arevalolance/sqlgen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arevalolance%2Fsqlgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arevalolance%2Fsqlgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arevalolance%2Fsqlgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arevalolance%2Fsqlgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arevalolance","download_url":"https://codeload.github.com/arevalolance/sqlgen/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arevalolance%2Fsqlgen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34919882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","llm","postgresql","prisma","sql"],"created_at":"2025-10-11T10:57:08.917Z","updated_at":"2026-06-29T08:31:20.466Z","avatar_url":"https://github.com/arevalolance.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SqlGen - Text-to-SQL Library for TypeScript\n\nA powerful TypeScript library for generating SQL queries from natural language using AI, built with Effect-ts.\n\n## Features\n\n- **Text-to-SQL Generation**: Convert natural language questions to SQL queries\n- **Vector-based Schema Training**: Uses Qdrant for storing and retrieving schema context\n- **PostgreSQL Support**: Native PostgreSQL integration with schema introspection\n- **Effect-ts Architecture**: Built on Effect-ts for composable, type-safe error handling\n- **AI SDK Integration**: Uses Vercel's AI SDK for LLM interactions\n- **Query Validation**: Validates generated SQL before execution\n- **Training Pipeline**: Train on your database schema or custom DDL\n\n## Installation\n\n```bash\nnpm install sqlgen\n# or\npnpm add sqlgen\n# or\nyarn add sqlgen\n```\n\n## Required Dependencies\n\nYou'll also need to install the peer dependencies:\n\n```bash\npnpm add ai @ai-sdk/openai pg @qdrant/js-client-rest effect\npnpm add -D @types/pg\n```\n\n## Quick Start\n\n```typescript\nimport { createSqlGen } from 'sqlgen'\nimport { Effect } from 'effect'\n\n// Configure your SqlGen instance\nconst config = {\n  postgres: {\n    host: \"localhost\",\n    port: 5432,\n    database: \"your_database\",\n    user: \"your_user\",\n    password: \"your_password\",\n    ssl: false\n  },\n  qdrant: {\n    url: \"http://localhost:6333\",\n    collectionName: \"sql_schemas\"\n  },\n  textToSql: {\n    model: \"gpt-4\",\n    embeddingModel: \"text-embedding-3-small\",\n    maxTokens: 1000,\n    temperature: 0.1\n  },\n  pipeline: {\n    minConfidence: 0.7,\n    dryRun: false,\n    maxRetries: 3\n  }\n}\n\nconst sqlGen = createSqlGen(config)\n\n// Train from DDL\nconst ddl = `\n  CREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL\n  );\n`\n\n// Example usage with Effect.runPromise\nconst example = async () =\u003e {\n  try {\n    // Train the model\n    await Effect.runPromise(sqlGen.trainFromDdl(ddl))\n    \n    // Ask a question\n    const result = await Effect.runPromise(\n      sqlGen.ask(\"Show me all users created in the last 30 days\")\n    )\n    \n    console.log(\"Generated SQL:\", result.sql)\n    console.log(\"Results:\", result.results)\n  } catch (error) {\n    console.error(\"Error:\", error)\n  }\n}\n```\n\n## API Reference\n\n### SqlGen Class\n\n#### Methods\n\n- `ask(question: string)` - Generate and execute SQL from natural language\n- `trainFromDatabase()` - Train on existing database schema\n- `trainFromDdl(ddl: string)` - Train on provided DDL statement\n- `trainFromDdlArray(ddls: string[])` - Train on multiple DDL statements\n- `validateSql(sql: string)` - Validate SQL syntax\n- `explainQuery(sql: string)` - Get query execution plan\n\n### Configuration\n\n#### PostgresConfig\n- `host: string` - Database host\n- `port: number` - Database port\n- `database: string` - Database name\n- `user: string` - Database user\n- `password: string` - Database password\n- `ssl?: boolean` - Enable SSL\n\n#### QdrantConfig\n- `url: string` - Qdrant server URL\n- `apiKey?: string` - Optional API key\n- `collectionName: string` - Collection name for storing vectors\n\n#### TextToSqlConfig\n- `model: string` - LLM model (e.g., \"gpt-4\")\n- `embeddingModel: string` - Embedding model (e.g., \"text-embedding-3-small\")\n- `maxTokens?: number` - Maximum tokens (default: 1000)\n- `temperature?: number` - Temperature (default: 0.1)\n\n#### QueryPipelineConfig\n- `minConfidence: number` - Minimum confidence threshold (0-1)\n- `dryRun: boolean` - Whether to execute queries or just generate\n- `maxRetries: number` - Maximum retry attempts\n\n## Prerequisites\n\n1. **PostgreSQL Database** - Running instance with your data\n2. **Qdrant Vector Database** - For storing schema embeddings\n3. **OpenAI API Key** - Set as environment variable `OPENAI_API_KEY`\n\n## Architecture\n\nThe library is built with Effect-ts and follows these principles:\n\n- **Composability**: All operations return Effects that can be composed\n- **Type Safety**: Full TypeScript support with proper error types\n- **Error Handling**: Structured error handling with Effect-ts\n- **Dependency Injection**: Services are provided through Effect's Layer system\n\n## Development\n\n**Building**\n\n```sh\npnpm build\n```\n\n**Testing**\n\n```sh\npnpm test\n```\n\n**Type Checking**\n\n```sh\npnpm check\n```\n\n**Linting**\n\n```sh\npnpm lint\n```\n\n## License\n\nMIT License - see LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farevalolance%2Fsqlgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farevalolance%2Fsqlgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farevalolance%2Fsqlgen/lists"}