memmachine-server 0.2.2__tar.gz → 0.2.4__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.
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/PKG-INFO +8 -1
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/README.md +7 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/pyproject.toml +5 -2
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/__init__.py +1 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/api/doc.py +77 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/api/spec.py +327 -7
- memmachine_server-0.2.4/src/memmachine/common/api/version.py +21 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/database_conf.py +43 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/mixin_confs.py +25 -18
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/episode_store/episode_model.py +1 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/errors.py +20 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/database_manager.py +39 -10
- memmachine_server-0.2.4/src/memmachine/common/rw_locks.py +145 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/session_manager/session_data_manager_sql_impl.py +79 -12
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/vector_graph_store/neo4j_vector_graph_store.py +2 -3
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/declarative_memory/declarative_memory.py +69 -24
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/episodic_memory.py +21 -11
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/episodic_memory_manager.py +136 -124
- memmachine_server-0.2.4/src/memmachine/episodic_memory/instance_lru_cache.py +236 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/long_term_memory/long_term_memory.py +33 -6
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/installation/memmachine_configure.py +44 -27
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/installation/utilities.py +10 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/main/memmachine.py +4 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/rest_client/client.py +38 -25
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/rest_client/memory.py +7 -3
- memmachine_server-0.2.4/src/memmachine/semantic_memory/storage/alembic_pg/script.py.mako +28 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/api_v2/mcp.py +4 -1
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/api_v2/router.py +23 -39
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/api_v2/service.py +58 -4
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/app.py +59 -41
- memmachine_server-0.2.4/src/memmachine/server/middleware.py +91 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/.gitignore +30 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/.prettierignore +18 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/.prettierrc +15 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/README.md +156 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/eslint.config.mjs +19 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/jest.config.ts +20 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/package-lock.json +10073 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/package.json +93 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/client/index.ts +9 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/client/memmachine-client.ts +118 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/client/memmachine-client.types.ts +34 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/env.d.ts +1 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/errors/api-error-handler.ts +20 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/errors/index.ts +8 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/errors/memmachine-api-error.ts +14 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/index.ts +13 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/memory/index.ts +20 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/memory/memmachine-memory.ts +315 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/memory/memmachine-memory.types.ts +166 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/project/index.ts +9 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/project/memmachine-project.ts +167 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/project/memmachine-project.types.ts +41 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/src/version.ts +1 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tests/api-error-handler.spec.ts +36 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tests/index.spec.ts +11 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tests/memmachine-client.spec.ts +52 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tests/memmachine-memory.spec.ts +149 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tests/memmachine-project.spec.ts +101 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tsconfig.json +44 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/tsup.config.ts +14 -0
- memmachine_server-0.2.4/src/memmachine-ts/rest_client/typedoc.json +4 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/PKG-INFO +8 -1
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/SOURCES.txt +35 -0
- memmachine_server-0.2.2/src/memmachine/episodic_memory/instance_lru_cache.py +0 -177
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/LICENSE +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/setup.cfg +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/api/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/default_episode_summary_system_prompt.txt +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/default_episode_summary_user_prompt.txt +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/embedder_conf.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/episodic_config.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/language_model_conf.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/log_conf.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/configuration/reranker_conf.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/data_types.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/embedder/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/embedder/amazon_bedrock_embedder.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/embedder/embedder.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/embedder/openai_embedder.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/embedder/sentence_transformer_embedder.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/episode_store/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/episode_store/count_caching_episode_storage.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/episode_store/episode_sqlalchemy_store.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/episode_store/episode_storage.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/filter/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/filter/filter_parser.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/filter/sql_filter_util.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/language_model/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/language_model/amazon_bedrock_language_model.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/language_model/language_model.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/language_model/openai_chat_completions_language_model.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/language_model/openai_responses_language_model.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/metrics_factory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/metrics_factory/metrics_factory.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/metrics_factory/prometheus_metrics_factory.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/amazon_bedrock_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/bm25_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/cohere_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/cross_encoder_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/embedder_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/identity_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/reranker/rrf_hybrid_reranker.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/embedder_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/language_model_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/reranker_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/resource_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/resource_manager/semantic_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/session_manager/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/session_manager/session_data_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/utils.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/vector_graph_store/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/vector_graph_store/data_types.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/common/vector_graph_store/vector_graph_store.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/declarative_memory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/declarative_memory/data_types.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/long_term_memory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/long_term_memory/service_locator.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/service_locator.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/short_term_memory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/short_term_memory/service_locator.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/episodic_memory/short_term_memory/short_term_memory.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/installation/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/installation/configuration_wizard.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/main/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/rest_client/README.md +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/rest_client/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/rest_client/project.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/semantic_ingestion.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/semantic_llm.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/semantic_memory.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/semantic_model.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/semantic_session_manager.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/env.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/001_initial_migration.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/3d6aaebdc526_sync_sqlalchemy_schema.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/62dff1150a46_add_created_at_to_history_add.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/79f00a9f2409_change_history_id_to_string.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/843f6d216d10_rename_semantic_type_to_semantic_.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/alembic_pg/versions/adb5618bd4ee_remove_history_table.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/neo4j_semantic_storage.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/sqlalchemy_pgvector_semantic.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/storage/storage_base.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/util/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/semantic_memory/util/semantic_prompt_template.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/api_v2/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/mcp_http.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/mcp_stdio.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/__init__.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/coding_style_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/crm_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/default_prompts.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/financial_analyst_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/health_assistant_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/profile_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/prompt_utilities.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine/server/prompt/writing_assistant_prompt.py +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/dependency_links.txt +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/entry_points.txt +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/requires.txt +0 -0
- {memmachine_server-0.2.2 → memmachine_server-0.2.4}/src/memmachine_server.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memmachine-server
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: MemMachine Server - The complete MemMachine memory system server with episodic and profile memory
|
|
5
5
|
Author-email: MemMachine <noreply@memmachine.ai>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -43,9 +43,16 @@ Dynamic: license-file
|
|
|
43
43
|
|
|
44
44
|
<div align="center">
|
|
45
45
|
|
|
46
|
+

