nlp2sql 0.2.0rc13__tar.gz → 0.2.0rc14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. nlp2sql-0.2.0rc14/.github/workflows/ci.yml +84 -0
  2. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.gitignore +1 -0
  3. nlp2sql-0.2.0rc14/CHANGELOG.md +43 -0
  4. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/PKG-INFO +4 -2
  5. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/docker-compose.yml +1 -1
  6. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/mcp_server/__init__.py +1 -1
  7. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/mcp_server/pyproject.toml +2 -2
  8. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/pyproject.toml +2 -1
  9. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/__init__.py +1 -1
  10. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/__init__.py +8 -0
  11. nlp2sql-0.2.0rc14/src/nlp2sql/adapters/pgvector_example_repository.py +489 -0
  12. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/config/settings.py +1 -1
  13. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/conftest.py +15 -2
  14. nlp2sql-0.2.0rc14/tests/test_pgvector_example_repository.py +386 -0
  15. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/uv.lock +20 -2
  16. nlp2sql-0.2.0rc13/.github/workflows/ci.yml +0 -33
  17. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/commands/db.md +0 -0
  18. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/commands/quality.md +0 -0
  19. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/commands/test.md +0 -0
  20. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/rules/adapters.md +0 -0
  21. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/rules/architecture.md +0 -0
  22. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/rules/python-style.md +0 -0
  23. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/rules/testing.md +0 -0
  24. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.claude/settings.json +0 -0
  25. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  27. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.github/workflows/publish-pypi.yml +0 -0
  28. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.github/workflows/publish-testpypi.yml +0 -0
  29. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.mcp.json.example +0 -0
  30. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/.python-version +0 -0
  31. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/CLAUDE.md +0 -0
  32. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/CONTRIBUTING.md +0 -0
  33. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/LICENSE +0 -0
  34. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/README.md +0 -0
  35. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/SECURITY.md +0 -0
  36. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/assets/nlp2sql-logo.png +0 -0
  37. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/benchmarks/enterprise_benchmark_results.json +0 -0
  38. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/.env.example +0 -0
  39. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/README.md +0 -0
  40. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/get-db-urls.sh +0 -0
  41. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/init-schema.sql +0 -0
  42. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/large-schema.sql +0 -0
  43. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/localstack-init.sh +0 -0
  44. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docker/test-redshift.sh +0 -0
  45. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docs/API.md +0 -0
  46. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docs/ARCHITECTURE.md +0 -0
  47. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docs/CONFIGURATION.md +0 -0
  48. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docs/ENTERPRISE.md +0 -0
  49. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/docs/Redshift.md +0 -0
  50. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/README.md +0 -0
  51. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/advanced/test_multiple_providers.py +0 -0
  52. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/advanced/test_simple_api.py +0 -0
  53. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/database_specific/test_odoo_integration.py +0 -0
  54. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/default_examples.json +0 -0
  55. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/documentation/real_world_example.py +0 -0
  56. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/getting_started/basic_usage.py +0 -0
  57. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/getting_started/simple_demo.py +0 -0
  58. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/getting_started/test_api_setup.py +0 -0
  59. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/schema_management/test_auto_schema.py +0 -0
  60. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/schema_management/test_schema_filters_comprehensive.py +0 -0
  61. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/.dockerignore +0 -0
  62. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/.env.example +0 -0
  63. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/DOCKER_README.md +0 -0
  64. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/DOCKER_SETUP.md +0 -0
  65. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/DOCKER_TESTING_SUMMARY.md +0 -0
  66. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/Dockerfile +0 -0
  67. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/INDEX.md +0 -0
  68. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/README.md +0 -0
  69. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/docker/init-ecommerce-schema.sql +0 -0
  70. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/docker-compose.yml +0 -0
  71. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/main.py +0 -0
  72. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/pyproject.toml +0 -0
  73. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/examples/strands-fastapi-agent/test-docker-endpoints.sh +0 -0
  74. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/install-dev.sh +0 -0
  75. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/mcp_server/README.md +0 -0
  76. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/mcp_server/example_config.json +0 -0
  77. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/mcp_server/server.py +0 -0
  78. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/anthropic_adapter.py +0 -0
  79. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/default_error_classifier.py +0 -0
  80. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/default_repair_policy.py +0 -0
  81. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/dict_semantic_resolver.py +0 -0
  82. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/file_semantic_resolver.py +0 -0
  83. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/gemini_adapter.py +0 -0
  84. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/local_embedding_adapter.py +0 -0
  85. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/noop_semantic_resolver.py +0 -0
  86. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/noop_semantic_validator.py +0 -0
  87. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/openai_adapter.py +0 -0
  88. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/openai_embedding_adapter.py +0 -0
  89. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/postgres_repository.py +0 -0
  90. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/redshift_adapter.py +0 -0
  91. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/regex_query_validator.py +0 -0
  92. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/adapters/schema_repository_execution_adapter.py +0 -0
  93. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/cli.py +0 -0
  94. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/client.py +0 -0
  95. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/config/__init__.py +0 -0
  96. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/__init__.py +0 -0
  97. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/database_prompts.py +0 -0
  98. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/entities.py +0 -0
  99. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/provider_config.py +0 -0
  100. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/result.py +0 -0
  101. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/runtime.py +0 -0
  102. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/sql_keywords.py +0 -0
  103. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/core/sql_safety.py +0 -0
  104. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/exceptions/__init__.py +0 -0
  105. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/factories/__init__.py +0 -0
  106. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/factories/repository_factory.py +0 -0
  107. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/__init__.py +0 -0
  108. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/ai_provider.py +0 -0
  109. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/cache.py +0 -0
  110. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/embedding_provider.py +0 -0
  111. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/error_classifier.py +0 -0
  112. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/example_repository.py +0 -0
  113. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/query_execution.py +0 -0
  114. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/query_optimizer.py +0 -0
  115. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/query_safety.py +0 -0
  116. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/query_validator.py +0 -0
  117. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/repair_policy.py +0 -0
  118. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/schema_repository.py +0 -0
  119. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/schema_strategy.py +0 -0
  120. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/semantic_resolver.py +0 -0
  121. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/ports/semantic_validator.py +0 -0
  122. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/__init__.py +0 -0
  123. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/analyzer.py +0 -0
  124. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/embedding_manager.py +0 -0
  125. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/example_loader.py +0 -0
  126. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/example_store.py +0 -0
  127. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/schema/manager.py +0 -0
  128. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/__init__.py +0 -0
  129. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/example_selection_service.py +0 -0
  130. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/prompt_assembly_service.py +0 -0
  131. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/query_analysis_service.py +0 -0
  132. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/query_repair_service.py +0 -0
  133. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/query_service.py +0 -0
  134. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/semantic_resolution_service.py +0 -0
  135. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/semantic_validation_service.py +0 -0
  136. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/services/sql_intent_planning_service.py +0 -0
  137. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/utils/__init__.py +0 -0
  138. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/utils/artifact_loader.py +0 -0
  139. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/utils/helpers.py +0 -0
  140. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/utils/semantic_prompt.py +0 -0
  141. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/src/nlp2sql/utils/storage.py +0 -0
  142. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/test_tmp/.gitignore +0 -0
  143. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/mcp/__init__.py +0 -0
  144. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/mcp/test_sql_security.py +0 -0
  145. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_artifact_loader.py +0 -0
  146. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_basic.py +0 -0
  147. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_batch_scoring.py +0 -0
  148. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_cli_semantic_support.py +0 -0
  149. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_client_hooks.py +0 -0
  150. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_column_validation.py +0 -0
  151. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_database_prompts.py +0 -0
  152. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_dsl_integration.py +0 -0
  153. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_embedding_manager.py +0 -0
  154. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_integration.py +0 -0
  155. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_postgres_integration.py +0 -0
  156. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_redshift_integration.py +0 -0
  157. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_repository_cache.py +0 -0
  158. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_repository_factory.py +0 -0
  159. {nlp2sql-0.2.0rc13 → nlp2sql-0.2.0rc14}/tests/test_retrieval_pipeline.py +0 -0
