hindsight-api 0.1.11__py3-none-any.whl → 0.1.13__py3-none-any.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.
Files changed (47) hide show
  1. hindsight_api/__init__.py +2 -0
  2. hindsight_api/alembic/env.py +24 -1
  3. hindsight_api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py +14 -4
  4. hindsight_api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py +54 -13
  5. hindsight_api/alembic/versions/rename_personality_to_disposition.py +18 -7
  6. hindsight_api/api/http.py +253 -230
  7. hindsight_api/api/mcp.py +14 -3
  8. hindsight_api/config.py +11 -0
  9. hindsight_api/daemon.py +204 -0
  10. hindsight_api/engine/__init__.py +12 -1
  11. hindsight_api/engine/entity_resolver.py +38 -37
  12. hindsight_api/engine/interface.py +592 -0
  13. hindsight_api/engine/llm_wrapper.py +176 -6
  14. hindsight_api/engine/memory_engine.py +1092 -293
  15. hindsight_api/engine/retain/bank_utils.py +13 -12
  16. hindsight_api/engine/retain/chunk_storage.py +3 -2
  17. hindsight_api/engine/retain/fact_storage.py +10 -7
  18. hindsight_api/engine/retain/link_utils.py +17 -16
  19. hindsight_api/engine/retain/observation_regeneration.py +17 -16
  20. hindsight_api/engine/retain/orchestrator.py +2 -3
  21. hindsight_api/engine/retain/types.py +25 -8
  22. hindsight_api/engine/search/graph_retrieval.py +6 -5
  23. hindsight_api/engine/search/mpfp_retrieval.py +8 -7
  24. hindsight_api/engine/search/reranking.py +17 -0
  25. hindsight_api/engine/search/retrieval.py +12 -11
  26. hindsight_api/engine/search/think_utils.py +1 -1
  27. hindsight_api/engine/search/tracer.py +1 -1
  28. hindsight_api/engine/task_backend.py +32 -0
  29. hindsight_api/extensions/__init__.py +66 -0
  30. hindsight_api/extensions/base.py +81 -0
  31. hindsight_api/extensions/builtin/__init__.py +18 -0
  32. hindsight_api/extensions/builtin/tenant.py +33 -0
  33. hindsight_api/extensions/context.py +110 -0
  34. hindsight_api/extensions/http.py +89 -0
  35. hindsight_api/extensions/loader.py +125 -0
  36. hindsight_api/extensions/operation_validator.py +325 -0
  37. hindsight_api/extensions/tenant.py +63 -0
  38. hindsight_api/main.py +97 -17
  39. hindsight_api/mcp_local.py +7 -1
  40. hindsight_api/migrations.py +54 -10
  41. hindsight_api/models.py +15 -0
  42. hindsight_api/pg0.py +1 -1
  43. {hindsight_api-0.1.11.dist-info → hindsight_api-0.1.13.dist-info}/METADATA +1 -1
  44. hindsight_api-0.1.13.dist-info/RECORD +75 -0
  45. hindsight_api-0.1.11.dist-info/RECORD +0 -64
  46. {hindsight_api-0.1.11.dist-info → hindsight_api-0.1.13.dist-info}/WHEEL +0 -0
  47. {hindsight_api-0.1.11.dist-info → hindsight_api-0.1.13.dist-info}/entry_points.txt +0 -0
@@ -6,12 +6,16 @@ on application startup. It is designed to be safe for concurrent
6
6
  execution using PostgreSQL advisory locks to coordinate between
7
7
  distributed workers.
8
8
 
9
+ Supports multi-tenant schema isolation: migrations can target a specific
10
+ PostgreSQL schema, allowing each tenant to have isolated tables.
11
+
9
12
  Important: All migrations must be backward-compatible to allow
10
13
  safe rolling deployments.
11
14
 
12
15
  No alembic.ini required - all configuration is done programmatically.
13
16
  """
14
17
 
18
+ import hashlib
15
19
  import logging
16
20
  import os
17
21
  from pathlib import Path
@@ -26,11 +30,29 @@ logger = logging.getLogger(__name__)
26
30
  MIGRATION_LOCK_ID = 123456789
27
31
 
28
32
 
29
- def _run_migrations_internal(database_url: str, script_location: str) -> None:
33
+ def _get_schema_lock_id(schema: str) -> int:
34
+ """
35
+ Generate a unique advisory lock ID for a schema.
36
+
37
+ Uses hash of schema name to create a deterministic lock ID.
38
+ """
39
+ # Use hash to create a unique lock ID per schema
40
+ # Keep within PostgreSQL's bigint range
41
+ hash_bytes = hashlib.sha256(schema.encode()).digest()[:8]
42
+ return int.from_bytes(hash_bytes, byteorder="big") % (2**31)
43
+
44
+
45
+ def _run_migrations_internal(database_url: str, script_location: str, schema: str | None = None) -> None:
30
46
  """
