rememberstack 0.1.0__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.
- rememberstack/__init__.py +9 -0
- rememberstack/adapters/__init__.py +42 -0
- rememberstack/adapters/codex_writer.py +221 -0
- rememberstack/adapters/markitdown_converter.py +42 -0
- rememberstack/adapters/openrouter.py +136 -0
- rememberstack/adapters/selfhost/__init__.py +54 -0
- rememberstack/adapters/selfhost/forget.py +66 -0
- rememberstack/adapters/selfhost/git.py +374 -0
- rememberstack/adapters/selfhost/lance.py +328 -0
- rememberstack/adapters/selfhost/minio.py +279 -0
- rememberstack/adapters/selfhost/mounts.py +249 -0
- rememberstack/adapters/selfhost/object_store.py +130 -0
- rememberstack/adapters/selfhost/projection.py +80 -0
- rememberstack/adapters/selfhost/queue.py +137 -0
- rememberstack/adapters/selfhost/telemetry.py +45 -0
- rememberstack/adapters/selfhost/watcher.py +70 -0
- rememberstack/adapters/testing/__init__.py +15 -0
- rememberstack/adapters/testing/cost_meter.py +13 -0
- rememberstack/adapters/testing/model_provider.py +83 -0
- rememberstack/adapters/testing/queue.py +43 -0
- rememberstack/adapters/testing/telemetry.py +22 -0
- rememberstack/client.py +19 -0
- rememberstack/core/__init__.py +127 -0
- rememberstack/core/blockizer.py +189 -0
- rememberstack/core/chunker.py +216 -0
- rememberstack/core/consumption_skill.py +275 -0
- rememberstack/core/conversion.py +76 -0
- rememberstack/core/core_manifest.py +598 -0
- rememberstack/core/extension_packs.py +124 -0
- rememberstack/core/forget.py +17 -0
- rememberstack/core/knowledge_authored.py +276 -0
- rememberstack/core/knowledge_compile.py +215 -0
- rememberstack/core/knowledge_fact_sheet.py +210 -0
- rememberstack/core/knowledge_hashing.py +68 -0
- rememberstack/core/knowledge_planner.py +64 -0
- rememberstack/core/knowledge_writer.py +175 -0
- rememberstack/core/ranking.py +200 -0
- rememberstack/core/recipe_linter.py +149 -0
- rememberstack/core/section_snap.py +209 -0
- rememberstack/core/storage_routing.py +27 -0
- rememberstack/eval/__init__.py +53 -0
- rememberstack/eval/consumption.py +141 -0
- rememberstack/eval/contradiction.py +184 -0
- rememberstack/eval/harness.py +136 -0
- rememberstack/eval/lifecycle.py +400 -0
- rememberstack/eval/operational_scale.py +49 -0
- rememberstack/eval/resolution.py +255 -0
- rememberstack/eval/retrieval_spikes.py +50 -0
- rememberstack/eval/skeleton.py +231 -0
- rememberstack/llm/__init__.py +1 -0
- rememberstack/model/__init__.py +589 -0
- rememberstack/model/adjudication.py +100 -0
- rememberstack/model/auth.py +27 -0
- rememberstack/model/blocks.py +30 -0
- rememberstack/model/chunks.py +190 -0
- rememberstack/model/claims.py +162 -0
- rememberstack/model/client.py +98 -0
- rememberstack/model/clustering.py +54 -0
- rememberstack/model/component_version.py +124 -0
- rememberstack/model/consumption.py +88 -0
- rememberstack/model/conversion.py +31 -0
- rememberstack/model/deployment.py +53 -0
- rememberstack/model/documents.py +168 -0
- rememberstack/model/envelope.py +513 -0
- rememberstack/model/evaluation.py +72 -0
- rememberstack/model/forget.py +143 -0
- rememberstack/model/git.py +13 -0
- rememberstack/model/knowledge.py +840 -0
- rememberstack/model/knowledge_authored.py +325 -0
- rememberstack/model/knowledge_planner.py +431 -0
- rememberstack/model/lifecycle.py +42 -0
- rememberstack/model/model_provider.py +78 -0
- rememberstack/model/mounts.py +24 -0
- rememberstack/model/object_store.py +21 -0
- rememberstack/model/operational_scale.py +59 -0
- rememberstack/model/operations.py +153 -0
- rememberstack/model/processing.py +228 -0
- rememberstack/model/queue.py +73 -0
- rememberstack/model/recipes.py +83 -0
- rememberstack/model/relations.py +79 -0
- rememberstack/model/resolution.py +83 -0
- rememberstack/model/retrieval_spikes.py +62 -0
- rememberstack/model/sections.py +120 -0
- rememberstack/model/telemetry.py +30 -0
- rememberstack/ports/__init__.py +29 -0
- rememberstack/ports/auth.py +16 -0
- rememberstack/ports/connector.py +23 -0
- rememberstack/ports/cost_meter.py +17 -0
- rememberstack/ports/forget.py +20 -0
- rememberstack/ports/git.py +20 -0
- rememberstack/ports/model_provider.py +28 -0
- rememberstack/ports/mounts.py +16 -0
- rememberstack/ports/object_store.py +27 -0
- rememberstack/ports/p1_index.py +92 -0
- rememberstack/ports/purge.py +93 -0
- rememberstack/ports/queue.py +23 -0
- rememberstack/ports/telemetry.py +21 -0
- rememberstack/profiles/__init__.py +22 -0
- rememberstack/profiles/selfhost.py +324 -0
- rememberstack/profiles/selfhost_forget.py +158 -0
- rememberstack/profiles/selfhost_operations.py +95 -0
- rememberstack/py.typed +1 -0
- rememberstack/spine/__init__.py +93 -0
- rememberstack/spine/admission.py +26 -0
- rememberstack/spine/backfill.py +168 -0
- rememberstack/spine/catalog_contract.py +742 -0
- rememberstack/spine/chunk_catalog.py +237 -0
- rememberstack/spine/claim_catalog.py +298 -0
- rememberstack/spine/clustering.py +740 -0
- rememberstack/spine/component_versions.py +208 -0
- rememberstack/spine/consumption.py +81 -0
- rememberstack/spine/deployment_bootstrap.py +445 -0
- rememberstack/spine/document_catalog.py +621 -0
- rememberstack/spine/entity_registry.py +205 -0
- rememberstack/spine/extension_packs.py +220 -0
- rememberstack/spine/fact_catalog.py +571 -0
- rememberstack/spine/forget.py +1753 -0
- rememberstack/spine/knowledge.py +5467 -0
- rememberstack/spine/lifecycle.py +1071 -0
- rememberstack/spine/migrations/__init__.py +1 -0
- rememberstack/spine/migrations/_helpers.py +153 -0
- rememberstack/spine/migrations/env.py +58 -0
- rememberstack/spine/migrations/script.py.mako +27 -0
- rememberstack/spine/migrations/versions/__init__.py +1 -0
- rememberstack/spine/migrations/versions/p0_02_0001_extensions_enums.py +189 -0
- rememberstack/spine/migrations/versions/p0_02_0002_infrastructure_registries.py +321 -0
- rememberstack/spine/migrations/versions/p0_02_0003_entities_evaluation_e0_e1.py +631 -0
- rememberstack/spine/migrations/versions/p0_02_0004_claims_facts_evidence.py +411 -0
- rememberstack/spine/migrations/versions/p0_02_0005_projection_knowledge_retrieval.py +391 -0
- rememberstack/spine/migrations/versions/p0_02_0006_partitions_views.py +158 -0
- rememberstack/spine/migrations/versions/p2_06_0007_invalidated_outcome.py +26 -0
- rememberstack/spine/migrations/versions/p3_01_0008_document_version_target.py +58 -0
- rememberstack/spine/migrations/versions/p3_05_0009_reconcile_stage.py +27 -0
- rememberstack/spine/migrations/versions/p3_07_0010_lifecycle_eval_suite.py +25 -0
- rememberstack/spine/migrations/versions/p4_01_0011_survivor_view_rewrite.py +57 -0
- rememberstack/spine/migrations/versions/p6_02_0012_knowledge_compile_recovery.py +58 -0
- rememberstack/spine/migrations/versions/p6_04_0013_knowledge_writer_ledger.py +46 -0
- rememberstack/spine/migrations/versions/p6_05_0014_knowledge_planner_runtime.py +217 -0
- rememberstack/spine/migrations/versions/p6_06_0015_authored_dispatch_runtime.py +38 -0
- rememberstack/spine/migrations/versions/p7_02_0016_operational_eval_suite.py +19 -0
- rememberstack/spine/migrations/versions/p7_05_0017_hard_forget.py +55 -0
- rememberstack/spine/observation_adjudication.py +778 -0
- rememberstack/spine/operations.py +298 -0
- rememberstack/spine/projection.py +662 -0
- rememberstack/spine/recipes.py +276 -0
- rememberstack/spine/resolver.py +763 -0
- rememberstack/spine/review.py +650 -0
- rememberstack/spine/settings.py +22 -0
- rememberstack/spine/supersession.py +510 -0
- rememberstack/spine/sync.py +128 -0
- rememberstack/spine/work_ledger.py +816 -0
- rememberstack/surfaces/__init__.py +110 -0
- rememberstack/surfaces/cli.py +447 -0
- rememberstack/surfaces/consumption_skill.py +87 -0
- rememberstack/surfaces/graph_queries.py +698 -0
- rememberstack/surfaces/http_api.py +377 -0
- rememberstack/surfaces/mcp.py +67 -0
- rememberstack/surfaces/query_engine.py +1591 -0
- rememberstack/surfaces/recipe_executor.py +185 -0
- rememberstack/surfaces/recipe_surface.py +219 -0
- rememberstack/surfaces/remote_mcp.py +133 -0
- rememberstack/surfaces/sdk.py +324 -0
- rememberstack/workers/__init__.py +155 -0
- rememberstack/workers/base.py +312 -0
- rememberstack/workers/e0.py +577 -0
- rememberstack/workers/e1.py +425 -0
- rememberstack/workers/e2.py +525 -0
- rememberstack/workers/e3.py +434 -0
- rememberstack/workers/forget.py +299 -0
- rememberstack/workers/knowledge_authored.py +146 -0
- rememberstack/workers/knowledge_driver.py +735 -0
- rememberstack/workers/knowledge_fact_sheet.py +123 -0
- rememberstack/workers/knowledge_planner.py +325 -0
- rememberstack/workers/knowledge_writer.py +393 -0
- rememberstack/workers/operations.py +42 -0
- rememberstack/workers/p1.py +234 -0
- rememberstack/workers/p2.py +513 -0
- rememberstack/workers/p2_analytics.py +276 -0
- rememberstack/workers/p3.py +673 -0
- rememberstack/workers/reconcile.py +485 -0
- rememberstack/workers/sync.py +168 -0
- rememberstack-0.1.0.dist-info/METADATA +213 -0
- rememberstack-0.1.0.dist-info/RECORD +186 -0
- rememberstack-0.1.0.dist-info/WHEEL +4 -0
- rememberstack-0.1.0.dist-info/entry_points.txt +2 -0
- rememberstack-0.1.0.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"""The dependency-light typed HTTP SDK (D62 client surface).
|
|
2
|
+
|
|
3
|
+
The SDK knows only the deployment API and typed wire values. It carries no
|
|
4
|
+
Postgres, worker, model-provider, or adapter dependency, so the base wheel can
|
|
5
|
+
be installed in an agent harness without installing the server runtime.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from collections.abc import Mapping
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
from datetime import timedelta
|
|
11
|
+
import mimetypes
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Literal
|
|
14
|
+
from typing import TypeVar
|
|
15
|
+
from uuid import UUID
|
|
16
|
+
|
|
17
|
+
import httpx
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
from pydantic import Field
|
|
20
|
+
from pydantic import SecretStr
|
|
21
|
+
from pydantic import ValidationError
|
|
22
|
+
from pydantic_settings import BaseSettings
|
|
23
|
+
from pydantic_settings import SettingsConfigDict
|
|
24
|
+
|
|
25
|
+
from rememberstack.model.client import ConnectorCreate
|
|
26
|
+
from rememberstack.model.client import ConnectorDescriptor
|
|
27
|
+
from rememberstack.model.client import ToolDescriptor
|
|
28
|
+
from rememberstack.model.documents import IngestedVersion
|
|
29
|
+
from rememberstack.model.envelope import Envelope
|
|
30
|
+
|
|
31
|
+
_ModelT = TypeVar("_ModelT", bound=BaseModel)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ClientSettings(BaseSettings):
|
|
35
|
+
"""How a client reaches one deployment API."""
|
|
36
|
+
|
|
37
|
+
model_config = SettingsConfigDict(env_prefix="REMEMBERSTACK_", extra="ignore")
|
|
38
|
+
|
|
39
|
+
api_url: str = "http://127.0.0.1:8000"
|
|
40
|
+
api_authorization: SecretStr | None = None
|
|
41
|
+
api_timeout_seconds: float = Field(default=30.0, gt=0)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class MemoryApiError(Exception):
|
|
45
|
+
"""The deployment API was unreachable or returned an unusable response."""
|
|
46
|
+
|
|
47
|
+
def __init__(self, *, status_code: int, detail: str) -> None:
|
|
48
|
+
super().__init__(f"API {status_code}: {detail}")
|
|
49
|
+
self.status_code = status_code
|
|
50
|
+
self.detail = detail
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class MemoryClient:
|
|
54
|
+
"""Typed synchronous client for query, ingest, and connector management."""
|
|
55
|
+
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
*,
|
|
59
|
+
base_url: str | None = None,
|
|
60
|
+
authorization: str | None = None,
|
|
61
|
+
client: httpx.Client | None = None,
|
|
62
|
+
timeout: float | None = None,
|
|
63
|
+
settings: ClientSettings | None = None,
|
|
64
|
+
) -> None:
|
|
65
|
+
"""Bind either an owned HTTP client or an injected transport client."""
|
|
66
|
+
if client is not None and any(
|
|
67
|
+
value is not None for value in (base_url, authorization, timeout, settings)
|
|
68
|
+
):
|
|
69
|
+
raise ValueError(
|
|
70
|
+
"an injected client cannot be combined with client settings"
|
|
71
|
+
)
|
|
72
|
+
self._owned = client is None
|
|
73
|
+
if client is not None:
|
|
74
|
+
self._client = client
|
|
75
|
+
return
|
|
76
|
+
resolved = settings or ClientSettings.model_validate({})
|
|
77
|
+
resolved_authorization = authorization or (
|
|
78
|
+
resolved.api_authorization.get_secret_value()
|
|
79
|
+
if resolved.api_authorization is not None
|
|
80
|
+
else None
|
|
81
|
+
)
|
|
82
|
+
self._client = httpx.Client(
|
|
83
|
+
base_url=base_url or resolved.api_url,
|
|
84
|
+
headers=(
|
|
85
|
+
{"Authorization": resolved_authorization}
|
|
86
|
+
if resolved_authorization
|
|
87
|
+
else None
|
|
88
|
+
),
|
|
89
|
+
timeout=(timeout if timeout is not None else resolved.api_timeout_seconds),
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def from_settings(cls) -> "MemoryClient":
|
|
94
|
+
"""Build from the deployment API environment settings."""
|
|
95
|
+
return cls(settings=ClientSettings.model_validate({}))
|
|
96
|
+
|
|
97
|
+
def __enter__(self) -> "MemoryClient":
|
|
98
|
+
return self
|
|
99
|
+
|
|
100
|
+
def __exit__(self, *_args: object) -> None:
|
|
101
|
+
self.close()
|
|
102
|
+
|
|
103
|
+
def close(self) -> None:
|
|
104
|
+
"""Close only a transport the SDK created itself."""
|
|
105
|
+
if self._owned:
|
|
106
|
+
self._client.close()
|
|
107
|
+
|
|
108
|
+
def recipes(self) -> tuple[ToolDescriptor, ...]:
|
|
109
|
+
"""Return the deployment recipe registry as typed tool descriptors."""
|
|
110
|
+
payload = self._json("GET", "/recipes")
|
|
111
|
+
if not isinstance(payload, list):
|
|
112
|
+
raise MemoryApiError(
|
|
113
|
+
status_code=200, detail="GET /recipes did not return a list"
|
|
114
|
+
)
|
|
115
|
+
return tuple(
|
|
116
|
+
_validated(ToolDescriptor, item, endpoint="GET /recipes")
|
|
117
|
+
for item in payload
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def run_recipe(
|
|
121
|
+
self, *, name: str, arguments: Mapping[str, object] | None = None
|
|
122
|
+
) -> Envelope:
|
|
123
|
+
"""Run one registry recipe and return its self-accounting envelope."""
|
|
124
|
+
return _validated(
|
|
125
|
+
Envelope,
|
|
126
|
+
self._json("POST", f"/recipe/{name}", json_body=dict(arguments or {})),
|
|
127
|
+
endpoint=f"POST /recipe/{name}",
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
def resolve(
|
|
131
|
+
self,
|
|
132
|
+
*,
|
|
133
|
+
name: str,
|
|
134
|
+
entity_type: str | None = None,
|
|
135
|
+
context_entity_ids: tuple[UUID, ...] = (),
|
|
136
|
+
) -> Envelope:
|
|
137
|
+
"""Resolve a name, optionally using bounded focal-entity context."""
|
|
138
|
+
params: list[tuple[str, str]] = [("name", name)]
|
|
139
|
+
if entity_type is not None:
|
|
140
|
+
params.append(("entity_type", entity_type))
|
|
141
|
+
params.extend(
|
|
142
|
+
("context_entity_ids", str(value)) for value in context_entity_ids
|
|
143
|
+
)
|
|
144
|
+
return _validated(
|
|
145
|
+
Envelope,
|
|
146
|
+
self._json("GET", "/resolve", params=tuple(params)),
|
|
147
|
+
endpoint="GET /resolve",
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
def search_claims(self, *, query: str, k: int = 10) -> Envelope:
|
|
151
|
+
"""Search source claims; the returned envelope remains evidence grain."""
|
|
152
|
+
return _validated(
|
|
153
|
+
Envelope,
|
|
154
|
+
self._json("GET", "/search/claims", params={"query": query, "k": k}),
|
|
155
|
+
endpoint="GET /search/claims",
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
def hydrate_relation(self, *, relation_id: UUID) -> Envelope:
|
|
159
|
+
"""Hydrate a relation through evidence to its source documents."""
|
|
160
|
+
return _validated(
|
|
161
|
+
Envelope,
|
|
162
|
+
self._json("GET", f"/hydrate/relation/{relation_id}"),
|
|
163
|
+
endpoint=f"GET /hydrate/relation/{relation_id}",
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
def ingest(
|
|
167
|
+
self,
|
|
168
|
+
source: bytes | Path,
|
|
169
|
+
*,
|
|
170
|
+
filename: str | None = None,
|
|
171
|
+
mime: str | None = None,
|
|
172
|
+
title: str | None = None,
|
|
173
|
+
source_kind: str | None = None,
|
|
174
|
+
source_ref: str | None = None,
|
|
175
|
+
source_modified_at: datetime | None = None,
|
|
176
|
+
versioning_mode: Literal["snapshot", "living"] = "snapshot",
|
|
177
|
+
source_version_ref: str | None = None,
|
|
178
|
+
) -> IngestedVersion:
|
|
179
|
+
"""Push bytes through E0, optionally as a stable document lineage.
|
|
180
|
+
|
|
181
|
+
``source_kind`` and ``source_ref`` are a pair. Reusing them creates a
|
|
182
|
+
new immutable version of the same document when the bytes change.
|
|
183
|
+
"""
|
|
184
|
+
if (source_kind is None) != (source_ref is None):
|
|
185
|
+
raise ValueError("source_kind and source_ref must be supplied together")
|
|
186
|
+
if source_kind is None and (
|
|
187
|
+
source_modified_at is not None
|
|
188
|
+
or source_version_ref is not None
|
|
189
|
+
or versioning_mode != "snapshot"
|
|
190
|
+
):
|
|
191
|
+
raise ValueError(
|
|
192
|
+
"source timestamps, revisions, and living mode require"
|
|
193
|
+
" source_kind/source_ref"
|
|
194
|
+
)
|
|
195
|
+
if source_modified_at is not None and (
|
|
196
|
+
source_modified_at.tzinfo is None
|
|
197
|
+
or source_modified_at.utcoffset() != timedelta(0)
|
|
198
|
+
):
|
|
199
|
+
raise ValueError("source_modified_at must be timezone-aware UTC")
|
|
200
|
+
if isinstance(source, Path):
|
|
201
|
+
content = source.read_bytes()
|
|
202
|
+
filename = filename or source.name
|
|
203
|
+
mime = mime or mimetypes.guess_type(source.name)[0]
|
|
204
|
+
else:
|
|
205
|
+
content = source
|
|
206
|
+
if not filename:
|
|
207
|
+
raise ValueError("filename is required when ingesting bytes")
|
|
208
|
+
if not mime:
|
|
209
|
+
mime = "application/octet-stream"
|
|
210
|
+
params: dict[str, str] = {
|
|
211
|
+
"filename": filename,
|
|
212
|
+
"mime": mime,
|
|
213
|
+
"versioning_mode": versioning_mode,
|
|
214
|
+
}
|
|
215
|
+
for key, value in (
|
|
216
|
+
("title", title),
|
|
217
|
+
("source_kind", source_kind),
|
|
218
|
+
("source_ref", source_ref),
|
|
219
|
+
(
|
|
220
|
+
"source_modified_at",
|
|
221
|
+
source_modified_at.isoformat() if source_modified_at else None,
|
|
222
|
+
),
|
|
223
|
+
("source_version_ref", source_version_ref),
|
|
224
|
+
):
|
|
225
|
+
if value is not None:
|
|
226
|
+
params[key] = value
|
|
227
|
+
return _validated(
|
|
228
|
+
IngestedVersion,
|
|
229
|
+
self._json(
|
|
230
|
+
"POST",
|
|
231
|
+
"/ingest",
|
|
232
|
+
params=params,
|
|
233
|
+
content=content,
|
|
234
|
+
headers={"Content-Type": "application/octet-stream"},
|
|
235
|
+
),
|
|
236
|
+
endpoint="POST /ingest",
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
def connectors(self) -> tuple[ConnectorDescriptor, ...]:
|
|
240
|
+
"""List deployment-side connectors without executing any client-side."""
|
|
241
|
+
payload = self._json("GET", "/connectors")
|
|
242
|
+
if not isinstance(payload, list):
|
|
243
|
+
raise MemoryApiError(
|
|
244
|
+
status_code=200, detail="GET /connectors did not return a list"
|
|
245
|
+
)
|
|
246
|
+
return tuple(
|
|
247
|
+
_validated(ConnectorDescriptor, item, endpoint="GET /connectors")
|
|
248
|
+
for item in payload
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
def add_connector(self, *, connector: ConnectorCreate) -> ConnectorDescriptor:
|
|
252
|
+
"""Create deployment-side connector configuration."""
|
|
253
|
+
return _validated(
|
|
254
|
+
ConnectorDescriptor,
|
|
255
|
+
self._json(
|
|
256
|
+
"POST", "/connectors", json_body=connector.model_dump(mode="json")
|
|
257
|
+
),
|
|
258
|
+
endpoint="POST /connectors",
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
def pause_connector(self, *, connector_id: UUID) -> ConnectorDescriptor:
|
|
262
|
+
"""Pause connector execution in the deployment."""
|
|
263
|
+
return _validated(
|
|
264
|
+
ConnectorDescriptor,
|
|
265
|
+
self._json("POST", f"/connectors/{connector_id}/pause"),
|
|
266
|
+
endpoint=f"POST /connectors/{connector_id}/pause",
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
def connector_status(self, *, connector_id: UUID) -> ConnectorDescriptor:
|
|
270
|
+
"""Return one connector's deployment-side status."""
|
|
271
|
+
return _validated(
|
|
272
|
+
ConnectorDescriptor,
|
|
273
|
+
self._json("GET", f"/connectors/{connector_id}"),
|
|
274
|
+
endpoint=f"GET /connectors/{connector_id}",
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
def _json(
|
|
278
|
+
self,
|
|
279
|
+
method: str,
|
|
280
|
+
path: str,
|
|
281
|
+
*,
|
|
282
|
+
params: Mapping[str, str | int] | tuple[tuple[str, str], ...] | None = None,
|
|
283
|
+
json_body: object | None = None,
|
|
284
|
+
content: bytes | None = None,
|
|
285
|
+
headers: dict[str, str] | None = None,
|
|
286
|
+
) -> object:
|
|
287
|
+
"""Send one request, map typed HTTP failure, and decode JSON."""
|
|
288
|
+
try:
|
|
289
|
+
response = self._client.request(
|
|
290
|
+
method,
|
|
291
|
+
path,
|
|
292
|
+
params=params,
|
|
293
|
+
json=json_body,
|
|
294
|
+
content=content,
|
|
295
|
+
headers=headers,
|
|
296
|
+
)
|
|
297
|
+
except httpx.HTTPError as error:
|
|
298
|
+
raise MemoryApiError(status_code=0, detail=str(error)) from error
|
|
299
|
+
if not response.is_success:
|
|
300
|
+
detail = response.text
|
|
301
|
+
try:
|
|
302
|
+
body = response.json()
|
|
303
|
+
except ValueError:
|
|
304
|
+
body = None
|
|
305
|
+
if isinstance(body, dict) and "detail" in body:
|
|
306
|
+
detail = str(body["detail"])
|
|
307
|
+
raise MemoryApiError(status_code=response.status_code, detail=detail)
|
|
308
|
+
try:
|
|
309
|
+
return response.json()
|
|
310
|
+
except ValueError as error:
|
|
311
|
+
raise MemoryApiError(
|
|
312
|
+
status_code=response.status_code,
|
|
313
|
+
detail=f"{method} {path} returned invalid JSON",
|
|
314
|
+
) from error
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def _validated(model: type[_ModelT], payload: object, *, endpoint: str) -> _ModelT:
|
|
318
|
+
"""Validate one JSON-mode response or raise the SDK's public error type."""
|
|
319
|
+
try:
|
|
320
|
+
return model.model_validate(payload, strict=False)
|
|
321
|
+
except (ValidationError, TypeError) as error:
|
|
322
|
+
raise MemoryApiError(
|
|
323
|
+
status_code=200, detail=f"{endpoint} returned an invalid response body"
|
|
324
|
+
) from error
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""Pipeline worker package: the handler model, the runner, and stage handlers."""
|
|
2
|
+
|
|
3
|
+
from rememberstack.workers.base import HandlerOutcome
|
|
4
|
+
from rememberstack.workers.base import HandlerRegistry
|
|
5
|
+
from rememberstack.workers.base import RunResult
|
|
6
|
+
from rememberstack.workers.base import StageHandler
|
|
7
|
+
from rememberstack.workers.base import Worker
|
|
8
|
+
from rememberstack.workers.e0 import ConvertHandler
|
|
9
|
+
from rememberstack.workers.e0 import E0_CONVERT_VERSION
|
|
10
|
+
from rememberstack.workers.e0 import E0_STRUCTURE_VERSION
|
|
11
|
+
from rememberstack.workers.e0 import StructureHandler
|
|
12
|
+
from rememberstack.workers.e0 import StructurerSettings
|
|
13
|
+
from rememberstack.workers.e0 import UPLOAD_SOURCE_KIND
|
|
14
|
+
from rememberstack.workers.e0 import UploadIngestor
|
|
15
|
+
from rememberstack.workers.e1 import ChunkHandler
|
|
16
|
+
from rememberstack.workers.e1 import E1_CHUNK_VERSION
|
|
17
|
+
from rememberstack.workers.e1 import E1_EMBED_VERSION
|
|
18
|
+
from rememberstack.workers.e1 import E1Settings
|
|
19
|
+
from rememberstack.workers.e1 import E2_EXTRACTOR_VERSION
|
|
20
|
+
from rememberstack.workers.e1 import EmbedChunksHandler
|
|
21
|
+
from rememberstack.workers.e2 import E2Settings
|
|
22
|
+
from rememberstack.workers.e2 import ExtractClaimsHandler
|
|
23
|
+
from rememberstack.workers.e3 import AdjudicateSupersessionHandler
|
|
24
|
+
from rememberstack.workers.e3 import E3_NORMALIZER_VERSION
|
|
25
|
+
from rememberstack.workers.e3 import E3Settings
|
|
26
|
+
from rememberstack.workers.e3 import NormalizeRelationsHandler
|
|
27
|
+
from rememberstack.workers.forget import ForgetKnowledgeRebuilder
|
|
28
|
+
from rememberstack.workers.forget import ForgetProjectionRebuilder
|
|
29
|
+
from rememberstack.workers.forget import HardForgetHandler
|
|
30
|
+
from rememberstack.workers.forget import HardForgetReadiness
|
|
31
|
+
from rememberstack.workers.forget import HardForgetService
|
|
32
|
+
from rememberstack.workers.forget import KnowledgeCycleForgetRebuilder
|
|
33
|
+
from rememberstack.workers.forget import ProjectionPairForgetRebuilder
|
|
34
|
+
from rememberstack.workers.knowledge_authored import KnowledgeAuthoredSynchronizer
|
|
35
|
+
from rememberstack.workers.knowledge_authored import KnowledgeDispatchHandler
|
|
36
|
+
from rememberstack.workers.knowledge_authored import KnowledgeWorkflowDispatcher
|
|
37
|
+
from rememberstack.workers.knowledge_driver import KNOWLEDGE_DRIVER_VERSION
|
|
38
|
+
from rememberstack.workers.knowledge_driver import KnowledgeCommitDriver
|
|
39
|
+
from rememberstack.workers.knowledge_driver import KnowledgeCommitSettings
|
|
40
|
+
from rememberstack.workers.knowledge_driver import KnowledgePageCompiler
|
|
41
|
+
from rememberstack.workers.knowledge_driver import KnowledgeRoutingDriver
|
|
42
|
+
from rememberstack.workers.knowledge_fact_sheet import KNOWLEDGE_FACT_SHEET_VERSION
|
|
43
|
+
from rememberstack.workers.knowledge_fact_sheet import KnowledgeFactSheetCompileError
|
|
44
|
+
from rememberstack.workers.knowledge_fact_sheet import KnowledgeFactSheetCompiler
|
|
45
|
+
from rememberstack.workers.knowledge_planner import KNOWLEDGE_PLANNER_VERSION
|
|
46
|
+
from rememberstack.workers.knowledge_planner import KnowledgePlannerError
|
|
47
|
+
from rememberstack.workers.knowledge_planner import KnowledgePlannerSession
|
|
48
|
+
from rememberstack.workers.knowledge_planner import KnowledgePlannerSettings
|
|
49
|
+
from rememberstack.workers.knowledge_planner import KnowledgePlannerWorker
|
|
50
|
+
from rememberstack.workers.knowledge_writer import KNOWLEDGE_WRITER_VERSION
|
|
51
|
+
from rememberstack.workers.knowledge_writer import KnowledgePageCompilerRouter
|
|
52
|
+
from rememberstack.workers.knowledge_writer import KnowledgeProseCompiler
|
|
53
|
+
from rememberstack.workers.knowledge_writer import KnowledgeWriterError
|
|
54
|
+
from rememberstack.workers.knowledge_writer import KnowledgeWriterSession
|
|
55
|
+
from rememberstack.workers.knowledge_writer import KnowledgeWriterSettings
|
|
56
|
+
from rememberstack.workers.operations import DeadLetterReplayer
|
|
57
|
+
from rememberstack.workers.p1 import EmbedClaimsHandler
|
|
58
|
+
from rememberstack.workers.p1 import FACT_LABEL_VERSION
|
|
59
|
+
from rememberstack.workers.p1 import LabelFactsHandler
|
|
60
|
+
from rememberstack.workers.p1 import P1_EMBED_CLAIMS_VERSION
|
|
61
|
+
from rememberstack.workers.p1 import P1Settings
|
|
62
|
+
from rememberstack.workers.p2 import GraphRebuildSettings
|
|
63
|
+
from rememberstack.workers.p2 import GraphRebuildWorker
|
|
64
|
+
from rememberstack.workers.p2 import GraphSnapshotReader
|
|
65
|
+
from rememberstack.workers.p2 import SnapshotValidationError
|
|
66
|
+
from rememberstack.workers.p2_analytics import AnalyticsSettings
|
|
67
|
+
from rememberstack.workers.p2_analytics import COMMUNITY_DETECTOR_VERSION
|
|
68
|
+
from rememberstack.workers.p2_analytics import GraphAnalyticsWorker
|
|
69
|
+
from rememberstack.workers.p3 import CorpusFsBuilder
|
|
70
|
+
from rememberstack.workers.p3 import CorpusFsSettings
|
|
71
|
+
from rememberstack.workers.p3 import P3_BUILDER_VERSION
|
|
72
|
+
from rememberstack.workers.reconcile import CycleFinalizer
|
|
73
|
+
from rememberstack.workers.reconcile import DeletionService
|
|
74
|
+
from rememberstack.workers.reconcile import RECONCILE_VERSION
|
|
75
|
+
from rememberstack.workers.reconcile import ReconcileHandler
|
|
76
|
+
from rememberstack.workers.sync import SyncCycleRunner
|
|
77
|
+
from rememberstack.workers.sync import SyncSettings
|
|
78
|
+
|
|
79
|
+
__all__ = (
|
|
80
|
+
"AdjudicateSupersessionHandler",
|
|
81
|
+
"ChunkHandler",
|
|
82
|
+
"ConvertHandler",
|
|
83
|
+
"E1Settings",
|
|
84
|
+
"E1_CHUNK_VERSION",
|
|
85
|
+
"E1_EMBED_VERSION",
|
|
86
|
+
"E2Settings",
|
|
87
|
+
"E2_EXTRACTOR_VERSION",
|
|
88
|
+
"EmbedChunksHandler",
|
|
89
|
+
"E3Settings",
|
|
90
|
+
"E3_NORMALIZER_VERSION",
|
|
91
|
+
"ExtractClaimsHandler",
|
|
92
|
+
"EmbedClaimsHandler",
|
|
93
|
+
"FACT_LABEL_VERSION",
|
|
94
|
+
"LabelFactsHandler",
|
|
95
|
+
"KnowledgeRoutingDriver",
|
|
96
|
+
"KnowledgeAuthoredSynchronizer",
|
|
97
|
+
"KnowledgeDispatchHandler",
|
|
98
|
+
"KnowledgeWorkflowDispatcher",
|
|
99
|
+
"KnowledgeCommitDriver",
|
|
100
|
+
"KnowledgeCommitSettings",
|
|
101
|
+
"KNOWLEDGE_DRIVER_VERSION",
|
|
102
|
+
"KnowledgePageCompiler",
|
|
103
|
+
"KnowledgeFactSheetCompileError",
|
|
104
|
+
"KnowledgeFactSheetCompiler",
|
|
105
|
+
"KNOWLEDGE_FACT_SHEET_VERSION",
|
|
106
|
+
"KNOWLEDGE_PLANNER_VERSION",
|
|
107
|
+
"KnowledgePlannerError",
|
|
108
|
+
"KnowledgePlannerSession",
|
|
109
|
+
"KnowledgePlannerSettings",
|
|
110
|
+
"KnowledgePlannerWorker",
|
|
111
|
+
"KNOWLEDGE_WRITER_VERSION",
|
|
112
|
+
"KnowledgePageCompilerRouter",
|
|
113
|
+
"KnowledgeProseCompiler",
|
|
114
|
+
"KnowledgeWriterError",
|
|
115
|
+
"KnowledgeWriterSettings",
|
|
116
|
+
"KnowledgeWriterSession",
|
|
117
|
+
"NormalizeRelationsHandler",
|
|
118
|
+
"P1Settings",
|
|
119
|
+
"P1_EMBED_CLAIMS_VERSION",
|
|
120
|
+
"E0_CONVERT_VERSION",
|
|
121
|
+
"E0_STRUCTURE_VERSION",
|
|
122
|
+
"HandlerOutcome",
|
|
123
|
+
"HandlerRegistry",
|
|
124
|
+
"ForgetKnowledgeRebuilder",
|
|
125
|
+
"ForgetProjectionRebuilder",
|
|
126
|
+
"HardForgetHandler",
|
|
127
|
+
"HardForgetReadiness",
|
|
128
|
+
"HardForgetService",
|
|
129
|
+
"KnowledgeCycleForgetRebuilder",
|
|
130
|
+
"ProjectionPairForgetRebuilder",
|
|
131
|
+
"RunResult",
|
|
132
|
+
"StageHandler",
|
|
133
|
+
"CorpusFsBuilder",
|
|
134
|
+
"CorpusFsSettings",
|
|
135
|
+
"P3_BUILDER_VERSION",
|
|
136
|
+
"AnalyticsSettings",
|
|
137
|
+
"COMMUNITY_DETECTOR_VERSION",
|
|
138
|
+
"GraphAnalyticsWorker",
|
|
139
|
+
"GraphRebuildSettings",
|
|
140
|
+
"GraphRebuildWorker",
|
|
141
|
+
"GraphSnapshotReader",
|
|
142
|
+
"SnapshotValidationError",
|
|
143
|
+
"CycleFinalizer",
|
|
144
|
+
"DeletionService",
|
|
145
|
+
"DeadLetterReplayer",
|
|
146
|
+
"ReconcileHandler",
|
|
147
|
+
"RECONCILE_VERSION",
|
|
148
|
+
"StructureHandler",
|
|
149
|
+
"StructurerSettings",
|
|
150
|
+
"SyncCycleRunner",
|
|
151
|
+
"SyncSettings",
|
|
152
|
+
"UPLOAD_SOURCE_KIND",
|
|
153
|
+
"UploadIngestor",
|
|
154
|
+
"Worker",
|
|
155
|
+
)
|