@@ -0,0 +1,84 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Set up Python 3.12
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: '3.12'
21
+
22
+ - name: Install uv
23
+ run: python -m pip install uv
24
+
25
+ - name: Install dependencies
26
+ run: |
27
+ uv pip install --system .
28
+ uv pip install --system ".[dev]"
29
+
30
+ - name: Unit tests
31
+ env:
32
+ PYTHONPATH: src
33
+ run: pytest -m "not integration and not llm" -q
34
+
35
+ pgvector-integration:
36
+ runs-on: ubuntu-latest
37
+
38
+ services:
39
+ postgres:
40
+ image: pgvector/pgvector:pg16
41
+ env:
42
+ POSTGRES_USER: testuser
43
+ POSTGRES_PASSWORD: testpass
44
+ POSTGRES_DB: testdb
45
+ ports:
46
+ - 5432:5432
47
+ options: >-
48
+ --health-cmd "pg_isready -U testuser -d testdb"
49
+ --health-interval 10s
50
+ --health-timeout 5s
51
+ --health-retries 5
52
+
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@v4
56
+
57
+ - name: Set up Python 3.12
58
+ uses: actions/setup-python@v5
59
+ with:
60
+ python-version: '3.12'
61
+
62
+ - name: Install uv
63
+ run: python -m pip install uv
64
+
65
+ - name: Install dependencies (with pgvector extra)
66
+ run: |
67
+ uv pip install --system ".[dev]"
68
+ uv pip install --system ".[pgvector]"
69
+
70
+ # Scoped to the pgvector adapter suite so the job is self-contained (the
71
+ # broader integration suite needs init-schema.sql / LocalStack Redshift,
72
+ # which are out of scope for this lane). NLP2SQL_REQUIRE_INTEGRATION makes
73
+ # the fixtures FAIL instead of skip, so a misconfigured service goes red
74
+ # rather than green-via-skip (collection != execution).
75
+ - name: pgvector integration tests
76
+ env:
77
+ PYTHONPATH: src
78
+ NLP2SQL_REQUIRE_INTEGRATION: "1"
79
+ NLP2SQL_TEST_POSTGRES_HOST: localhost
80
+ NLP2SQL_TEST_POSTGRES_PORT: "5432"
81
+ NLP2SQL_TEST_POSTGRES_USER: testuser
82
+ NLP2SQL_TEST_POSTGRES_PASS: testpass
83
+ NLP2SQL_TEST_POSTGRES_DB: testdb
84
+ run: pytest tests/test_pgvector_example_repository.py -m integration -q
@@ -176,6 +176,7 @@ query_cache.db
176
176
  !README.md
