You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* chore : internal spec added
* chore: remove local-only ignore rule
* feat(core): add CatalogEntry TypedDict as explicit schema contract
* refactor(core): remove RunContext contract check and run_query() from BaseComponent/BaseFlow
* refactor(flows): replace RunContext-based SequentialFlow with explicit value pipeline
- Remove RunComponent Protocol, _apply(), _run_steps()
- SequentialFlow.run() now takes and returns Any (plain value pipe)
- BaselineFlow demoted to deprecated alias with DeprecationWarning
* refactor(components/retrieval): change KeywordRetriever to explicit str → list[CatalogEntry] API
- run(run: RunContext) → run(query: str) -> list[CatalogEntry]
- Re-export CatalogEntry from retrieval __init__
* test: update tests to RunContext-free API
- Remove RunContext contract tests from test_core_base
- Update SequentialFlow tests to new value-pipe signature
- Add BaselineFlow deprecation warning assertion
- Update KeywordRetriever tests to str → list[CatalogEntry]
* docs: update BaseFlow and RunContext docs to reflect RunContext-free API
- Replace run_query()/RunContext examples with SequentialFlow.run(value)
- Mark RunContext as legacy utility in RunContext_ko.md
* refactor(core): make run() the public hook-bearing entry point, _run() the abstract impl
BaseComponent and BaseFlow now expose run() as the public API (with hook events),
while _run() becomes the abstract method subclasses implement.
__call__() is a convenience alias that delegates to run().
This fixes the design gap where direct .run() calls bypassed the hook system.
* feat(core): add LLMPort and DBPort protocols to ports.py
* feat(components): add SQLGenerator component
Implements run(query, schemas) -> str with BM25-retrieved schema context building,
LLMPort.invoke() call, block extraction, and ComponentError on missing block.
* feat(components): add SQLExecutor component
Implements run(sql) -> list[dict] with empty-sql guard and DBPort.execute() delegation.
* feat(flows): add BaselineNL2SQL end-to-end pipeline
Orchestrates KeywordRetriever → SQLGenerator → SQLExecutor with shared hook injection.
* feat(integrations): add AnthropicLLM, OpenAILLM, and SQLAlchemyDB integrations
AnthropicLLM: system message extraction, IntegrationMissingError on missing package.
OpenAILLM: raw openai SDK (not langchain-openai).
SQLAlchemyDB: SQLAlchemy 2.x text() wrapping and row._mapping conversion.
* feat: expose public API in __init__.py and add optional extras to pyproject.toml
Exports CatalogEntry, LLMPort, DBPort, KeywordRetriever, SQLGenerator, SQLExecutor,
BaselineNL2SQL, TraceHook, MemoryHook, NullHook, and exception classes.
Adds [anthropic] and [sqlalchemy] optional dependency groups.
* test: add tests for SQLGenerator, SQLExecutor, and BaselineNL2SQL e2e pipeline
FakeLLM and FakeDB defined inline (no external mock libraries).
E2E test verifies 3 component start events via MemoryHook.
* feat(integrations/llm): add api_key parameter and fix IntegrationMissingError message
Allow callers to pass an explicit API key to OpenAILLM and AnthropicLLM.
Remove the optional-extra hint from IntegrationMissingError since both
packages are now core dependencies.
* refactor(pyproject): promote anthropic and sqlalchemy to core dependencies
Remove [project.optional-dependencies] section. Both packages are
required for the e2e pipeline and should not be optional extras.
* feat(generation): add db_dialect parameter with per-dialect prompt files
SQLGenerator now accepts db_dialect (sqlite, postgresql, mysql,
bigquery, duckdb) and loads the matching prompt from
components/generation/prompts/{dialect}.md. system_prompt takes
precedence when both are provided.
BaselineNL2SQL forwards db_dialect to SQLGenerator.
* test(generation): add db_dialect tests for SQLGenerator
Covers: sqlite/postgresql prompt loading, unsupported dialect raises
ValueError, system_prompt overrides db_dialect.
* feat(scripts): add setup_sample_db.py for tutorial sample data
Creates customers/products/orders/order_items tables with Korean sample
data for SQLite (default) and PostgreSQL. Fixes postgres default URL to
match docker-compose-postgres.yml credentials (postgres:postgres).
* docs: add quickstart.md tutorial for first-time users
Covers installation, API key setup, sample DB creation, SQLAlchemyDB
connection, catalog definition, BaselineNL2SQL with db_dialect, Hook
tracing, customization, error handling, and a full feature checklist
runnable without real API keys using FakeLLM/FakeDB.
* feat(integrations/llm): add api_key param and fix IntegrationMissingError message
Add api_key: str | None = None to AnthropicLLM. Remove extra= from
IntegrationMissingError since anthropic is now a core dependency.
* style: apply black formatting
* chore: upgrade black pre-commit hook to 26.1.0
0 commit comments