sqlspec 0.36.0__cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
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.
- ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/__init__.py +140 -0
- sqlspec/__main__.py +12 -0
- sqlspec/__metadata__.py +14 -0
- sqlspec/_serialization.py +315 -0
- sqlspec/_typing.py +700 -0
- sqlspec/adapters/__init__.py +0 -0
- sqlspec/adapters/adbc/__init__.py +5 -0
- sqlspec/adapters/adbc/_typing.py +82 -0
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +1273 -0
- sqlspec/adapters/adbc/config.py +295 -0
- sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/core.py +735 -0
- sqlspec/adapters/adbc/data_dictionary.py +334 -0
- sqlspec/adapters/adbc/driver.py +529 -0
- sqlspec/adapters/adbc/events/__init__.py +5 -0
- sqlspec/adapters/adbc/events/store.py +285 -0
- sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec/adapters/adbc/litestar/store.py +502 -0
- sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/type_converter.py +140 -0
- sqlspec/adapters/aiosqlite/__init__.py +25 -0
- sqlspec/adapters/aiosqlite/_typing.py +82 -0
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +818 -0
- sqlspec/adapters/aiosqlite/config.py +334 -0
- sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/aiosqlite/core.py +315 -0
- sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
- sqlspec/adapters/aiosqlite/driver.py +313 -0
- sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/events/store.py +20 -0
- sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
- sqlspec/adapters/aiosqlite/pool.py +533 -0
- sqlspec/adapters/asyncmy/__init__.py +21 -0
- sqlspec/adapters/asyncmy/_typing.py +87 -0
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +703 -0
- sqlspec/adapters/asyncmy/config.py +302 -0
- sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncmy/core.py +360 -0
- sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
- sqlspec/adapters/asyncmy/driver.py +383 -0
- sqlspec/adapters/asyncmy/events/__init__.py +5 -0
- sqlspec/adapters/asyncmy/events/store.py +104 -0
- sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- sqlspec/adapters/asyncpg/__init__.py +19 -0
- sqlspec/adapters/asyncpg/_typing.py +88 -0
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +748 -0
- sqlspec/adapters/asyncpg/config.py +569 -0
- sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncpg/core.py +367 -0
- sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
- sqlspec/adapters/asyncpg/driver.py +487 -0
- sqlspec/adapters/asyncpg/events/__init__.py +6 -0
- sqlspec/adapters/asyncpg/events/backend.py +286 -0
- sqlspec/adapters/asyncpg/events/store.py +40 -0
- sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncpg/litestar/store.py +251 -0
- sqlspec/adapters/bigquery/__init__.py +14 -0
- sqlspec/adapters/bigquery/_typing.py +86 -0
- sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec/adapters/bigquery/adk/store.py +827 -0
- sqlspec/adapters/bigquery/config.py +353 -0
- sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/core.py +715 -0
- sqlspec/adapters/bigquery/data_dictionary.py +128 -0
- sqlspec/adapters/bigquery/driver.py +548 -0
- sqlspec/adapters/bigquery/events/__init__.py +5 -0
- sqlspec/adapters/bigquery/events/store.py +139 -0
- sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec/adapters/bigquery/litestar/store.py +325 -0
- sqlspec/adapters/bigquery/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/type_converter.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
- sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
- sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
- sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
- sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
- sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/driver.py +144 -0
- sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
- sqlspec/adapters/cockroach_psycopg/__init__.py +38 -0
- sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
- sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
- sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
- sqlspec/adapters/cockroach_psycopg/config.py +484 -0
- sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_psycopg/core.py +63 -0
- sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
- sqlspec/adapters/cockroach_psycopg/driver.py +284 -0
- sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
- sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
- sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_psycopg/litestar/store.py +325 -0
- sqlspec/adapters/duckdb/__init__.py +25 -0
- sqlspec/adapters/duckdb/_typing.py +81 -0
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +850 -0
- sqlspec/adapters/duckdb/config.py +463 -0
- sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/core.py +257 -0
- sqlspec/adapters/duckdb/data_dictionary.py +140 -0
- sqlspec/adapters/duckdb/driver.py +430 -0
- sqlspec/adapters/duckdb/events/__init__.py +5 -0
- sqlspec/adapters/duckdb/events/store.py +57 -0
- sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec/adapters/duckdb/litestar/store.py +330 -0
- sqlspec/adapters/duckdb/pool.py +293 -0
- sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/type_converter.py +118 -0
- sqlspec/adapters/mock/__init__.py +72 -0
- sqlspec/adapters/mock/_typing.py +147 -0
- sqlspec/adapters/mock/config.py +483 -0
- sqlspec/adapters/mock/core.py +319 -0
- sqlspec/adapters/mock/data_dictionary.py +366 -0
- sqlspec/adapters/mock/driver.py +721 -0
- sqlspec/adapters/mysqlconnector/__init__.py +36 -0
- sqlspec/adapters/mysqlconnector/_typing.py +141 -0
- sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
- sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
- sqlspec/adapters/mysqlconnector/config.py +394 -0
- sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/mysqlconnector/core.py +303 -0
- sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
- sqlspec/adapters/mysqlconnector/driver.py +483 -0
- sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
- sqlspec/adapters/mysqlconnector/events/store.py +98 -0
- sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
- sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
- sqlspec/adapters/oracledb/__init__.py +60 -0
- sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
- sqlspec/adapters/oracledb/_typing.py +182 -0
- sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
- sqlspec/adapters/oracledb/adk/__init__.py +10 -0
- sqlspec/adapters/oracledb/adk/store.py +2369 -0
- sqlspec/adapters/oracledb/config.py +550 -0
- sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/core.py +543 -0
- sqlspec/adapters/oracledb/data_dictionary.py +536 -0
- sqlspec/adapters/oracledb/driver.py +1229 -0
- sqlspec/adapters/oracledb/events/__init__.py +16 -0
- sqlspec/adapters/oracledb/events/backend.py +347 -0
- sqlspec/adapters/oracledb/events/store.py +420 -0
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +781 -0
- sqlspec/adapters/oracledb/migrations.py +535 -0
- sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/type_converter.py +211 -0
- sqlspec/adapters/psqlpy/__init__.py +17 -0
- sqlspec/adapters/psqlpy/_typing.py +79 -0
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +766 -0
- sqlspec/adapters/psqlpy/config.py +304 -0
- sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/core.py +480 -0
- sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
- sqlspec/adapters/psqlpy/driver.py +438 -0
- sqlspec/adapters/psqlpy/events/__init__.py +6 -0
- sqlspec/adapters/psqlpy/events/backend.py +310 -0
- sqlspec/adapters/psqlpy/events/store.py +20 -0
- sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec/adapters/psqlpy/litestar/store.py +270 -0
- sqlspec/adapters/psqlpy/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/type_converter.py +113 -0
- sqlspec/adapters/psycopg/__init__.py +32 -0
- sqlspec/adapters/psycopg/_typing.py +164 -0
- sqlspec/adapters/psycopg/adk/__init__.py +10 -0
- sqlspec/adapters/psycopg/adk/store.py +1387 -0
- sqlspec/adapters/psycopg/config.py +576 -0
- sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/core.py +450 -0
- sqlspec/adapters/psycopg/data_dictionary.py +289 -0
- sqlspec/adapters/psycopg/driver.py +975 -0
- sqlspec/adapters/psycopg/events/__init__.py +20 -0
- sqlspec/adapters/psycopg/events/backend.py +458 -0
- sqlspec/adapters/psycopg/events/store.py +42 -0
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +552 -0
- sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/type_converter.py +93 -0
- sqlspec/adapters/pymysql/__init__.py +21 -0
- sqlspec/adapters/pymysql/_typing.py +71 -0
- sqlspec/adapters/pymysql/adk/__init__.py +5 -0
- sqlspec/adapters/pymysql/adk/store.py +540 -0
- sqlspec/adapters/pymysql/config.py +195 -0
- sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/pymysql/core.py +299 -0
- sqlspec/adapters/pymysql/data_dictionary.py +122 -0
- sqlspec/adapters/pymysql/driver.py +259 -0
- sqlspec/adapters/pymysql/events/__init__.py +5 -0
- sqlspec/adapters/pymysql/events/store.py +50 -0
- sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
- sqlspec/adapters/pymysql/litestar/store.py +232 -0
- sqlspec/adapters/pymysql/pool.py +137 -0
- sqlspec/adapters/spanner/__init__.py +40 -0
- sqlspec/adapters/spanner/_typing.py +86 -0
- sqlspec/adapters/spanner/adk/__init__.py +5 -0
- sqlspec/adapters/spanner/adk/store.py +732 -0
- sqlspec/adapters/spanner/config.py +352 -0
- sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/core.py +188 -0
- sqlspec/adapters/spanner/data_dictionary.py +120 -0
- sqlspec/adapters/spanner/dialect/__init__.py +6 -0
- sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
- sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
- sqlspec/adapters/spanner/driver.py +373 -0
- sqlspec/adapters/spanner/events/__init__.py +5 -0
- sqlspec/adapters/spanner/events/store.py +187 -0
- sqlspec/adapters/spanner/litestar/__init__.py +5 -0
- sqlspec/adapters/spanner/litestar/store.py +291 -0
- sqlspec/adapters/spanner/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/type_converter.py +331 -0
- sqlspec/adapters/sqlite/__init__.py +19 -0
- sqlspec/adapters/sqlite/_typing.py +80 -0
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +958 -0
- sqlspec/adapters/sqlite/config.py +280 -0
- sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/core.py +312 -0
- sqlspec/adapters/sqlite/data_dictionary.py +202 -0
- sqlspec/adapters/sqlite/driver.py +359 -0
- sqlspec/adapters/sqlite/events/__init__.py +5 -0
- sqlspec/adapters/sqlite/events/store.py +20 -0
- sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/sqlite/litestar/store.py +316 -0
- sqlspec/adapters/sqlite/pool.py +198 -0
- sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/type_converter.py +114 -0
- sqlspec/base.py +747 -0
- sqlspec/builder/__init__.py +179 -0
- sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_base.py +1022 -0
- sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_column.py +521 -0
- sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_ddl.py +1642 -0
- sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_delete.py +95 -0
- sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_dml.py +365 -0
- sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_explain.py +579 -0
- sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_expression_wrappers.py +46 -0
- sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_factory.py +1697 -0
- sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_insert.py +328 -0
- sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_join.py +499 -0
- sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_merge.py +821 -0
- sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_parsing_utils.py +297 -0
- sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_select.py +1660 -0
- sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_temporal.py +139 -0
- sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_update.py +173 -0
- sqlspec/builder/_vector_expressions.py +267 -0
- sqlspec/cli.py +911 -0
- sqlspec/config.py +1755 -0
- sqlspec/core/__init__.py +374 -0
- sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/_correlation.py +176 -0
- sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/cache.py +1069 -0
- sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/compiler.py +954 -0
- sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/explain.py +275 -0
- sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/filters.py +952 -0
- sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/hashing.py +262 -0
- sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/metrics.py +83 -0
- sqlspec/core/parameters/__init__.py +71 -0
- sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_alignment.py +270 -0
- sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_converter.py +543 -0
- sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_processor.py +505 -0
- sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_registry.py +206 -0
- sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_transformers.py +292 -0
- sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_types.py +499 -0
- sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_validator.py +180 -0
- sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/pipeline.py +319 -0
- sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/query_modifiers.py +437 -0
- sqlspec/core/result/__init__.py +23 -0
- sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_base.py +1121 -0
- sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_io.py +28 -0
- sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/splitter.py +966 -0
- sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/stack.py +163 -0
- sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/statement.py +1503 -0
- sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/type_converter.py +339 -0
- sqlspec/data_dictionary/__init__.py +22 -0
- sqlspec/data_dictionary/_loader.py +123 -0
- sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_registry.py +74 -0
- sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_types.py +121 -0
- sqlspec/data_dictionary/dialects/__init__.py +21 -0
- sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/bigquery.py +49 -0
- sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
- sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/duckdb.py +47 -0
- sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/mysql.py +42 -0
- sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/oracle.py +34 -0
- sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/postgres.py +46 -0
- sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/spanner.py +37 -0
- sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/sqlite.py +42 -0
- sqlspec/data_dictionary/sql/.gitkeep +0 -0
- sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
- sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
- sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
- sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
- sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
- sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
- sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
- sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
- sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
- sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
- sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
- sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
- sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
- sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
- sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
- sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
- sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
- sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
- sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
- sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
- sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
- sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
- sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
- sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
- sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
- sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
- sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
- sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
- sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
- sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
- sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
- sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
- sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
- sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
- sqlspec/driver/__init__.py +32 -0
- sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_async.py +1737 -0
- sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_common.py +1478 -0
- sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sql_helpers.py +148 -0
- sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_storage_helpers.py +144 -0
- sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sync.py +1710 -0
- sqlspec/exceptions.py +338 -0
- sqlspec/extensions/__init__.py +0 -0
- sqlspec/extensions/adk/__init__.py +70 -0
- sqlspec/extensions/adk/_types.py +51 -0
- sqlspec/extensions/adk/converters.py +172 -0
- sqlspec/extensions/adk/memory/__init__.py +69 -0
- sqlspec/extensions/adk/memory/_types.py +30 -0
- sqlspec/extensions/adk/memory/converters.py +149 -0
- sqlspec/extensions/adk/memory/service.py +217 -0
- sqlspec/extensions/adk/memory/store.py +569 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +225 -0
- sqlspec/extensions/adk/store.py +567 -0
- sqlspec/extensions/events/__init__.py +51 -0
- sqlspec/extensions/events/_channel.py +703 -0
- sqlspec/extensions/events/_hints.py +45 -0
- sqlspec/extensions/events/_models.py +23 -0
- sqlspec/extensions/events/_payload.py +69 -0
- sqlspec/extensions/events/_protocols.py +134 -0
- sqlspec/extensions/events/_queue.py +461 -0
- sqlspec/extensions/events/_store.py +209 -0
- sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
- sqlspec/extensions/events/migrations/__init__.py +3 -0
- sqlspec/extensions/fastapi/__init__.py +19 -0
- sqlspec/extensions/fastapi/extension.py +351 -0
- sqlspec/extensions/fastapi/providers.py +607 -0
- sqlspec/extensions/flask/__init__.py +37 -0
- sqlspec/extensions/flask/_state.py +76 -0
- sqlspec/extensions/flask/_utils.py +71 -0
- sqlspec/extensions/flask/extension.py +519 -0
- sqlspec/extensions/litestar/__init__.py +28 -0
- sqlspec/extensions/litestar/_utils.py +52 -0
- sqlspec/extensions/litestar/channels.py +165 -0
- sqlspec/extensions/litestar/cli.py +102 -0
- sqlspec/extensions/litestar/config.py +90 -0
- sqlspec/extensions/litestar/handlers.py +316 -0
- sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec/extensions/litestar/plugin.py +671 -0
- sqlspec/extensions/litestar/providers.py +526 -0
- sqlspec/extensions/litestar/store.py +296 -0
- sqlspec/extensions/otel/__init__.py +58 -0
- sqlspec/extensions/prometheus/__init__.py +113 -0
- sqlspec/extensions/starlette/__init__.py +19 -0
- sqlspec/extensions/starlette/_state.py +30 -0
- sqlspec/extensions/starlette/_utils.py +96 -0
- sqlspec/extensions/starlette/extension.py +346 -0
- sqlspec/extensions/starlette/middleware.py +235 -0
- sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/loader.py +702 -0
- sqlspec/migrations/__init__.py +36 -0
- sqlspec/migrations/base.py +731 -0
- sqlspec/migrations/commands.py +1232 -0
- sqlspec/migrations/context.py +157 -0
- sqlspec/migrations/fix.py +204 -0
- sqlspec/migrations/loaders.py +443 -0
- sqlspec/migrations/runner.py +1172 -0
- sqlspec/migrations/templates.py +234 -0
- sqlspec/migrations/tracker.py +611 -0
- sqlspec/migrations/utils.py +256 -0
- sqlspec/migrations/validation.py +207 -0
- sqlspec/migrations/version.py +446 -0
- sqlspec/observability/__init__.py +55 -0
- sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_common.py +77 -0
- sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_config.py +348 -0
- sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_diagnostics.py +74 -0
- sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_dispatcher.py +152 -0
- sqlspec/observability/_formatters/__init__.py +13 -0
- sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_aws.py +102 -0
- sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_azure.py +96 -0
- sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_base.py +57 -0
- sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_gcp.py +131 -0
- sqlspec/observability/_formatting.py +58 -0
- sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_observer.py +357 -0
- sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_runtime.py +420 -0
- sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_sampling.py +188 -0
- sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_spans.py +161 -0
- sqlspec/protocols.py +916 -0
- sqlspec/py.typed +0 -0
- sqlspec/storage/__init__.py +48 -0
- sqlspec/storage/_utils.py +104 -0
- sqlspec/storage/backends/__init__.py +1 -0
- sqlspec/storage/backends/base.py +253 -0
- sqlspec/storage/backends/fsspec.py +529 -0
- sqlspec/storage/backends/local.py +441 -0
- sqlspec/storage/backends/obstore.py +916 -0
- sqlspec/storage/errors.py +104 -0
- sqlspec/storage/pipeline.py +582 -0
- sqlspec/storage/registry.py +301 -0
- sqlspec/typing.py +395 -0
- sqlspec/utils/__init__.py +7 -0
- sqlspec/utils/arrow_helpers.py +318 -0
- sqlspec/utils/config_tools.py +332 -0
- sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/correlation.py +134 -0
- sqlspec/utils/deprecation.py +190 -0
- sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/fixtures.py +258 -0
- sqlspec/utils/logging.py +222 -0
- sqlspec/utils/module_loader.py +306 -0
- sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/portal.py +375 -0
- sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/schema.py +485 -0
- sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/serializers.py +408 -0
- sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/singleton.py +41 -0
- sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/sync_tools.py +311 -0
- sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/text.py +108 -0
- sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_converters.py +128 -0
- sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_guards.py +1360 -0
- sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/uuids.py +225 -0
- sqlspec-0.36.0.dist-info/METADATA +205 -0
- sqlspec-0.36.0.dist-info/RECORD +531 -0
- sqlspec-0.36.0.dist-info/WHEEL +7 -0
- sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
- sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Type definitions for ADK memory extension.
|
|
2
|
+
|
|
3
|
+
These types define the database record structures for storing memory entries.
|
|
4
|
+
They are separate from the Pydantic models to keep mypyc compilation working.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from typing import Any, TypedDict
|
|
9
|
+
|
|
10
|
+
__all__ = ("MemoryRecord",)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class MemoryRecord(TypedDict):
|
|
14
|
+
"""Database record for a memory entry.
|
|
15
|
+
|
|
16
|
+
Represents the schema for memory entries stored in the database.
|
|
17
|
+
Contains extracted content from ADK events for searchable long-term memory.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
id: str
|
|
21
|
+
session_id: str
|
|
22
|
+
app_name: str
|
|
23
|
+
user_id: str
|
|
24
|
+
event_id: str
|
|
25
|
+
author: "str | None"
|
|
26
|
+
timestamp: datetime
|
|
27
|
+
content_json: "dict[str, Any]"
|
|
28
|
+
content_text: str
|
|
29
|
+
metadata_json: "dict[str, Any] | None"
|
|
30
|
+
inserted_at: datetime
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""Conversion functions for ADK memory records.
|
|
2
|
+
|
|
3
|
+
Provides utilities for extracting searchable text from ADK Content objects
|
|
4
|
+
and converting between ADK models and database records.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import uuid
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
from sqlspec.extensions.adk.memory._types import MemoryRecord
|
|
12
|
+
from sqlspec.utils.logging import get_logger
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from google.adk.events.event import Event
|
|
16
|
+
from google.adk.memory.memory_entry import MemoryEntry
|
|
17
|
+
from google.adk.sessions import Session
|
|
18
|
+
from google.genai import types
|
|
19
|
+
|
|
20
|
+
logger = get_logger("sqlspec.extensions.adk.memory.converters")
|
|
21
|
+
|
|
22
|
+
__all__ = ("event_to_memory_record", "extract_content_text", "record_to_memory_entry", "session_to_memory_records")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def extract_content_text(content: "types.Content") -> str:
|
|
26
|
+
"""Extract plain text from ADK Content for search indexing.
|
|
27
|
+
|
|
28
|
+
Handles multi-modal Content.parts including text, function calls,
|
|
29
|
+
and other part types. Non-text parts are indexed by their type
|
|
30
|
+
for discoverability.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
content: ADK Content object with parts list.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Space-separated plain text extracted from all parts.
|
|
37
|
+
"""
|
|
38
|
+
parts_text: list[str] = []
|
|
39
|
+
|
|
40
|
+
if not content.parts:
|
|
41
|
+
return ""
|
|
42
|
+
|
|
43
|
+
for part in content.parts:
|
|
44
|
+
if part.text:
|
|
45
|
+
parts_text.append(part.text)
|
|
46
|
+
elif part.function_call is not None:
|
|
47
|
+
parts_text.append(f"function:{part.function_call.name}")
|
|
48
|
+
elif part.function_response is not None:
|
|
49
|
+
parts_text.append(f"response:{part.function_response.name}")
|
|
50
|
+
|
|
51
|
+
return " ".join(parts_text)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def event_to_memory_record(event: "Event", session_id: str, app_name: str, user_id: str) -> "MemoryRecord | None":
|
|
55
|
+
"""Convert an ADK Event to a memory record.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
event: ADK Event object.
|
|
59
|
+
session_id: ID of the parent session.
|
|
60
|
+
app_name: Name of the application.
|
|
61
|
+
user_id: ID of the user.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
MemoryRecord for database storage, or None if event has no content.
|
|
65
|
+
"""
|
|
66
|
+
if event.content is None:
|
|
67
|
+
return None
|
|
68
|
+
|
|
69
|
+
content_text = extract_content_text(event.content)
|
|
70
|
+
if not content_text.strip():
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
content_dict = event.content.model_dump(exclude_none=True, mode="json")
|
|
74
|
+
|
|
75
|
+
custom_metadata = event.custom_metadata or None
|
|
76
|
+
|
|
77
|
+
now = datetime.now(timezone.utc)
|
|
78
|
+
|
|
79
|
+
return MemoryRecord(
|
|
80
|
+
id=str(uuid.uuid4()),
|
|
81
|
+
session_id=session_id,
|
|
82
|
+
app_name=app_name,
|
|
83
|
+
user_id=user_id,
|
|
84
|
+
event_id=event.id,
|
|
85
|
+
author=event.author,
|
|
86
|
+
timestamp=datetime.fromtimestamp(event.timestamp, tz=timezone.utc),
|
|
87
|
+
content_json=content_dict,
|
|
88
|
+
content_text=content_text,
|
|
89
|
+
metadata_json=custom_metadata,
|
|
90
|
+
inserted_at=now,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def session_to_memory_records(session: "Session") -> list["MemoryRecord"]:
|
|
95
|
+
"""Convert a completed ADK Session to a list of memory records.
|
|
96
|
+
|
|
97
|
+
Extracts all events with content from the session and converts
|
|
98
|
+
them to memory records for storage.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
session: ADK Session object with events.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
List of MemoryRecord objects for database storage.
|
|
105
|
+
"""
|
|
106
|
+
records: list[MemoryRecord] = []
|
|
107
|
+
|
|
108
|
+
if not session.events:
|
|
109
|
+
return records
|
|
110
|
+
|
|
111
|
+
for event in session.events:
|
|
112
|
+
record = event_to_memory_record(
|
|
113
|
+
event=event, session_id=session.id, app_name=session.app_name, user_id=session.user_id
|
|
114
|
+
)
|
|
115
|
+
if record is not None:
|
|
116
|
+
records.append(record)
|
|
117
|
+
|
|
118
|
+
return records
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def record_to_memory_entry(record: "MemoryRecord") -> "MemoryEntry":
|
|
122
|
+
"""Convert a database record to an ADK MemoryEntry.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
record: Memory database record.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
ADK MemoryEntry object.
|
|
129
|
+
"""
|
|
130
|
+
from google.adk.memory.memory_entry import MemoryEntry
|
|
131
|
+
from google.genai import types
|
|
132
|
+
|
|
133
|
+
content = types.Content.model_validate(record["content_json"])
|
|
134
|
+
|
|
135
|
+
timestamp_str = record["timestamp"].isoformat() if record["timestamp"] else None
|
|
136
|
+
|
|
137
|
+
return MemoryEntry(content=content, author=record["author"], timestamp=timestamp_str)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def records_to_memory_entries(records: list["MemoryRecord"]) -> list["Any"]:
|
|
141
|
+
"""Convert a list of database records to ADK MemoryEntry objects.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
records: List of memory database records.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
List of ADK MemoryEntry objects.
|
|
148
|
+
"""
|
|
149
|
+
return [record_to_memory_entry(record) for record in records]
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"""SQLSpec-backed memory service for Google ADK."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from google.adk.memory.base_memory_service import BaseMemoryService, SearchMemoryResponse
|
|
6
|
+
|
|
7
|
+
from sqlspec.extensions.adk.memory.converters import records_to_memory_entries, session_to_memory_records
|
|
8
|
+
from sqlspec.utils.logging import get_logger
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from google.adk.memory.memory_entry import MemoryEntry
|
|
12
|
+
from google.adk.sessions import Session
|
|
13
|
+
|
|
14
|
+
from sqlspec.extensions.adk.memory.store import BaseAsyncADKMemoryStore, BaseSyncADKMemoryStore
|
|
15
|
+
|
|
16
|
+
logger = get_logger("sqlspec.extensions.adk.memory.service")
|
|
17
|
+
|
|
18
|
+
__all__ = ("SQLSpecMemoryService", "SQLSpecSyncMemoryService")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class SQLSpecMemoryService(BaseMemoryService):
|
|
22
|
+
"""SQLSpec-backed implementation of BaseMemoryService.
|
|
23
|
+
|
|
24
|
+
Provides memory entry storage using SQLSpec database adapters.
|
|
25
|
+
Delegates all database operations to a store implementation.
|
|
26
|
+
|
|
27
|
+
ADK BaseMemoryService defines two core methods:
|
|
28
|
+
- add_session_to_memory(session) - Ingests session into memory (returns void)
|
|
29
|
+
- search_memory(app_name, user_id, query) - Searches stored memories
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
store: Database store implementation (e.g., AsyncpgADKMemoryStore).
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
from sqlspec.adapters.asyncpg import AsyncpgConfig
|
|
36
|
+
from sqlspec.adapters.asyncpg.adk.store import AsyncpgADKMemoryStore
|
|
37
|
+
from sqlspec.extensions.adk.memory.service import SQLSpecMemoryService
|
|
38
|
+
|
|
39
|
+
config = AsyncpgConfig(
|
|
40
|
+
connection_config={"dsn": "postgresql://..."},
|
|
41
|
+
extension_config={
|
|
42
|
+
"adk": {
|
|
43
|
+
"memory_table": "adk_memory_entries",
|
|
44
|
+
"memory_use_fts": True,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
store = AsyncpgADKMemoryStore(config)
|
|
49
|
+
await store.ensure_tables()
|
|
50
|
+
|
|
51
|
+
service = SQLSpecMemoryService(store)
|
|
52
|
+
await service.add_session_to_memory(completed_session)
|
|
53
|
+
|
|
54
|
+
response = await service.search_memory(
|
|
55
|
+
app_name="my_app",
|
|
56
|
+
user_id="user123",
|
|
57
|
+
query="previous conversation about Python"
|
|
58
|
+
)
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def __init__(self, store: "BaseAsyncADKMemoryStore") -> None:
|
|
62
|
+
"""Initialize the memory service.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
store: Database store implementation.
|
|
66
|
+
"""
|
|
67
|
+
self._store = store
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def store(self) -> "BaseAsyncADKMemoryStore":
|
|
71
|
+
"""Return the database store."""
|
|
72
|
+
return self._store
|
|
73
|
+
|
|
74
|
+
async def add_session_to_memory(self, session: "Session") -> None:
|
|
75
|
+
"""Add a completed session to the memory store.
|
|
76
|
+
|
|
77
|
+
Extracts all events with content from the session and stores them
|
|
78
|
+
as searchable memory entries. Uses UPSERT to skip duplicates.
|
|
79
|
+
|
|
80
|
+
The Session object contains app_name and user_id properties.
|
|
81
|
+
Events are converted to memory records and bulk inserted via store.
|
|
82
|
+
Returns void per ADK BaseMemoryService contract.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
session: Completed ADK Session with events.
|
|
86
|
+
|
|
87
|
+
Notes:
|
|
88
|
+
- Events without content are skipped
|
|
89
|
+
- Duplicate event_ids are silently ignored (idempotent)
|
|
90
|
+
- Uses bulk insert for efficiency
|
|
91
|
+
"""
|
|
92
|
+
records = session_to_memory_records(session)
|
|
93
|
+
|
|
94
|
+
if not records:
|
|
95
|
+
logger.debug(
|
|
96
|
+
"No content to store for session %s (app=%s, user=%s)", session.id, session.app_name, session.user_id
|
|
97
|
+
)
|
|
98
|
+
return
|
|
99
|
+
|
|
100
|
+
inserted_count = await self._store.insert_memory_entries(records)
|
|
101
|
+
logger.debug(
|
|
102
|
+
"Stored %d memory entries for session %s (total events: %d)", inserted_count, session.id, len(records)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
async def search_memory(self, *, app_name: str, user_id: str, query: str) -> "SearchMemoryResponse":
|
|
106
|
+
"""Search memory entries by text query.
|
|
107
|
+
|
|
108
|
+
Uses the store's configured search strategy (simple ILIKE or FTS).
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
app_name: Name of the application.
|
|
112
|
+
user_id: ID of the user.
|
|
113
|
+
query: Text query to search for.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
SearchMemoryResponse with memories: List[MemoryEntry].
|
|
117
|
+
"""
|
|
118
|
+
records = await self._store.search_entries(query=query, app_name=app_name, user_id=user_id)
|
|
119
|
+
|
|
120
|
+
memories = records_to_memory_entries(records)
|
|
121
|
+
|
|
122
|
+
logger.debug("Found %d memories for query '%s' (app=%s, user=%s)", len(memories), query[:50], app_name, user_id)
|
|
123
|
+
|
|
124
|
+
return SearchMemoryResponse(memories=memories)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class SQLSpecSyncMemoryService:
|
|
128
|
+
"""Synchronous SQLSpec-backed memory service.
|
|
129
|
+
|
|
130
|
+
Provides memory entry storage using SQLSpec sync database adapters.
|
|
131
|
+
This is a sync-compatible version for use with sync drivers like SQLite.
|
|
132
|
+
|
|
133
|
+
Note: This does NOT inherit from BaseMemoryService since ADK's base class
|
|
134
|
+
requires async methods. Use this for sync-only deployments.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
store: Sync database store implementation.
|
|
138
|
+
|
|
139
|
+
Example:
|
|
140
|
+
from sqlspec.adapters.sqlite import SqliteConfig
|
|
141
|
+
from sqlspec.adapters.sqlite.adk.store import SqliteADKMemoryStore
|
|
142
|
+
from sqlspec.extensions.adk.memory.service import SQLSpecSyncMemoryService
|
|
143
|
+
|
|
144
|
+
config = SqliteConfig(
|
|
145
|
+
connection_config={"database": "app.db"},
|
|
146
|
+
extension_config={
|
|
147
|
+
"adk": {
|
|
148
|
+
"memory_table": "adk_memory_entries",
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
store = SqliteADKMemoryStore(config)
|
|
153
|
+
store.ensure_tables()
|
|
154
|
+
|
|
155
|
+
service = SQLSpecSyncMemoryService(store)
|
|
156
|
+
service.add_session_to_memory(completed_session)
|
|
157
|
+
|
|
158
|
+
memories = service.search_memory(
|
|
159
|
+
app_name="my_app",
|
|
160
|
+
user_id="user123",
|
|
161
|
+
query="Python discussion"
|
|
162
|
+
)
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
def __init__(self, store: "BaseSyncADKMemoryStore") -> None:
|
|
166
|
+
"""Initialize the sync memory service.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
store: Sync database store implementation.
|
|
170
|
+
"""
|
|
171
|
+
self._store = store
|
|
172
|
+
|
|
173
|
+
@property
|
|
174
|
+
def store(self) -> "BaseSyncADKMemoryStore":
|
|
175
|
+
"""Return the database store."""
|
|
176
|
+
return self._store
|
|
177
|
+
|
|
178
|
+
def add_session_to_memory(self, session: "Session") -> None:
|
|
179
|
+
"""Add a completed session to the memory store.
|
|
180
|
+
|
|
181
|
+
Extracts all events with content from the session and stores them
|
|
182
|
+
as searchable memory entries. Uses UPSERT to skip duplicates.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
session: Completed ADK Session with events.
|
|
186
|
+
"""
|
|
187
|
+
records = session_to_memory_records(session)
|
|
188
|
+
|
|
189
|
+
if not records:
|
|
190
|
+
logger.debug(
|
|
191
|
+
"No content to store for session %s (app=%s, user=%s)", session.id, session.app_name, session.user_id
|
|
192
|
+
)
|
|
193
|
+
return
|
|
194
|
+
|
|
195
|
+
inserted_count = self._store.insert_memory_entries(records)
|
|
196
|
+
logger.debug(
|
|
197
|
+
"Stored %d memory entries for session %s (total events: %d)", inserted_count, session.id, len(records)
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
def search_memory(self, *, app_name: str, user_id: str, query: str) -> list["MemoryEntry"]:
|
|
201
|
+
"""Search memory entries by text query.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
app_name: Name of the application.
|
|
205
|
+
user_id: ID of the user.
|
|
206
|
+
query: Text query to search for.
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
List of MemoryEntry objects.
|
|
210
|
+
"""
|
|
211
|
+
records = self._store.search_entries(query=query, app_name=app_name, user_id=user_id)
|
|
212
|
+
|
|
213
|
+
memories = records_to_memory_entries(records)
|
|
214
|
+
|
|
215
|
+
logger.debug("Found %d memories for query '%s' (app=%s, user=%s)", len(memories), query[:50], app_name, user_id)
|
|
216
|
+
|
|
217
|
+
return memories
|