177
177
  !CONTRIBUTING.md
178
178
  !SECURITY.md
179
+ !CHANGELOG.md
179
180
  !docs/*.md
180
181
  !**/README.md
181
182
  !.github/**/*.md
@@ -0,0 +1,43 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## Versioning policy
9
+
10
+ - **MAJOR** — incompatible public API changes (removing/renaming a public symbol
11
+ or changing a port/ABC contract in a non-backward-compatible way).
12
+ - **MINOR** — backward-compatible functionality (new adapters, new optional
13
+ parameters, new optional extras).
14
+ - **PATCH** — backward-compatible bug fixes.
15
+
16
+ Pre-1.0 the project ships release candidates (e.g. `0.2.0rcN`). Public surface
17
+ changes — moving/renaming exported symbols, or adding methods to a published
18
+ port such as `ExampleRepositoryPort` — MUST be recorded under `Unreleased`
19
+ before release and called out as **Breaking** if they affect external
20
+ implementers. Backward-compatible shims are preferred over hard breaks while
21
+ pre-1.0.
22
+
23
+ ## [Unreleased]
24
+
25
+ ## [0.2.0rc14] - 2026-09-16
26
+
27
+ ### Added
28
+ - `PgvectorExampleRepository`: a Postgres + `pgvector` implementation of
29
+ `ExampleRepositoryPort`, an alternative to the on-disk FAISS `ExampleStore`
30
+ for storing and semantically searching few-shot examples. Stores examples in
31
+ a single table with a `namespace` column (per-database isolation via
32
+ `md5(database_url:schema_name)`, byte-identical to `ExampleStore`), cosine
33
+ distance search over an HNSW index, and idempotent `auto_migrate` DDL.
34
+ - Optional `pgvector` extra: `pip install 'nlp2sql[pgvector]'`.
35
+ - CI: a `pgvector-integration` job that runs the adapter's integration tests
36
+ against a `pgvector/pgvector:pg16` service. The job fails (rather than skips)
37
+ when the database or `vector` extension is unavailable
38
+ (`NLP2SQL_REQUIRE_INTEGRATION`).
39
+
40
+ ### Changed
41
+ - `docker/docker-compose.yml`: the `postgres` service image is now
42
+ `pgvector/pgvector:pg16` (drop-in replacement for `postgres:16`, adds the
43
+ `vector` extension) so integration tests run out of the box.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: nlp2sql
3
- Version: 0.2.0rc13
3
+ Version: 0.2.0rc14
4
4
  Summary: Enterprise-ready Natural Language to SQL converter with multi-provider support. Built for production scale (1000+ tables) with Clean Architecture.