31
47
  Internal function to run migrations without locking.
48
+
49
+ Args:
50
+ database_url: SQLAlchemy database URL
51
+ script_location: Path to alembic scripts
52
+ schema: Target schema (None for default/public)
32
53
  """
33
- logger.info("Running database migrations to head...")
54
+ schema_name = schema or "public"
55
+ logger.info(f"Running database migrations to head for schema '{schema_name}'...")
34
56
  logger.info(f"Database URL: {database_url}")
35
57
  logger.info(f"Script location: {script_location}")
36
58
 
@@ -50,13 +72,22 @@ def _run_migrations_internal(database_url: str, script_location: str) -> None:
50
72
  # Set path_separator to avoid deprecation warning
51
73
  alembic_cfg.set_main_option("path_separator", "os")
52
74
 
53
- # Run migrations to head (latest version)
75
+ # If targeting a specific schema, pass it to env.py via config
76
+ # env.py will handle setting search_path and version_table_schema
77
+ if schema:
78
+ alembic_cfg.set_main_option("target_schema", schema)
79
+
80
+ # Run migrations
54
81
  command.upgrade(alembic_cfg, "head")
55
82
 
56
- logger.info("Database migrations completed successfully")
83
+ logger.info(f"Database migrations completed successfully for schema '{schema_name}'")
57
84
 
58
85
 
59
- def run_migrations(database_url: str, script_location: str | None = None) -> None:
86
+ def run_migrations(
87
+ database_url: str,
88
+ script_location: str | None = None,
89
+ schema: str | None = None,
90
+ ) -> None:
60
91
  """
61
92
  Run database migrations to the latest version using programmatic Alembic configuration.
62
93
 
@@ -65,19 +96,28 @@ def run_migrations(database_url: str, script_location: str | None = None) -> Non
65
96
  - Other workers wait for the lock, then verify migrations are complete
66
97
  - If schema is already up-to-date, this is a fast no-op
67
98
 
99
+ Supports multi-tenant schema isolation: when a schema is specified, migrations
100
+ run in that schema instead of public. This allows tenant extensions to provision
101
+ new tenant schemas with their own isolated tables.
102
+
68
103
  Args:
69
104
  database_url: SQLAlchemy database URL (e.g., "postgresql://user:pass@host/db")
70
105
  script_location: Path to alembic migrations directory (e.g., "/path/to/alembic").
71
106
  If None, defaults to hindsight-api/alembic directory.
107
+ schema: Target PostgreSQL schema name. If None, uses default (public).
108
+ When specified, creates the schema if needed and runs migrations there.
72
109
 
73
110
  Raises:
74
111
  RuntimeError: If migrations fail to complete
75
112
  FileNotFoundError: If script_location doesn't exist
76
113
 
77
114
  Example:
78
- # Using default location (hindsight_api package)
115
+ # Using default location and public schema
79
116
  run_migrations("postgresql://user:pass@host/db")
80
117
 
118
+ # Run migrations for a specific tenant schema
119
+ run_migrations("postgresql://user:pass@host/db", schema="tenant_acme")
120
+
81
121
  # Using custom location (when importing from another project)
82
122
  run_migrations(
83
123
  "postgresql://user:pass@host/db",
@@ -99,21 +139,25 @@ def run_migrations(database_url: str, script_location: str | None = None) -> Non
99
139
  f"Alembic script location not found at {script_location}. Database migrations cannot be run."
100
140
  )
101
141
 
142
+ # Use schema-specific lock ID for multi-tenant isolation
143
+ lock_id = _get_schema_lock_id(schema) if schema else MIGRATION_LOCK_ID
144
+ schema_name = schema or "public"
145
+
102
146
  # Use PostgreSQL advisory lock to coordinate between distributed workers
103
147
  engine = create_engine(database_url)
104
148
  with engine.connect() as conn:
105
149
  # pg_advisory_lock blocks until the lock is acquired
106
150
  # The lock is automatically released when the connection closes
