aethergraph 0.1.0a3__py3-none-any.whl → 0.1.0a4__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.
- aethergraph/api/v1/artifacts.py +23 -4
- aethergraph/api/v1/schemas.py +7 -0
- aethergraph/api/v1/session.py +123 -4
- aethergraph/config/config.py +2 -0
- aethergraph/config/search.py +49 -0
- aethergraph/contracts/services/channel.py +18 -1
- aethergraph/contracts/services/execution.py +58 -0
- aethergraph/contracts/services/llm.py +26 -0
- aethergraph/contracts/services/memory.py +10 -4
- aethergraph/contracts/services/planning.py +53 -0
- aethergraph/contracts/storage/event_log.py +8 -0
- aethergraph/contracts/storage/search_backend.py +47 -0
- aethergraph/contracts/storage/vector_index.py +73 -0
- aethergraph/core/graph/action_spec.py +76 -0
- aethergraph/core/graph/graph_fn.py +75 -2
- aethergraph/core/graph/graphify.py +74 -2
- aethergraph/core/runtime/graph_runner.py +2 -1
- aethergraph/core/runtime/node_context.py +66 -3
- aethergraph/core/runtime/node_services.py +8 -0
- aethergraph/core/runtime/run_manager.py +263 -271
- aethergraph/core/runtime/run_types.py +54 -1
- aethergraph/core/runtime/runtime_env.py +35 -14
- aethergraph/core/runtime/runtime_services.py +308 -18
- aethergraph/plugins/agents/default_chat_agent.py +266 -74
- aethergraph/plugins/agents/default_chat_agent_v2.py +487 -0
- aethergraph/plugins/channel/adapters/webui.py +69 -21
- aethergraph/plugins/channel/routes/webui_routes.py +8 -48
- aethergraph/runtime/__init__.py +12 -0
- aethergraph/server/app_factory.py +3 -0
- aethergraph/server/ui_static/assets/index-CFktGdbW.js +4913 -0
- aethergraph/server/ui_static/assets/index-DcfkFlTA.css +1 -0
- aethergraph/server/ui_static/index.html +2 -2
- aethergraph/services/artifacts/facade.py +157 -21
- aethergraph/services/artifacts/types.py +35 -0
- aethergraph/services/artifacts/utils.py +42 -0
- aethergraph/services/channel/channel_bus.py +3 -1
- aethergraph/services/channel/event_hub copy.py +55 -0
- aethergraph/services/channel/event_hub.py +81 -0
- aethergraph/services/channel/factory.py +3 -2
- aethergraph/services/channel/session.py +709 -74
- aethergraph/services/container/default_container.py +69 -7
- aethergraph/services/execution/__init__.py +0 -0
- aethergraph/services/execution/local_python.py +118 -0
- aethergraph/services/indices/__init__.py +0 -0
- aethergraph/services/indices/global_indices.py +21 -0
- aethergraph/services/indices/scoped_indices.py +292 -0
- aethergraph/services/llm/generic_client.py +342 -46
- aethergraph/services/llm/generic_embed_client.py +359 -0
- aethergraph/services/llm/types.py +3 -1
- aethergraph/services/memory/distillers/llm_long_term.py +60 -109
- aethergraph/services/memory/distillers/llm_long_term_v1.py +180 -0
- aethergraph/services/memory/distillers/llm_meta_summary.py +57 -266
- aethergraph/services/memory/distillers/llm_meta_summary_v1.py +342 -0
- aethergraph/services/memory/distillers/long_term.py +48 -131
- aethergraph/services/memory/distillers/long_term_v1.py +170 -0
- aethergraph/services/memory/facade/chat.py +18 -8
- aethergraph/services/memory/facade/core.py +159 -19
- aethergraph/services/memory/facade/distillation.py +86 -31
- aethergraph/services/memory/facade/retrieval.py +100 -1
- aethergraph/services/memory/factory.py +4 -1
- aethergraph/services/planning/__init__.py +0 -0
- aethergraph/services/planning/action_catalog.py +271 -0
- aethergraph/services/planning/bindings.py +56 -0
- aethergraph/services/planning/dependency_index.py +65 -0
- aethergraph/services/planning/flow_validator.py +263 -0
- aethergraph/services/planning/graph_io_adapter.py +150 -0
- aethergraph/services/planning/input_parser.py +312 -0
- aethergraph/services/planning/missing_inputs.py +28 -0
- aethergraph/services/planning/node_planner.py +613 -0
- aethergraph/services/planning/orchestrator.py +112 -0
- aethergraph/services/planning/plan_executor.py +506 -0
- aethergraph/services/planning/plan_types.py +321 -0
- aethergraph/services/planning/planner.py +617 -0
- aethergraph/services/planning/planner_service.py +369 -0
- aethergraph/services/planning/planning_context_builder.py +43 -0
- aethergraph/services/planning/quick_actions.py +29 -0
- aethergraph/services/planning/routers/__init__.py +0 -0
- aethergraph/services/planning/routers/simple_router.py +26 -0
- aethergraph/services/rag/facade.py +0 -3
- aethergraph/services/scope/scope.py +30 -30
- aethergraph/services/scope/scope_factory.py +15 -7
- aethergraph/services/skills/__init__.py +0 -0
- aethergraph/services/skills/skill_registry.py +465 -0
- aethergraph/services/skills/skills.py +220 -0
- aethergraph/services/skills/utils.py +194 -0
- aethergraph/storage/artifacts/artifact_index_jsonl.py +16 -10
- aethergraph/storage/artifacts/artifact_index_sqlite.py +12 -2
- aethergraph/storage/docstore/sqlite_doc_sync.py +1 -1
- aethergraph/storage/memory/event_persist.py +42 -2
- aethergraph/storage/memory/fs_persist.py +32 -2
- aethergraph/storage/search_backend/__init__.py +0 -0
- aethergraph/storage/search_backend/generic_vector_backend.py +230 -0
- aethergraph/storage/search_backend/null_backend.py +34 -0
- aethergraph/storage/search_backend/sqlite_lexical_backend.py +387 -0
- aethergraph/storage/search_backend/utils.py +31 -0
- aethergraph/storage/search_factory.py +75 -0
- aethergraph/storage/vector_index/faiss_index.py +72 -4
- aethergraph/storage/vector_index/sqlite_index.py +521 -52
- aethergraph/storage/vector_index/sqlite_index_vanila.py +311 -0
- aethergraph/storage/vector_index/utils.py +22 -0
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/METADATA +1 -1
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/RECORD +107 -63
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/WHEEL +1 -1
- aethergraph/plugins/agents/default_chat_agent copy.py +0 -90
- aethergraph/server/ui_static/assets/index-BR5GtXcZ.css +0 -1
- aethergraph/server/ui_static/assets/index-CQ0HZZ83.js +0 -400
- aethergraph/services/eventhub/event_hub.py +0 -76
- aethergraph/services/llm/generic_client copy.py +0 -691
- aethergraph/services/prompts/file_store.py +0 -41
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/entry_points.txt +0 -0
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/licenses/LICENSE +0 -0
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/licenses/NOTICE +0 -0
- {aethergraph-0.1.0a3.dist-info → aethergraph-0.1.0a4.dist-info}/top_level.txt +0 -0
|
@@ -125,47 +125,6 @@ async def run_channel_incoming(
|
|
|
125
125
|
raise HTTPException(status_code=500, detail=str(e)) from e
|
|
126
126
|
|
|
127
127
|
|
|
128
|
-
async def _save_upload_as_artifact_deprecated(
|
|
129
|
-
container, upload: UploadFile, session_id: str, identity: RequestIdentity
|
|
130
|
-
) -> str:
|
|
131
|
-
"""
|
|
132
|
-
Streams upload to disk, saves as artifact, returns URI.
|
|
133
|
-
"""
|
|
134
|
-
filename = upload.filename or "unknown"
|
|
135
|
-
ext = ""
|
|
136
|
-
if "." in filename:
|
|
137
|
-
ext = f".{filename.split('.')[-1]}"
|
|
138
|
-
|
|
139
|
-
# 1. Plan Staging
|
|
140
|
-
tmp_path = await container.artifacts.plan_staging_path(
|
|
141
|
-
planned_ext=f"_{uuid.uuid4().hex[:6]}{ext}"
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
# 2. Save Bytes
|
|
145
|
-
with open(tmp_path, "wb") as buffer:
|
|
146
|
-
shutil.copyfileobj(upload.file, buffer)
|
|
147
|
-
|
|
148
|
-
# 3. Register Artifact
|
|
149
|
-
artifact = await container.artifacts.save_file(
|
|
150
|
-
path=tmp_path,
|
|
151
|
-
kind="upload",
|
|
152
|
-
run_id=f"session:{session_id}",
|
|
153
|
-
graph_id="chat",
|
|
154
|
-
node_id="user_input",
|
|
155
|
-
tool_name="web.upload",
|
|
156
|
-
tool_version="1.0.0",
|
|
157
|
-
labels={
|
|
158
|
-
"source": "web_chat",
|
|
159
|
-
"original_name": filename,
|
|
160
|
-
"session_id": session_id,
|
|
161
|
-
"content_type": upload.content_type,
|
|
162
|
-
},
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
# Return URI
|
|
166
|
-
return getattr(artifact, "uri", None) or getattr(artifact, "path", None)
|
|
167
|
-
|
|
168
|
-
|
|
169
128
|
async def _save_upload_as_artifact(
|
|
170
129
|
container: Any,
|
|
171
130
|
upload: UploadFile,
|
|
@@ -210,8 +169,8 @@ async def _save_upload_as_artifact(
|
|
|
210
169
|
node_id="user_upload",
|
|
211
170
|
tool_name="web.upload",
|
|
212
171
|
tool_version="1.0.0",
|
|
213
|
-
|
|
214
|
-
|
|
172
|
+
art_store=container.artifacts,
|
|
173
|
+
art_index=container.artifact_index,
|
|
215
174
|
scope=scope,
|
|
216
175
|
)
|
|
217
176
|
|
|
@@ -227,8 +186,9 @@ async def _save_upload_as_artifact(
|
|
|
227
186
|
},
|
|
228
187
|
)
|
|
229
188
|
|
|
230
|
-
|
|
231
|
-
|
|
189
|
+
return artifact
|
|
190
|
+
# # Return URI (or local path fallback)
|
|
191
|
+
# return getattr(artifact, "uri", None) or getattr(artifact, "path", None)
|
|
232
192
|
|
|
233
193
|
|
|
234
194
|
@router.post("/sessions/{session_id}/chat/incoming")
|
|
@@ -274,15 +234,15 @@ async def session_chat_incoming(
|
|
|
274
234
|
# 3. Process files -> IncomingFile (and save as artifacts)
|
|
275
235
|
incoming_files: list[IncomingFile] = []
|
|
276
236
|
for upload in files:
|
|
277
|
-
|
|
237
|
+
artifact = await _save_upload_as_artifact(container, upload, session_id, identity)
|
|
278
238
|
incoming_files.append(
|
|
279
239
|
IncomingFile(
|
|
280
240
|
id=str(uuid.uuid4()),
|
|
281
241
|
name=upload.filename,
|
|
282
242
|
mimetype=upload.content_type,
|
|
283
243
|
size=getattr(upload, "size", None),
|
|
284
|
-
url=
|
|
285
|
-
uri=
|
|
244
|
+
url=f"/api/v1/artifacts/{artifact.artifact_id}/content",
|
|
245
|
+
uri=artifact.artifact_id, # 👈 use artifact_id here
|
|
286
246
|
extra={
|
|
287
247
|
"source": "web_upload",
|
|
288
248
|
"session_id": session_id,
|
aethergraph/runtime/__init__.py
CHANGED
|
@@ -21,6 +21,8 @@ from aethergraph.core.runtime.runtime_services import (
|
|
|
21
21
|
# llm service helpers
|
|
22
22
|
get_llm_service,
|
|
23
23
|
get_mcp_service,
|
|
24
|
+
# skill service helpers
|
|
25
|
+
get_skill_registry,
|
|
24
26
|
# general service management
|
|
25
27
|
install_services,
|
|
26
28
|
list_ext_context_services,
|
|
@@ -30,6 +32,10 @@ from aethergraph.core.runtime.runtime_services import (
|
|
|
30
32
|
register_context_service,
|
|
31
33
|
register_llm_client,
|
|
32
34
|
register_mcp_client,
|
|
35
|
+
register_skill,
|
|
36
|
+
register_skill_file,
|
|
37
|
+
register_skill_inline,
|
|
38
|
+
register_skills_from_path,
|
|
33
39
|
set_channel_alias,
|
|
34
40
|
set_default_channel,
|
|
35
41
|
# mcp service helpers
|
|
@@ -54,6 +60,12 @@ __all__ = [
|
|
|
54
60
|
"register_llm_client",
|
|
55
61
|
"set_rag_llm_client",
|
|
56
62
|
"set_rag_index_backend",
|
|
63
|
+
# skill service helpers
|
|
64
|
+
"get_skill_registry",
|
|
65
|
+
"register_skill",
|
|
66
|
+
"register_skill_file",
|
|
67
|
+
"register_skill_inline",
|
|
68
|
+
"register_skills_from_path",
|
|
57
69
|
# logger service helpers
|
|
58
70
|
"current_logger_factory",
|
|
59
71
|
# external context service helpers
|
|
@@ -31,6 +31,7 @@ from aethergraph.core.runtime.runtime_services import install_services
|
|
|
31
31
|
# import built-in agents and plugins to register them
|
|
32
32
|
from aethergraph.plugins.agents.default_chat_agent import * # noqa: F403
|
|
33
33
|
|
|
34
|
+
# from aethergraph.plugins.agents.default_chat_agent_v2 import * # noqa: F403
|
|
34
35
|
# channel routes
|
|
35
36
|
from aethergraph.server.loading import GraphLoader, LoadSpec
|
|
36
37
|
from aethergraph.services.container.default_container import build_default_container
|
|
@@ -218,6 +219,8 @@ def _load_user_graphs_from_env() -> None:
|
|
|
218
219
|
if report.errors:
|
|
219
220
|
for e in report.errors:
|
|
220
221
|
print(f"⚠️ [worker load error] {e.source}: {e.error}")
|
|
222
|
+
if e.traceback:
|
|
223
|
+
print(e.traceback)
|
|
221
224
|
|
|
222
225
|
|
|
223
226
|
def create_app_from_env() -> FastAPI:
|