|
|
46
47
|

|
|
47
48
|
[](https://deepwiki.com/MemMachine/MemMachine)
|
|
48
49
|

|
|
50
|
+
<br/>
|
|
51
|
+

|
|
52
|
+

|
|
53
|
+
<br/>
|
|
54
|
+

|
|
55
|
+

|
|
49
56
|
|
|
50
57
|
</div>
|
|
51
58
|
|
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
|
|
5
|
+

|
|
5
6
|

|
|
6
7
|
[](https://deepwiki.com/MemMachine/MemMachine)
|
|
7
8
|

|
|
9
|
+
<br/>
|
|
10
|
+

|
|
11
|
+

|
|
12
|
+
<br/>
|
|
13
|
+

|
|
14
|
+

|
|
8
15
|
|
|
9
16
|
</div>
|
|
10
17
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=68.0", "wheel"]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel", "setuptools-scm>=8.0"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "memmachine-server"
|
|
7
|
-
|
|
7
|
+
dynamic = ["version"]
|
|
8
8
|
dependencies = [
|
|
9
9
|
"alembic>=1.17.1",
|
|
10
10
|
"asyncpg>=0.31.0",
|
|
@@ -96,3 +96,6 @@ packages = [
|
|
|
96
96
|
|
|
97
97
|
[tool.setuptools.package-dir]
|
|
98
98
|
"" = "src"
|
|
99
|
+
|
|
100
|
+
[tool.setuptools_scm]
|
|
101
|
+
root = "../.."
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""API documentation strings for MemMachine server v2."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
from typing import ClassVar
|
|
4
6
|
|
|
5
7
|
|
|
@@ -77,6 +79,68 @@ class SpecDoc:
|
|
|
77
79
|
|
|
78
80
|
EPISODE_COUNT = "The total number of episodic memories in the project."
|
|
79
81
|
|
|
82
|
+
EPISODE_CONTENT = "The content payload of the episode."
|
|
83
|
+
|
|
84
|
+
EPISODE_PRODUCER_ID = "Identifier of the episode producer."
|
|
85
|
+
|
|
86
|
+
EPISODE_PRODUCER_ROLE = "Role of the producer (e.g., user/assistant/system)."
|
|
87
|
+
|
|
88
|
+
EPISODE_PRODUCED_FOR_ID = "Identifier of the intended recipient of the episode."
|
|
89
|
+
|
|
90
|
+
EPISODE_TYPE = "The type of episode being stored (e.g., message)."
|
|
91
|
+
|
|
92
|
+
EPISODE_METADATA = "Optional metadata associated with the episode."
|
|
93
|
+
|
|
94
|
+
EPISODE_CREATED_AT = "Timestamp when the episode was created."
|
|
95
|
+
|
|
96
|
+
EPISODE_UID = "Unique identifier for the episode."
|
|
97
|
+
|
|
98
|
+
EPISODE_SCORE = "Optional relevance score for the episode."
|
|
99
|
+
|
|
100
|
+
EPISODE_SESSION_KEY = "Session key associated with the episode."
|
|
101
|
+
|
|
102
|
+
EPISODE_SEQUENCE_NUM = "Sequence number within the session."
|
|
103
|
+
|
|
104
|
+
EPISODE_CONTENT_TYPE = "Content type of the episode."
|
|
105
|
+
|
|
106
|
+
EPISODE_FILTERABLE_METADATA = "Metadata indexed for filtering."
|
|
107
|
+
|
|
108
|
+
SEMANTIC_SET_ID = "Identifier of the semantic set."
|
|
109
|
+
|
|
110
|
+
SEMANTIC_CATEGORY = "Category of the semantic feature."
|
|
111
|
+
|
|
112
|
+
SEMANTIC_TAG = "Tag associated with the semantic feature."
|
|
113
|
+
|
|
114
|
+
SEMANTIC_FEATURE_NAME = "Name of the semantic feature."
|
|
115
|
+
|
|
116
|
+
SEMANTIC_VALUE = "Value of the semantic feature."
|
|
117
|
+
|
|
118
|
+
SEMANTIC_METADATA = "Storage metadata for the semantic feature."
|
|
119
|
+
|
|
120
|
+
SEMANTIC_METADATA_CITATIONS = "Episode IDs cited by this semantic feature."
|
|
121
|
+
|
|
122
|
+
SEMANTIC_METADATA_ID = "Identifier for the semantic feature."
|
|
123
|
+
|
|
124
|
+
SEMANTIC_METADATA_OTHER = "Additional storage metadata for the semantic feature."
|
|
125
|
+
|
|
126
|
+
EPISODIC_SHORT_EPISODES = "Matched short-term episodic entries."
|
|
127
|
+
|
|
128
|
+
EPISODIC_SHORT_SUMMARY = "Summaries of matched short-term episodes."
|
|
129
|
+
|
|
130
|
+
EPISODIC_LONG_EPISODES = "Matched long-term episodic entries."
|
|
131
|
+
|
|
132
|
+
EPISODIC_LONG_TERM = "Long-term episodic search results."
|
|
133
|
+
|
|
134
|
+
EPISODIC_SHORT_TERM = "Short-term episodic search results."
|
|
135
|
+
|
|
136
|
+
SEARCH_EPISODIC_MEMORY = "Episodic memory search results."
|
|
137
|
+
|
|
138
|
+
SEARCH_SEMANTIC_MEMORY = "Semantic memory search results."
|
|
139
|
+
|
|
140
|
+
LIST_EPISODIC_MEMORY = "Listed episodic memory entries."
|
|
141
|
+
|
|
142
|
+
LIST_SEMANTIC_MEMORY = "Listed semantic memory entries."
|
|
143
|
+
|
|
80
144
|
MEMORY_CONTENT = "The content or text of the message."
|
|
81
145
|
|
|
82
146
|
MEMORY_PRODUCER = """
|
|
@@ -128,6 +192,10 @@ class SpecDoc:
|
|
|
128
192
|
The maximum number of memories to return in the search results.
|
|
129
193
|
"""
|
|
130
194
|
|
|
195
|
+
SCORE_THRESHOLD = """
|
|
196
|
+
The minimum score for a memory to be included in the search results. Defaults to -inf (no threshold) represented as None. Meaningful only for certain ranking methods.
|
|
197
|
+
"""
|
|
198
|
+
|
|
131
199
|
QUERY = """
|
|
132
200
|
The natural language query used for semantic memory search. This should be
|
|
133
201
|
a descriptive string of the information you are looking for.
|
|
@@ -195,6 +263,12 @@ class SpecDoc:
|
|
|
195
263
|
ERROR_INTERNAL = """
|
|
196
264
|
The real error that triggered the exception, for internal debugging."""
|
|
197
265
|
|
|
266
|
+
SERVER_VERSION = """
|
|
267
|
+
The version of the MemMachine server."""
|
|
268
|
+
|
|
269
|
+
CLIENT_VERSION = """
|
|
270
|
+
The version of the MemMachine client."""
|
|
271
|
+
|
|
198
272
|
|
|
199
273
|
class Examples:
|
|
200
274
|
"""Common examples for API fields."""
|
|
@@ -208,6 +282,7 @@ class Examples:
|
|
|
208
282
|
RERANKER: ClassVar[list[str]] = ["bge-reranker-large", "my-custom-reranker"]
|
|
209
283
|
EMBEDDER: ClassVar[list[str]] = ["bge-base-en", "my-embedder"]
|
|
210
284
|
TOP_K: ClassVar[list[int]] = [5, 10, 20]
|
|
285
|
+
SCORE_THRESHOLD: ClassVar[list[float | None]] = [0.0, 0.5, None]
|
|
211
286
|
QUERY: ClassVar[list[str]] = [
|
|
212
287
|
"What was the user's last conversation about finance?"
|
|
213
288
|
]
|
|
@@ -223,6 +298,8 @@ class Examples:
|
|
|
223
298
|
SEMANTIC_ID: ClassVar[list[str]] = ["12", "23"]
|
|
224
299
|
SEMANTIC_IDS: ClassVar[list[list[str]]] = [["123", "345"], ["23"]]
|
|
225
300
|
SEARCH_RESULT_STATUS: ClassVar[list[int]] = [0]
|
|
301
|
+
SERVER_VERSION: ClassVar[list[str]] = ["0.1.2", "0.2.0"]
|
|
302
|
+
CLIENT_VERSION: ClassVar[list[str]] = ["0.1.2", "0.2.0"]
|
|
226
303
|
|
|
227
304
|
|
|
228
305
|
class RouterDoc:
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
"""API v2 specification models for request and response structures."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from datetime import
|
|
5
|
-
from
|
|
4
|
+
from datetime import datetime, timezone
|
|
5
|
+
from enum import Enum
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
# Python 3.11+ has UTC as a constant, Python 3.10 uses timezone.utc
|
|
8
|
+
try:
|
|
9
|
+
from datetime import UTC
|
|
10
|
+
except ImportError:
|
|
11
|
+
UTC = timezone.utc
|
|
12
|
+
|
|
13
|
+
from typing import Annotated, Any
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
# Python 3.11+ has Self in typing, Python 3.10 uses typing_extensions
|
|
16
|
+
try:
|
|
17
|
+
from typing import Self
|
|
18
|
+
except ImportError:
|
|
19
|
+
from typing_extensions import Self
|
|
20
|
+
|
|
21
|
+
import regex
|
|
22
|
+
from pydantic import (
|
|
23
|
+
AfterValidator,
|
|
24
|
+
AwareDatetime,
|
|
25
|
+
BaseModel,
|
|
26
|
+
ConfigDict,
|
|
27
|
+
Field,
|
|
28
|
+
JsonValue,
|
|
29
|
+
field_validator,
|
|
30
|
+
model_validator,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
from . import EpisodeType, MemoryType
|
|
34
|
+
from .doc import Examples, SpecDoc
|
|
12
35
|
|
|
13
36
|
DEFAULT_ORG_AND_PROJECT_ID = "universal"
|
|
14
37
|
|
|
@@ -16,6 +39,179 @@ DEFAULT_ORG_AND_PROJECT_ID = "universal"
|
|
|
16
39
|
logger = logging.getLogger(__name__)
|
|
17
40
|
|
|
18
41
|
|
|
42
|
+
# --------------------------------------------------------------------------------------
|
|
43
|
+
# Client-safe DTOs
|
|
44
|
+
#
|
|
45
|
+
# NOTE:
|
|
46
|
+
# These models intentionally live in this API spec module (and do NOT import the
|
|
47
|
+
# internal/core models) so that the client distribution can import the API schema
|
|
48
|
+
# without pulling in server-only packages.
|
|
49
|
+
# --------------------------------------------------------------------------------------
|
|
50
|
+
|
|
51
|
+
EpisodeIdT = str
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ContentType(Enum):
|
|
55
|
+
"""Enumeration for the type of content within an Episode."""
|
|
56
|
+
|
|
57
|
+
STRING = "string"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class EpisodeEntry(BaseModel):
|
|
61
|
+
"""Payload used when creating a new episode entry."""
|
|
62
|
+
|
|
63
|
+
content: Annotated[
|
|
64
|
+
str,
|
|
65
|
+
Field(..., description=SpecDoc.EPISODE_CONTENT),
|
|
66
|
+
]
|
|
67
|
+
producer_id: Annotated[
|
|
68
|
+
str,
|
|
69
|
+
Field(..., description=SpecDoc.EPISODE_PRODUCER_ID),
|
|
70
|
+
]
|
|
71
|
+
producer_role: Annotated[
|
|
72
|
+
str,
|
|
73
|
+
Field(..., description=SpecDoc.EPISODE_PRODUCER_ROLE),
|
|
74
|
+
]
|
|
75
|
+
produced_for_id: Annotated[
|
|
76
|
+
str | None,
|
|
77
|
+
Field(default=None, description=SpecDoc.EPISODE_PRODUCED_FOR_ID),
|
|
78
|
+
]
|
|
79
|
+
episode_type: Annotated[
|
|
80
|
+
EpisodeType | None,
|
|
81
|
+
Field(default=None, description=SpecDoc.EPISODE_TYPE),
|
|
82
|
+
]
|
|
83
|
+
metadata: Annotated[
|
|
84
|
+
dict[str, JsonValue] | None,
|
|
85
|
+
Field(default=None, description=SpecDoc.EPISODE_METADATA),
|
|
86
|
+
]
|
|
87
|
+
created_at: Annotated[
|
|
88
|
+
AwareDatetime | None,
|
|
89
|
+
Field(default=None, description=SpecDoc.EPISODE_CREATED_AT),
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class EpisodeResponse(EpisodeEntry):
|
|
94
|
+
"""Episode data returned in search responses."""
|
|
95
|
+
|
|
96
|
+
uid: Annotated[
|
|
97
|
+
EpisodeIdT,
|
|
98
|
+
Field(..., description=SpecDoc.EPISODE_UID),
|
|
99
|
+
]
|
|
100
|
+
score: Annotated[
|
|
101
|
+
float | None,
|
|
102
|
+
Field(default=None, description=SpecDoc.EPISODE_SCORE),
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class Episode(BaseModel):
|
|
107
|
+
"""Episode data returned in list responses."""
|
|
108
|
+
|
|
109
|
+
uid: Annotated[
|
|
110
|
+
EpisodeIdT,
|
|
111
|
+
Field(..., description=SpecDoc.EPISODE_UID),
|
|
112
|
+
]
|
|
113
|
+
content: Annotated[
|
|
114
|
+
str,
|
|
115
|
+
Field(..., description=SpecDoc.EPISODE_CONTENT),
|
|
116
|
+
]
|
|
117
|
+
session_key: Annotated[
|
|
118
|
+
str,
|
|
119
|
+
Field(..., description=SpecDoc.EPISODE_SESSION_KEY),
|
|
120
|
+
]
|
|
121
|
+
created_at: Annotated[
|
|
122
|
+
AwareDatetime,
|
|
123
|
+
Field(..., description=SpecDoc.EPISODE_CREATED_AT),
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
producer_id: Annotated[
|
|
127
|
+
str,
|
|
128
|
+
Field(..., description=SpecDoc.EPISODE_PRODUCER_ID),
|
|
129
|
+
]
|
|
130
|
+
producer_role: Annotated[
|
|
131
|
+
str,
|
|
132
|
+
Field(..., description=SpecDoc.EPISODE_PRODUCER_ROLE),
|
|
133
|
+
]
|
|
134
|
+
produced_for_id: Annotated[
|
|
135
|
+
str | None,
|
|
136
|
+
Field(default=None, description=SpecDoc.EPISODE_PRODUCED_FOR_ID),
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
sequence_num: Annotated[
|
|
140
|
+
int,
|
|
141
|
+
Field(default=0, description=SpecDoc.EPISODE_SEQUENCE_NUM),
|
|
142
|
+
]
|
|
143
|
+
|
|
144
|
+
episode_type: Annotated[
|
|
145
|
+
EpisodeType,
|
|
146
|
+
Field(default=EpisodeType.MESSAGE, description=SpecDoc.EPISODE_TYPE),
|
|
147
|
+
]
|
|
148
|
+
content_type: Annotated[
|
|
149
|
+
ContentType,
|
|
150
|
+
Field(default=ContentType.STRING, description=SpecDoc.EPISODE_CONTENT_TYPE),
|
|
151
|
+
]
|
|
152
|
+
filterable_metadata: Annotated[
|
|
153
|
+
dict[str, Any] | None,
|
|
154
|
+
Field(default=None, description=SpecDoc.EPISODE_FILTERABLE_METADATA),
|
|
155
|
+
]
|
|
156
|
+
metadata: Annotated[
|
|
157
|
+
dict[str, JsonValue] | None,
|
|
158
|
+
Field(default=None, description=SpecDoc.EPISODE_METADATA),
|
|
159
|
+
]
|
|
160
|
+
|
|
161
|
+
def __hash__(self) -> int:
|
|
162
|
+
"""Hash an episode by its UID."""
|
|
163
|
+
return hash(self.uid)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
SetIdT = str
|
|
167
|
+
FeatureIdT = str
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
class SemanticFeature(BaseModel):
|
|
171
|
+
"""Semantic memory entry returned in API responses."""
|
|
172
|
+
|
|
173
|
+
class Metadata(BaseModel):
|
|
174
|
+
"""Storage metadata for a semantic feature, including id and citations."""
|
|
175
|
+
|
|
176
|
+
citations: Annotated[
|
|
177
|
+
list[EpisodeIdT] | None,
|
|
178
|
+
Field(default=None, description=SpecDoc.SEMANTIC_METADATA_CITATIONS),
|
|
179
|
+
]
|
|
180
|
+
id: Annotated[
|
|
181
|
+
FeatureIdT | None,
|
|
182
|
+
Field(default=None, description=SpecDoc.SEMANTIC_METADATA_ID),
|
|
183
|
+
]
|
|
184
|
+
other: Annotated[
|
|
185
|
+
dict[str, Any] | None,
|
|
186
|
+
Field(default=None, description=SpecDoc.SEMANTIC_METADATA_OTHER),
|
|
187
|
+
]
|
|
188
|
+
|
|
189
|
+
set_id: Annotated[
|
|
190
|
+
SetIdT | None,
|
|
191
|
+
Field(default=None, description=SpecDoc.SEMANTIC_SET_ID),
|
|
192
|
+
]
|
|
193
|
+
category: Annotated[
|
|
194
|
+
str,
|
|
195
|
+
Field(..., description=SpecDoc.SEMANTIC_CATEGORY),
|
|
196
|
+
]
|
|
197
|
+
tag: Annotated[
|
|
198
|
+
str,
|
|
199
|
+
Field(..., description=SpecDoc.SEMANTIC_TAG),
|
|
200
|
+
]
|
|
201
|
+
feature_name: Annotated[
|
|
202
|
+
str,
|
|
203
|
+
Field(..., description=SpecDoc.SEMANTIC_FEATURE_NAME),
|
|
204
|
+
]
|
|
205
|
+
value: Annotated[
|
|
206
|
+
str,
|
|
207
|
+
Field(..., description=SpecDoc.SEMANTIC_VALUE),
|
|
208
|
+
]
|
|
209
|
+
metadata: Annotated[
|
|
210
|
+
Metadata,
|
|
211
|
+
Field(default_factory=Metadata, description=SpecDoc.SEMANTIC_METADATA),
|
|
212
|
+
]
|
|
213
|
+
|
|
214
|
+
|
|
19
215
|
class InvalidNameError(ValueError):
|
|
20
216
|
"""Custom error for invalid names."""
|
|
21
217
|
|
|
@@ -240,6 +436,7 @@ class DeleteProjectSpec(BaseModel):
|
|
|
240
436
|
]
|
|
241
437
|
|
|
242
438
|
|
|
439
|
+
# Type alias for timestamp input
|
|
243
440
|
TimestampInput = datetime | int | float | str | None
|
|
244
441
|
|
|
245
442
|
|
|
@@ -392,6 +589,14 @@ class SearchMemoriesSpec(_WithOrgAndProj):
|
|
|
392
589
|
examples=Examples.FILTER_MEM,
|
|
393
590
|
),
|
|
394
591
|
]
|
|
592
|
+
score_threshold: Annotated[
|
|
593
|
+
float | None,
|
|
594
|
+
Field(
|
|
595
|
+
default=None,
|
|
596
|
+
description=SpecDoc.SCORE_THRESHOLD,
|
|
597
|
+
examples=Examples.SCORE_THRESHOLD,
|
|
598
|
+
),
|
|
599
|
+
]
|
|
395
600
|
types: Annotated[
|
|
396
601
|
list[MemoryType],
|
|
397
602
|
Field(
|
|
@@ -526,7 +731,77 @@ class SearchResult(BaseModel):
|
|
|
526
731
|
),
|
|
527
732
|
]
|
|
528
733
|
content: Annotated[
|
|
529
|
-
|
|
734
|
+
"SearchResultContent",
|
|
735
|
+
Field(
|
|
736
|
+
...,
|
|
737
|
+
description=SpecDoc.CONTENT,
|
|
738
|
+
),
|
|
739
|
+
]
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
class EpisodicSearchShortTermMemory(BaseModel):
|
|
743
|
+
"""Short-term episodic memory search results."""
|
|
744
|
+
|
|
745
|
+
episodes: Annotated[
|
|
746
|
+
list[EpisodeResponse],
|
|
747
|
+
Field(..., description=SpecDoc.EPISODIC_SHORT_EPISODES),
|
|
748
|
+
]
|
|
749
|
+
episode_summary: Annotated[
|
|
750
|
+
list[str],
|
|
751
|
+
Field(..., description=SpecDoc.EPISODIC_SHORT_SUMMARY),
|
|
752
|
+
]
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
class EpisodicSearchLongTermMemory(BaseModel):
|
|
756
|
+
"""Long-term episodic memory search results."""
|
|
757
|
+
|
|
758
|
+
episodes: Annotated[
|
|
759
|
+
list[EpisodeResponse],
|
|
760
|
+
Field(..., description=SpecDoc.EPISODIC_LONG_EPISODES),
|
|
761
|
+
]
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
class EpisodicSearchResult(BaseModel):
|
|
765
|
+
"""Episodic payload returned by `/memories/search`."""
|
|
766
|
+
|
|
767
|
+
long_term_memory: Annotated[
|
|
768
|
+
EpisodicSearchLongTermMemory,
|
|
769
|
+
Field(..., description=SpecDoc.EPISODIC_LONG_TERM),
|
|
770
|
+
]
|
|
771
|
+
short_term_memory: Annotated[
|
|
772
|
+
EpisodicSearchShortTermMemory,
|
|
773
|
+
Field(..., description=SpecDoc.EPISODIC_SHORT_TERM),
|
|
774
|
+
]
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
class SearchResultContent(BaseModel):
|
|
778
|
+
"""Payload for SearchResult.content returned by `/memories/search`."""
|
|
779
|
+
|
|
780
|
+
model_config = ConfigDict(extra="forbid")
|
|
781
|
+
|
|
782
|
+
episodic_memory: Annotated[
|
|
783
|
+
EpisodicSearchResult | None,
|
|
784
|
+
Field(default=None, description=SpecDoc.SEARCH_EPISODIC_MEMORY),
|
|
785
|
+
]
|
|
786
|
+
semantic_memory: Annotated[
|
|
787
|
+
list[SemanticFeature] | None,
|
|
788
|
+
Field(default=None, description=SpecDoc.SEARCH_SEMANTIC_MEMORY),
|
|
789
|
+
]
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
class ListResult(BaseModel):
|
|
793
|
+
"""Response model for memory list results."""
|
|
794
|
+
|
|
795
|
+
status: Annotated[
|
|
796
|
+
int,
|
|
797
|
+
Field(
|
|
798
|
+
default=0,
|
|
799
|
+
description=SpecDoc.STATUS,
|
|
800
|
+
examples=Examples.SEARCH_RESULT_STATUS,
|
|
801
|
+
),
|
|
802
|
+
]
|
|
803
|
+
content: Annotated[
|
|
804
|
+
"ListResultContent",
|
|
530
805
|
Field(
|
|
531
806
|
...,
|
|
532
807
|
description=SpecDoc.CONTENT,
|
|
@@ -534,6 +809,21 @@ class SearchResult(BaseModel):
|
|
|
534
809
|
]
|
|
535
810
|
|
|
536
811
|
|
|
812
|
+
class ListResultContent(BaseModel):
|
|
813
|
+
"""Payload for ListResult.content returned by `/memories/list`."""
|
|
814
|
+
|
|
815
|
+
model_config = ConfigDict(extra="forbid")
|
|
816
|
+
|
|
817
|
+
episodic_memory: Annotated[
|
|
818
|
+
list[Episode] | None,
|
|
819
|
+
Field(default=None, description=SpecDoc.LIST_EPISODIC_MEMORY),
|
|
820
|
+
]
|
|
821
|
+
semantic_memory: Annotated[
|
|
822
|
+
list[SemanticFeature] | None,
|
|
823
|
+
Field(default=None, description=SpecDoc.LIST_SEMANTIC_MEMORY),
|
|
824
|
+
]
|
|
825
|
+
|
|
826
|
+
|
|
537
827
|
class RestErrorModel(BaseModel):
|
|
538
828
|
"""Model representing an error response."""
|
|
539
829
|
|
|
@@ -573,3 +863,33 @@ class RestErrorModel(BaseModel):
|
|
|
573
863
|
description=SpecDoc.ERROR_TRACE,
|
|
574
864
|
),
|
|
575
865
|
]
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
class Version(BaseModel):
|
|
869
|
+
"""Model representing version information."""
|
|
870
|
+
|
|
871
|
+
server_version: Annotated[
|
|
872
|
+
str,
|
|
873
|
+
Field(
|
|
874
|
+
...,
|
|
875
|
+
description=SpecDoc.SERVER_VERSION,
|
|
876
|
+
examples=Examples.SERVER_VERSION,
|
|
877
|
+
),
|
|
878
|
+
]
|
|
879
|
+
client_version: Annotated[
|
|
880
|
+
str,
|
|
881
|
+
Field(
|
|
882
|
+
...,
|
|
883
|
+
description=SpecDoc.CLIENT_VERSION,
|
|
884
|
+
examples=Examples.CLIENT_VERSION,
|
|
885
|
+
),
|
|
886
|
+
]
|
|
887
|
+
|
|
888
|
+
def __str__(self) -> str:
|
|
889
|
+
"""Return the version as a string."""
|
|
890
|
+
return "\n".join(
|
|
891
|
+
[
|
|
892
|
+
f"server: {self.server_version}",
|
|
893
|
+
f"client: {self.client_version}",
|
|
894
|
+
]
|
|
895
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""version information."""
|
|
2
|
+
|
|
3
|
+
import contextlib
|
|
4
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
5
|
+
|
|
6
|
+
from memmachine.common.api.spec import Version
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _get_package_version(package_name: str) -> str:
|
|
10
|
+
ret = "not available"
|
|
11
|
+
with contextlib.suppress(PackageNotFoundError):
|
|
12
|
+
ret = version(package_name)
|
|
13
|
+
return ret
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_version() -> Version:
|
|
17
|
+
"""Get the server and client version information."""
|
|
18
|
+
return Version(
|
|
19
|
+
server_version=_get_package_version("memmachine-server"),
|
|
20
|
+
client_version=_get_package_version("memmachine-client"),
|
|
21
|
+
)
|
|
@@ -32,6 +32,34 @@ class Neo4jConf(YamlSerializableMixin, PasswordMixin):
|
|
|
32
32
|
default=False,
|
|
33
33
|
description="Whether to force exact similarity search",
|
|
34
34
|
)
|
|
35
|
+
range_index_creation_threshold: int | None = Field(
|
|
36
|
+
default=None,
|
|
37
|
+
description=(
|
|
38
|
+
"Minimum number of entities in a collection or relationship "
|
|
39
|
+
"required before Neo4j automatically creates a range index."
|
|
40
|
+
),
|
|
41
|
+
)
|
|
42
|
+
vector_index_creation_threshold: int | None = Field(
|
|
43
|
+
default=None,
|
|
44
|
+
description=(
|
|
45
|
+
"Minimum number of entities in a collection or relationship "
|
|
46
|
+
"required before Neo4j automatically creates a vector index."
|
|
47
|
+
),
|
|
48
|
+
)
|
|
49
|
+
max_connection_pool_size: int | None = Field(
|
|
50
|
+
default=None,
|
|
51
|
+
description=(
|
|
52
|
+
"Maximum number of connections to maintain in the connection pool. "
|
|
53
|
+
"Internal default is 100."
|
|
54
|
+
),
|
|
55
|
+
)
|
|
56
|
+
connection_acquisition_timeout: float | None = Field(
|
|
57
|
+
default=None,
|
|
58
|
+
description=(
|
|
59
|
+
"Maximum time in seconds to wait for a connection from the pool. "
|
|
60
|
+
"Internal default is 60.0."
|
|
61
|
+
),
|
|
62
|
+
)
|
|
35
63
|
|
|
36
64
|
def get_uri(self) -> str:
|
|
37
65
|
if self.uri:
|
|
@@ -60,6 +88,21 @@ class SqlAlchemyConf(YamlSerializableMixin, PasswordMixin):
|
|
|
60
88
|
),
|
|
61
89
|
)
|
|
62
90
|
db_name: str | None = Field(default=None, description="DB name")
|
|
91
|
+
pool_size: int | None = Field(
|
|
92
|
+
default=None,
|
|
93
|
+
description=(
|
|
94
|
+
"Number of persistent connections to maintain in the connection pool. "
|
|
95
|
+
"If set, the pool will keep up to this many open connections ready for use."
|
|
96
|
+
),
|
|
97
|
+
)
|
|
98
|
+
max_overflow: int | None = Field(
|
|
99
|
+
default=None,
|
|
100
|
+
description=(
|
|
101
|
+
"Maximum number of temporary connections allowed above `pool_size` during "
|
|
102
|
+
"traffic spikes. These overflow connections are created on demand and "
|
|
103
|
+
"disposed of when no longer needed."
|
|
104
|
+
),
|
|
105
|
+
)
|
|
63
106
|
|
|
64
107
|
@property
|
|
65
108
|
def schema_part(self) -> str:
|