107
- logger.debug(f"Acquiring migration advisory lock (id={MIGRATION_LOCK_ID})...")
108
- conn.execute(text(f"SELECT pg_advisory_lock({MIGRATION_LOCK_ID})"))
151
+ logger.debug(f"Acquiring migration advisory lock for schema '{schema_name}' (id={lock_id})...")
152
+ conn.execute(text(f"SELECT pg_advisory_lock({lock_id})"))
109
153
  logger.debug("Migration advisory lock acquired")
110
154
 
111
155
  try:
112
156
  # Run migrations while holding the lock
113
- _run_migrations_internal(database_url, script_location)
157
+ _run_migrations_internal(database_url, script_location, schema=schema)
114
158
  finally:
115
159
  # Explicitly release the lock (also released on connection close)
116
- conn.execute(text(f"SELECT pg_advisory_unlock({MIGRATION_LOCK_ID})"))
160
+ conn.execute(text(f"SELECT pg_advisory_unlock({lock_id})"))
117
161
  logger.debug("Migration advisory lock released")
118
162
 
119
163
  except FileNotFoundError:
hindsight_api/models.py CHANGED
@@ -2,9 +2,24 @@
2
2
  SQLAlchemy models for the memory system.
3
3
  """
4
4
 
5
+ from dataclasses import dataclass
5
6
  from datetime import datetime
6
7
  from uuid import UUID as PyUUID
7
8
 
9
+
10
+ @dataclass
11
+ class RequestContext:
12
+ """
13
+ Context for request authentication and authorization.
14
+
15
+ This dataclass carries authentication data from HTTP requests to the
16
+ memory engine operations. It can be extended to include additional
17
+ context like headers, tokens, user info, etc.
18
+ """
19
+
20
+ api_key: str | None = None
21
+
22
+
8
23
  from pgvector.sqlalchemy import Vector
9
24
  from sqlalchemy import (
10
25
  CheckConstraint,
hindsight_api/pg0.py CHANGED
@@ -40,7 +40,7 @@ class EmbeddedPostgres:
40
40
  # Only set port if explicitly specified
41
41
  if self.port is not None:
42
42
  kwargs["port"] = self.port
43
- self._pg0 = Pg0(**kwargs)
43
+ self._pg0 = Pg0(**kwargs) # type: ignore[invalid-argument-type] - dict kwargs
44
44
  return self._pg0
45
45
 
46
46
  async def start(self, max_retries: int = 5, retry_delay: float = 4.0) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hindsight-api
3
- Version: 0.1.11
3
+ Version: 0.1.13
4
4
  Summary: Hindsight: Agent Memory That Works Like Human Memory
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: alembic>=1.17.1
@@ -0,0 +1,75 @@
1
+ hindsight_api/__init__.py,sha256=lPhgtKMvT8qjORFKWlhlq-LVdwesIu0gbUYNPZQEFiI,1197
2
+ hindsight_api/banner.py,sha256=BXn-jhkXe4xi-YV4JeuaVvjYhTMs96O43XoOMv4Cd28,4591
3
+ hindsight_api/config.py,sha256=9li81n7Ugiefzr4q2A0w6V6JhwrFkUaIa6yXMetIvas,6919
4
+ hindsight_api/daemon.py,sha256=3CKcO_ENQ57dIWrTsmYUj-V4zvoAB1toNtVh3EVkg-c,5982
5
+ hindsight_api/main.py,sha256=7AFOaZIx7Rm86BCQGZnEniDCh0BhKg2_ggMS4qUvuTc,8636
6
+ hindsight_api/mcp_local.py,sha256=fL2hpwQSNExcjIwZn1E5vy5No6iZFmw78yRNXxJzri0,7371
7
+ hindsight_api/metrics.py,sha256=sQI5MhC2xj9ONZ6Hdjf6r6r3NbYYd3ExyVOn1Uky49A,7239
8
+ hindsight_api/migrations.py,sha256=X5jYkrDhbeFzXOUoPRvPzkGHQsjlZ7oz_P71UI82VT4,9104
9
+ hindsight_api/models.py,sha256=LvOpCfuDjnVH-dEzOSolCOZnkoPiOZP_J9HK82sD1_0,12700
10
+ hindsight_api/pg0.py,sha256=SEIwYq8xp0s0YbV3CIy_ioZ5-Bfe8_rxdeP0YasAeXk,4677
11
+ hindsight_api/server.py,sha256=OrSd0G-79U07EXFc838c1vzUL-1O6wuxTMqUmMINpGY,1247
12
+ hindsight_api/alembic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38
13
+ hindsight_api/alembic/env.py,sha256=I4sGdtUo8xcXe95MyD36JQeMod_Bvp9JUkW64Ve4XSM,5808
14
+ hindsight_api/alembic/script.py.mako,sha256=04kgeBtNMa4cCnG8CfQcKt6P6rnloIfj8wy0u_DBydM,704
15
+ hindsight_api/alembic/versions/5a366d414dce_initial_schema.py,sha256=g3G7fV70Z10PZxwTrTmR34OAlEZjQTLJKr-Ol54JqrQ,17665
16
+ hindsight_api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py,sha256=MaHFU4JczUIFLeUMBTKIV3ocuclil55N9fPPim-HRfk,2599
17
+ hindsight_api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py,sha256=ChqkHANauZb4-nBt2uepoZN3q0vRzN6aRsWTGueULiA,1146
18
+ hindsight_api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py,sha256=s5_B2D0JdaxO7WM-vWC5Yt6hAtTsAUzJhFGLFSkfuQU,1808
19
+ hindsight_api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py,sha256=IdDP6fgsYj5fCXAF0QT-3t_wcKJsnf7B0mh7qS-cf_w,3806
20
+ hindsight_api/alembic/versions/rename_personality_to_disposition.py,sha256=A29-nDJ2Re4u9jdp2sUw29It808j4h6BpcA4wDHJMJ8,2765
21
+ hindsight_api/api/__init__.py,sha256=zoDWA86ttx-UriC35UIgdPswIrau7GuMWTN63wYsUdM,2916
22
+ hindsight_api/api/http.py,sha256=tUoJVu-3YcFijhsp1xDfndWYX1JdaZwT0wqmimtwFtw,72263
23
+ hindsight_api/api/mcp.py,sha256=Iowo3ourjWx7ZqLiCwF9nvjMAJpRceBprF5cgn5M6fs,7853
24
+ hindsight_api/engine/__init__.py,sha256=-BwaSwG9fTT_BBO0c_2MBkxG6-tGdclSzIqsgHw4cnw,1633
25
+ hindsight_api/engine/cross_encoder.py,sha256=5WmUx9yfJdIwZ0nA218O-mMKQJ7EKaPOtwhMiDbG8KQ,10483
26
+ hindsight_api/engine/db_utils.py,sha256=0T5tL2SZ49JQihfyZYlTDThIfocKzkr1OpxQpJzPCGE,2687
27
+ hindsight_api/engine/embeddings.py,sha256=IEdP5-p6oTJRRKV2JzUEojByJGShUEmkInCyA9wM8tg,10219
28
+ hindsight_api/engine/entity_resolver.py,sha256=f-fbUDKCrM9a5Sz10J0rW3jV7dib7BmpyGyassspKXg,23510
29
+ hindsight_api/engine/interface.py,sha256=F6BgnjloH7EgL9_D2NpPuabR_zR-h_iEJBQ0ERC2P58,16090
30
+ hindsight_api/engine/llm_wrapper.py,sha256=nLdVAk2xtkbwxLFMQNmEU-JmHucdtQoh3ph0BWX4sDc,29140
31
+ hindsight_api/engine/memory_engine.py,sha256=cmuvj-EjTNbJaCp7UyM2eI8O8k3w6fTMLnngrgbHK94,166805
32
+ hindsight_api/engine/query_analyzer.py,sha256=DKFxmyyVVc59zwKbbGx4D22UVp6TxmD7jAa7cg9FGSU,19641
33
+ hindsight_api/engine/response_models.py,sha256=QeESHC7oh84SYPDrR6FqHjiGBZnTAzo61IDB-qwVTSY,8737
34
+ hindsight_api/engine/task_backend.py,sha256=txtcMUzHW1MigDCW7XsVZc5zqvM9FbR_xF_c9BKokBk,8054
35
+ hindsight_api/engine/utils.py,sha256=TwuipFRvN0Pu196JLakzQ71E3GAwySc5q6pByC81Ak4,6991
36
+ hindsight_api/engine/retain/__init__.py,sha256=t6q3-_kf4iYTl9j2PVB6laqMSs6UuPeXBSYMW6HT1sA,1152
37
+ hindsight_api/engine/retain/bank_utils.py,sha256=JjrTE-bixHZKaUyl4uPQ6FV9O7hMOOEijXUnqXhOB5g,14097
38
+ hindsight_api/engine/retain/chunk_storage.py,sha256=zXAqbcFeYpjyWlOoi8zeK5G91zHpF75CUVF-6wsEJpU,2064
39
+ hindsight_api/engine/retain/deduplication.py,sha256=kqs7I7eIc_ppvgAF9GlzL6fSGuEEzrgw17-7NdyUDis,3099
40
+ hindsight_api/engine/retain/embedding_processing.py,sha256=R35oyKYIKjuqC-yZl5Ru56F8xRe0N6KW_9p5PZ9CBi0,1649
41
+ hindsight_api/engine/retain/embedding_utils.py,sha256=uulXIBiA7XNsj16K1VGawR3s5jV-hsAmvmoCi-IodpU,1565
42
+ hindsight_api/engine/retain/entity_processing.py,sha256=5EYzyH_JjbhYQ0zQ8gX6xs0wCH6vmxMYUe6_qVJdvQA,2547
43
+ hindsight_api/engine/retain/fact_extraction.py,sha256=E9AswSrqx3X74gj5-qstbm2wqPv4kUMddkdn5yExKvI,50166
44
+ hindsight_api/engine/retain/fact_storage.py,sha256=zhIiccW1D4wkgnZMFcbxDeMeHy5v4JGKfEPBIFNLch4,5632
45
+ hindsight_api/engine/retain/link_creation.py,sha256=KP2kGU2VCymJptgw0hjaSdsjvncBgNp3P_A4OB_qx-w,3082
46
+ hindsight_api/engine/retain/link_utils.py,sha256=w8n_pPzs_rd3EMkb7nv4k_qSZttAKDig93hSSjl-Xbc,32854
47
+ hindsight_api/engine/retain/observation_regeneration.py,sha256=qE1-iSyH0lh5Zab1XIwSQSpxEArdOJOAC_yJY5iHLMQ,8143
48
+ hindsight_api/engine/retain/orchestrator.py,sha256=TY_xk-DbqvXs1KCV41jj8u7ba6WvI2yVeMv_Xq9fBY8,17620
49
+ hindsight_api/engine/retain/types.py,sha256=UzCXauLrMD26g5oZK3_oQ-gTaSSsd-Ttjh17le64HH4,6898
50
+ hindsight_api/engine/search/__init__.py,sha256=YPz_4g7IOabx078Xwg3RBfbOpJ649NRwNfe0gTI9P1U,802
51
+ hindsight_api/engine/search/fusion.py,sha256=cY81BH9U5RyWrPXbQnrDBghtelDMckZWCke9aqMyNnQ,4220
52
+ hindsight_api/engine/search/graph_retrieval.py,sha256=KV1LK_y8R_x4dYwikbZaJTVGPp7kXcrCy0IswaXCD4g,8625
53
+ hindsight_api/engine/search/mpfp_retrieval.py,sha256=mgUgHTj1uhjFWaz5vvqffyJPon01WgGjLq0A_gTWszw,13945
54
+ hindsight_api/engine/search/observation_utils.py,sha256=rlvGA4oFomMZNCZiJvPIQ0iwGaq9XqhRM530unqziCE,4243
55
+ hindsight_api/engine/search/reranking.py,sha256=P4jBDLwh5ZhXCwxMuh74VodYLngtx2X75MXXOIMm19A,3917
56
+ hindsight_api/engine/search/retrieval.py,sha256=BfEYbVC3I9dMBKXzDOfcRaS3r2hKCIO9wg5POP-GXSo,25316
57
+ hindsight_api/engine/search/scoring.py,sha256=7jbBtdnow7JU0d8xdW-ZqYvP4s-TYX2tqPhu2DiqHUI,5132
58
+ hindsight_api/engine/search/temporal_extraction.py,sha256=j7hPqpx2jMdR2BqgFrL-rrV2Hzq8HV24MtjYLJqVl2U,1732
59
+ hindsight_api/engine/search/think_utils.py,sha256=9YAmM_GTSiGns08n6xL8eYW4fZnwm_2xwn5FX6g9xaI,13907
60
+ hindsight_api/engine/search/trace.py,sha256=UTCmNRfAvIvDFGm5ifkuUk6JOKYrLlA_rPA72Zz_DfI,11217
61
+ hindsight_api/engine/search/tracer.py,sha256=hjm8fEESqJnOhsQwmwmvO1gthIO87WC3Pd-iiLPCIEc,15466
62
+ hindsight_api/engine/search/types.py,sha256=2cK-5oynPTWc7UxnA7TFnwzNkcujCfOUvVf5VCk_srM,5594
63
+ hindsight_api/extensions/__init__.py,sha256=gt8RxBwz6JOjbwbPPJ1LGE7ugk1nYkEAlD-LN1ap7FE,1926
64
+ hindsight_api/extensions/base.py,sha256=M7zXuM-tbqDnUwXX1mxAxiFs1eXOzNqIJutKLiUE4mU,2357
65
+ hindsight_api/extensions/context.py,sha256=NXXoBd6Z_nhYWFHgzl6oxrWM_VfPvY99erYLrHR24CE,3640
66
+ hindsight_api/extensions/http.py,sha256=c-a1g6R6rzibyReyR-WHz8DjRRGr4rVSyV9KB4UxVVU,2907
67
+ hindsight_api/extensions/loader.py,sha256=UwGM0XH7zHGng_xfHUY0VbOQemj9DmjuDaMst1TrFi8,4170
68
+ hindsight_api/extensions/operation_validator.py,sha256=zQPD8pTMJJxQjpByxa4JxvGgD5i3A4PBaK9Z1BizL7o,10536
69
+ hindsight_api/extensions/tenant.py,sha256=gvngBMn3cJtUfd4P0P_288faNJq00T8zPQkeldEsD3g,1903
70
+ hindsight_api/extensions/builtin/__init__.py,sha256=hLx2oFYZ1JtZhTWfab6AYcR02SWP2gIdbEqnZezT8ek,526
71
+ hindsight_api/extensions/builtin/tenant.py,sha256=lsS0GDEUXmfPBzqhqk2FpN4Z_k5cA3Y3PFNYyiiuZjU,1444
72
+ hindsight_api-0.1.13.dist-info/METADATA,sha256=_rFN2zLp2BI4B1HvSP775qX0jiN-kmlAkobVy1MQU_M,5408
73
+ hindsight_api-0.1.13.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
74
+ hindsight_api-0.1.13.dist-info/entry_points.txt,sha256=vqZv5WLHbSx8vyec5RtMlUqtE_ul7DTgEVODSmou6Og,109
75
+ hindsight_api-0.1.13.dist-info/RECORD,,
@@ -1,64 +0,0 @@
1
- hindsight_api/__init__.py,sha256=paLZxYov7BBgbOSl1RTNtFYvqHXlZTzTEDygR3kAFLc,1140
2
- hindsight_api/banner.py,sha256=BXn-jhkXe4xi-YV4JeuaVvjYhTMs96O43XoOMv4Cd28,4591
3
- hindsight_api/config.py,sha256=rqK0tNUcT-ddX8XRpsGx6x1sHVGusLW3m5OEdQz9sLs,6484
4
- hindsight_api/main.py,sha256=8qAtXPNdj7HMbxscpbe-QSnF7Lfd7lB6I8sjEsTDh80,6046
5
- hindsight_api/mcp_local.py,sha256=XifiH1AzLbm-XkZrK31FqNF8kYzvONibAHTkIY8Xb8g,7156
6
- hindsight_api/metrics.py,sha256=sQI5MhC2xj9ONZ6Hdjf6r6r3NbYYd3ExyVOn1Uky49A,7239
7
- hindsight_api/migrations.py,sha256=bN9ejR3cn7EAP3LFkpAjnWsUm9kykgzbzqeCB9HMPvA,7315
8
- hindsight_api/models.py,sha256=vLFkxykmK8KOoN_sQz4SsiJS6vqOjFIv_82BuKg8qD8,12329
9
- hindsight_api/pg0.py,sha256=y8EE3v1q2OUJbsSHl-hG_sPZEIWQrgkxrGcf-kuEECE,4624
10
- hindsight_api/server.py,sha256=OrSd0G-79U07EXFc838c1vzUL-1O6wuxTMqUmMINpGY,1247
11
- hindsight_api/alembic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38
12
- hindsight_api/alembic/env.py,sha256=x5MoBxdfRunSve1zARCOZ8KZDg2M3-NYrjJsR1hePg4,4753
13
- hindsight_api/alembic/script.py.mako,sha256=04kgeBtNMa4cCnG8CfQcKt6P6rnloIfj8wy0u_DBydM,704
14
- hindsight_api/alembic/versions/5a366d414dce_initial_schema.py,sha256=g3G7fV70Z10PZxwTrTmR34OAlEZjQTLJKr-Ol54JqrQ,17665
15
- hindsight_api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py,sha256=MaHFU4JczUIFLeUMBTKIV3ocuclil55N9fPPim-HRfk,2599
16
- hindsight_api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py,sha256=ChqkHANauZb4-nBt2uepoZN3q0vRzN6aRsWTGueULiA,1146
17
- hindsight_api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py,sha256=28KBE6mAAj2PEXm0iALJOiMcjn4eTx_X5nUPaJ1aRYk,1480
18
- hindsight_api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py,sha256=LLj0Tl6Kjw5uZPo7lCcG2IH8lFSPEmc9jG_riMF3Bj0,2370
19
- hindsight_api/alembic/versions/rename_personality_to_disposition.py,sha256=gpMSG8hdvqn9__lGgS0EE2de1nki1YAaCEI3pDdJRzA,2281
20
- hindsight_api/api/__init__.py,sha256=zoDWA86ttx-UriC35UIgdPswIrau7GuMWTN63wYsUdM,2916
21
- hindsight_api/api/http.py,sha256=fuPpqrfDSEUygP21RWT4bzJF2HBttagR1lrFNfJgyIU,71208
22
- hindsight_api/api/mcp.py,sha256=I9C_jUz6d7efMstBfOyoqnnsB94JU6c2mMk6eQ_KDz0,7462
23
- hindsight_api/engine/__init__.py,sha256=z6srTnyvGQM0eya7E8r2yagTAc4C7IhHauUK8NM-gW8,1406
24
- hindsight_api/engine/cross_encoder.py,sha256=5WmUx9yfJdIwZ0nA218O-mMKQJ7EKaPOtwhMiDbG8KQ,10483
25
- hindsight_api/engine/db_utils.py,sha256=0T5tL2SZ49JQihfyZYlTDThIfocKzkr1OpxQpJzPCGE,2687
26
- hindsight_api/engine/embeddings.py,sha256=IEdP5-p6oTJRRKV2JzUEojByJGShUEmkInCyA9wM8tg,10219
27
- hindsight_api/engine/entity_resolver.py,sha256=XHAViwIaEXMUhp9Eifvx0b3MZ4QwiFvH_k_ZHTwczxE,23151
28
- hindsight_api/engine/llm_wrapper.py,sha256=y7mgWSdCS_qJ6GtSgDc2B903MgePdckmm5czFGp5gZg,21041
29
- hindsight_api/engine/memory_engine.py,sha256=4EQft1qcUieYPK913gsfInAyghqhk-9XZ77bUJ72cbM,136032
30
- hindsight_api/engine/query_analyzer.py,sha256=DKFxmyyVVc59zwKbbGx4D22UVp6TxmD7jAa7cg9FGSU,19641
31
- hindsight_api/engine/response_models.py,sha256=QeESHC7oh84SYPDrR6FqHjiGBZnTAzo61IDB-qwVTSY,8737
32
- hindsight_api/engine/task_backend.py,sha256=XT0C-QFWfdcOHJjplkoarlnwvz-kCF2l6wAGW1dTJkw,7144
33
- hindsight_api/engine/utils.py,sha256=TwuipFRvN0Pu196JLakzQ71E3GAwySc5q6pByC81Ak4,6991
34
- hindsight_api/engine/retain/__init__.py,sha256=t6q3-_kf4iYTl9j2PVB6laqMSs6UuPeXBSYMW6HT1sA,1152
35
- hindsight_api/engine/retain/bank_utils.py,sha256=-Q_GW_F1rmT6Twxgk7aLPmfintLp6TQhC5xT0i5hZzg,13970
36
- hindsight_api/engine/retain/chunk_storage.py,sha256=yIofSL6RwMOIBR_xo1sTOUdkYQoRZBfjdqYuH-dj1EY,2012
37
- hindsight_api/engine/retain/deduplication.py,sha256=kqs7I7eIc_ppvgAF9GlzL6fSGuEEzrgw17-7NdyUDis,3099
38
- hindsight_api/engine/retain/embedding_processing.py,sha256=R35oyKYIKjuqC-yZl5Ru56F8xRe0N6KW_9p5PZ9CBi0,1649
39
- hindsight_api/engine/retain/embedding_utils.py,sha256=uulXIBiA7XNsj16K1VGawR3s5jV-hsAmvmoCi-IodpU,1565
40
- hindsight_api/engine/retain/entity_processing.py,sha256=5EYzyH_JjbhYQ0zQ8gX6xs0wCH6vmxMYUe6_qVJdvQA,2547
41
- hindsight_api/engine/retain/fact_extraction.py,sha256=E9AswSrqx3X74gj5-qstbm2wqPv4kUMddkdn5yExKvI,50166
42
- hindsight_api/engine/retain/fact_storage.py,sha256=SmWbdNTrOJW6MOHGOQ094f5DJSqasYp6yXGuxjh4_IA,5513
43
- hindsight_api/engine/retain/link_creation.py,sha256=KP2kGU2VCymJptgw0hjaSdsjvncBgNp3P_A4OB_qx-w,3082
44
- hindsight_api/engine/retain/link_utils.py,sha256=sB4aI3Ai7ukm1yQ6C_sotZ1inljjtDM8I9kSr8-a12o,32697
45
- hindsight_api/engine/retain/observation_regeneration.py,sha256=HdKiVakeAEfBBUpKYYn2Rbb9jrx4FBhICEMZJ-sFQWU,7960
46
- hindsight_api/engine/retain/orchestrator.py,sha256=FdYV7G7vZpwWMyMbNRwky_9xAt6mNsbEfZ7ewQ2aIbY,17621
47
- hindsight_api/engine/retain/types.py,sha256=sez-Rq5nNNUnu6Z04QrmnR-CbrkXeQ1myAXHj9X79Pw,6379
48
- hindsight_api/engine/search/__init__.py,sha256=YPz_4g7IOabx078Xwg3RBfbOpJ649NRwNfe0gTI9P1U,802
49
- hindsight_api/engine/search/fusion.py,sha256=cY81BH9U5RyWrPXbQnrDBghtelDMckZWCke9aqMyNnQ,4220
50
- hindsight_api/engine/search/graph_retrieval.py,sha256=AiC2oSRuZBdD5MmtIk0xSG7CxI5E6uQZe2-IbPqvJQw,8544
51
- hindsight_api/engine/search/mpfp_retrieval.py,sha256=_OJUxgOYw169OjIxfOjpowg1gstXvVC0VhmJaClBJz8,13849
52
- hindsight_api/engine/search/observation_utils.py,sha256=rlvGA4oFomMZNCZiJvPIQ0iwGaq9XqhRM530unqziCE,4243
53
- hindsight_api/engine/search/reranking.py,sha256=RZSKe3JDkLfEdTAdgbS-xZka6Jq4mmTBPDXBpyH73zA,3278
54
- hindsight_api/engine/search/retrieval.py,sha256=vs-kX5U5Vq4VV6lKq5Aoq1TzlJTtw5vDfnU4gPJ49Aw,25190
55
- hindsight_api/engine/search/scoring.py,sha256=7jbBtdnow7JU0d8xdW-ZqYvP4s-TYX2tqPhu2DiqHUI,5132
56
- hindsight_api/engine/search/temporal_extraction.py,sha256=j7hPqpx2jMdR2BqgFrL-rrV2Hzq8HV24MtjYLJqVl2U,1732
57
- hindsight_api/engine/search/think_utils.py,sha256=rTRyoefRkZc65gcPQtffKiqHinpi7rrRD3m6i57fxNY,13900
58
- hindsight_api/engine/search/trace.py,sha256=UTCmNRfAvIvDFGm5ifkuUk6JOKYrLlA_rPA72Zz_DfI,11217
59
- hindsight_api/engine/search/tracer.py,sha256=6OFlkRy_41gr2kgJZ1cmxnerUO069wPfnmiQrMvkOpg,15459
60
- hindsight_api/engine/search/types.py,sha256=2cK-5oynPTWc7UxnA7TFnwzNkcujCfOUvVf5VCk_srM,5594
61
- hindsight_api-0.1.11.dist-info/METADATA,sha256=BukLvti0UoZx9Lp47x8AloA_ubV4AvnKRy2mygUxNCg,5408
62
- hindsight_api-0.1.11.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
63
- hindsight_api-0.1.11.dist-info/entry_points.txt,sha256=vqZv5WLHbSx8vyec5RtMlUqtE_ul7DTgEVODSmou6Og,109
64
- hindsight_api-0.1.11.dist-info/RECORD,,