5
5
  Project-URL: Homepage, https://github.com/luiscarbonel1991/nlp2sql
6
6
  Project-URL: Bug Tracker, https://github.com/luiscarbonel1991/nlp2sql/issues
@@ -74,6 +74,8 @@ Requires-Dist: mysql-connector-python>=8.0.0; extra == 'mysql'
74
74
  Requires-Dist: pymysql>=1.1.0; extra == 'mysql'
75
75
  Provides-Extra: oracle
76
76
  Requires-Dist: oracledb>=2.0.0; extra == 'oracle'
77
+ Provides-Extra: pgvector
78
+ Requires-Dist: pgvector>=0.2.5; extra == 'pgvector'
77
79
  Description-Content-Type: text/markdown
78
80
 
79
81
  <p align="center">
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  postgres:
3
- image: postgres:${POSTGRES_VERSION:-16}
3
+ image: pgvector/pgvector:pg${POSTGRES_VERSION:-16}
4
4
  container_name: ${SIMPLE_CONTAINER_NAME:-nlp2sql-postgres}
5
5
  environment:
6
6
  POSTGRES_USER: ${SIMPLE_DB_USER:-testuser}
@@ -1,3 +1,3 @@
1
1
  """nlp2sql MCP Server - Expose nlp2sql as MCP tools."""
2
2
 
3
- __version__ = "0.2.0rc6"
3
+ __version__ = "0.2.0rc14"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nlp2sql-mcp"
3
- version = "0.1.0"
3
+ version = "0.2.0rc14"
4
4
  description = "MCP server for nlp2sql - Natural Language to SQL conversion"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -21,4 +21,4 @@ build-backend = "hatchling.build"
21
21
  [tool.mcp]
22
22
  name = "nlp2sql"
23
23
  description = "Convert natural language queries to SQL using multiple AI providers"
24
- version = "0.1.0"
24
+ version = "0.2.0rc14"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nlp2sql"
3
- version = "0.2.0rc13"
3
+ version = "0.2.0rc14"
4
4
  description = "Enterprise-ready Natural Language to SQL converter with multi-provider support. Built for production scale (1000+ tables) with Clean Architecture."
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -57,6 +57,7 @@ all-providers = ["anthropic>=0.18.0", "google-generativeai>=0.3.0"]
57
57
  embeddings-local = ["sentence-transformers>=2.5.0"]
58
58
  embeddings-openai = []
59
59
  all-embeddings = ["sentence-transformers>=2.5.0"]
60
+ pgvector = ["pgvector>=0.2.5"]
60
61
  dev = [
61
62
  "pytest>=7.4.0",
62
63
  "pytest-asyncio>=0.21.0",
@@ -46,7 +46,7 @@ from .ports.semantic_validator import SemanticValidatorPort
46
46
  from .schema.example_store import ExampleStore
47
47
  from .services.query_service import QueryGenerationService
48
48
 
49
- __version__ = "0.2.0rc13"
49
+ __version__ = "0.2.0rc14"
50
50
  __author__ = "Luis Carbonel"
51
51
  __email__ = "devhighlevel@gmail.com"
52
52
 
@@ -7,3 +7,11 @@ __all__ = [
7
7
  "LocalEmbeddingAdapter",
8
8
  "OpenAIEmbeddingAdapter",
9
9
  ]
10
+
11
+ # Optional: pgvector-backed example repository (requires the [pgvector] extra)
12
+ try:
13
+ from .pgvector_example_repository import PgvectorExampleRepository
14
+ except ImportError:
15
+ pass
16
+ else:
17
+ __all__.append("PgvectorExampleRepository")