aethergraph 0.1.0a1__tar.gz → 0.1.0a3__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.
- aethergraph-0.1.0a3/MANIFEST.in +5 -0
- {aethergraph-0.1.0a1/src/aethergraph.egg-info → aethergraph-0.1.0a3}/PKG-INFO +138 -31
- aethergraph-0.1.0a3/README.md +273 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/pyproject.toml +19 -8
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/__init__.py +4 -10
- aethergraph-0.1.0a3/src/aethergraph/__main__.py +296 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/agents.py +46 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/apps.py +70 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/artifacts.py +415 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/channels.py +89 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/deps.py +168 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/graphs.py +259 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/identity.py +25 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/memory.py +353 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/misc.py +47 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/pagination.py +29 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/runs.py +568 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/schemas.py +535 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/session.py +323 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/stats.py +201 -0
- aethergraph-0.1.0a3/src/aethergraph/api/v1/viz.py +152 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/config/config.py +22 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/config/loader.py +3 -2
- aethergraph-0.1.0a3/src/aethergraph/config/storage.py +209 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/artifacts.py +27 -14
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/memory.py +45 -17
- aethergraph-0.1.0a3/src/aethergraph/contracts/services/metering.py +129 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/services/runs.py +50 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/services/sessions.py +87 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/state_stores.py +3 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/services/viz.py +44 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/artifact_index.py +88 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/artifact_store.py +99 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/async_kv.py +34 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/blob_store.py +50 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/doc_store.py +35 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/event_log.py +31 -0
- aethergraph-0.1.0a3/src/aethergraph/contracts/storage/vector_index.py +48 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/forward_scheduler.py +13 -2
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/global_scheduler.py +21 -15
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/step_forward.py +10 -1
- aethergraph-0.1.0a3/src/aethergraph/core/graph/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_builder.py +8 -4
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_fn.py +156 -15
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_spec.py +8 -0
- aethergraph-0.1.0a3/src/aethergraph/core/graph/graphify.py +247 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/node_spec.py +0 -2
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/node_state.py +3 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/task_graph.py +39 -1
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/ad_hoc_context.py +121 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/base_service.py +28 -4
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/execution_context.py +13 -15
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/graph_runner.py +222 -37
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/node_context.py +707 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/node_services.py +12 -5
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/recovery.py +15 -1
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/run_manager.py +783 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/run_manager_local.py +204 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/run_registration.py +2 -2
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/run_types.py +89 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/runtime_env.py +286 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/runtime_metering.py +71 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/runtime_registry.py +55 -0
- aethergraph-0.1.0a3/src/aethergraph/core/runtime/runtime_services.py +412 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/tools/builtins/toolset.py +1 -1
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/tools/toolkit.py +5 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/agents/default_chat_agent copy.py +90 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/agents/default_chat_agent.py +171 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/agents/shared.py +81 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/adapters/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/adapters/webui.py +134 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/routes/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/routes/webui_routes.py +401 -0
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/utils/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/utils/slack_utils.py +115 -59
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/utils/telegram_utils.py +88 -47
- aethergraph-0.1.0a3/src/aethergraph/plugins/channel/websockets/weibui_ws.py +172 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/runtime/__init__.py +15 -0
- aethergraph-0.1.0a3/src/aethergraph/server/app_factory.py +246 -0
- aethergraph-0.1.0a3/src/aethergraph/server/clients/channel_client.py +202 -0
- aethergraph-0.1.0a3/src/aethergraph/server/http/channel_http_routes.py +116 -0
- aethergraph-0.1.0a3/src/aethergraph/server/http/channel_ws_routers.py +45 -0
- aethergraph-0.1.0a3/src/aethergraph/server/loading.py +117 -0
- aethergraph-0.1.0a3/src/aethergraph/server/server.py +131 -0
- aethergraph-0.1.0a3/src/aethergraph/server/server_state.py +240 -0
- aethergraph-0.1.0a3/src/aethergraph/server/start.py +283 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/index-BR5GtXcZ.css +1 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/assets/index-CQ0HZZ83.js +400 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/index.html +15 -0
- aethergraph-0.1.0a3/src/aethergraph/server/ui_static/logo.png +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/artifacts/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/artifacts/facade.py +1391 -0
- aethergraph-0.1.0a1/src/aethergraph/services/auth/dev.py → aethergraph-0.1.0a3/src/aethergraph/services/auth/authn.py +0 -8
- aethergraph-0.1.0a3/src/aethergraph/services/auth/authz.py +100 -0
- aethergraph-0.1.0a3/src/aethergraph/services/channel/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/channel/channel_bus.py +19 -1
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/channel/factory.py +13 -1
- aethergraph-0.1.0a3/src/aethergraph/services/channel/ingress.py +311 -0
- aethergraph-0.1.0a3/src/aethergraph/services/channel/queue_adapter.py +75 -0
- aethergraph-0.1.0a3/src/aethergraph/services/channel/session.py +994 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/container/default_container.py +122 -43
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/continuations/continuation.py +6 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/continuations/stores/fs_store.py +19 -0
- aethergraph-0.1.0a3/src/aethergraph/services/eventhub/event_hub.py +76 -0
- aethergraph-0.1.0a3/src/aethergraph/services/kv/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/kv/ephemeral.py +334 -0
- aethergraph-0.1.0a3/src/aethergraph/services/llm/__init__.py +0 -0
- aethergraph-0.1.0a1/src/aethergraph/services/llm/generic_client.py → aethergraph-0.1.0a3/src/aethergraph/services/llm/generic_client copy.py +151 -2
- aethergraph-0.1.0a3/src/aethergraph/services/llm/generic_client.py +1643 -0
- aethergraph-0.1.0a3/src/aethergraph/services/llm/providers.py +5 -0
- aethergraph-0.1.0a3/src/aethergraph/services/llm/types.py +47 -0
- aethergraph-0.1.0a3/src/aethergraph/services/llm/utils.py +284 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/logger/std.py +3 -0
- aethergraph-0.1.0a3/src/aethergraph/services/mcp/__init__.py +9 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/http_client.py +38 -0
- aethergraph-0.1.0a3/src/aethergraph/services/mcp/service.py +324 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/stdio_client.py +41 -6
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/ws_client.py +44 -2
- aethergraph-0.1.0a3/src/aethergraph/services/memory/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/distillers/llm_long_term.py +234 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/distillers/llm_meta_summary.py +398 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/distillers/long_term.py +225 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/__init__.py +3 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/chat.py +440 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/core.py +447 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/distillation.py +424 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/rag.py +410 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/results.py +315 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/retrieval.py +139 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/types.py +77 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade/utils.py +43 -0
- aethergraph-0.1.0a3/src/aethergraph/services/memory/facade_dep.py +1539 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/memory/factory.py +9 -3
- aethergraph-0.1.0a3/src/aethergraph/services/memory/utils.py +10 -0
- aethergraph-0.1.0a3/src/aethergraph/services/metering/eventlog_metering.py +470 -0
- aethergraph-0.1.0a3/src/aethergraph/services/metering/noop.py +25 -0
- aethergraph-0.1.0a3/src/aethergraph/services/rag/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/facade.py +279 -23
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/index_factory.py +2 -2
- aethergraph-0.1.0a3/src/aethergraph/services/rag/node_rag.py +317 -0
- aethergraph-0.1.0a3/src/aethergraph/services/rate_limit/inmem_rate_limit.py +24 -0
- aethergraph-0.1.0a3/src/aethergraph/services/registry/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/registry/agent_app_meta.py +419 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/registry/registry_key.py +1 -1
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/registry/unified_registry.py +74 -6
- aethergraph-0.1.0a3/src/aethergraph/services/scope/scope.py +159 -0
- aethergraph-0.1.0a3/src/aethergraph/services/scope/scope_factory.py +164 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/serialize.py +5 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/utils.py +2 -1
- aethergraph-0.1.0a3/src/aethergraph/services/viz/__init__.py +0 -0
- aethergraph-0.1.0a3/src/aethergraph/services/viz/facade.py +413 -0
- aethergraph-0.1.0a3/src/aethergraph/services/viz/viz_service.py +69 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/artifact_index_jsonl.py +180 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/artifact_index_sqlite.py +426 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/cas_store.py +422 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/fs_cas.py +18 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/s3_cas.py +14 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/artifacts/utils.py +124 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/blob/fs_blob.py +86 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/blob/s3_blob.py +115 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/continuation_store/fs_cont.py +283 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/continuation_store/inmem_cont.py +146 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/continuation_store/kvdoc_cont.py +261 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/docstore/fs_doc.py +63 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/docstore/sqlite_doc.py +31 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/docstore/sqlite_doc_sync.py +90 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/eventlog/fs_event.py +136 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/eventlog/sqlite_event.py +47 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/eventlog/sqlite_event_sync.py +178 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/factory.py +432 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/fs_utils.py +28 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/graph_state_store/state_store.py +64 -0
- aethergraph-0.1.0a1/src/aethergraph/services/kv/ephemeral.py → aethergraph-0.1.0a3/src/aethergraph/storage/kv/inmem_kv.py +58 -45
- aethergraph-0.1.0a3/src/aethergraph/storage/kv/layered_kv.py +52 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/kv/sqlite_kv.py +39 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/kv/sqlite_kv_sync.py +98 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/memory/event_persist.py +68 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/memory/fs_persist.py +118 -0
- aethergraph-0.1.0a1/src/aethergraph/services/memory/hotlog_kv.py → aethergraph-0.1.0a3/src/aethergraph/storage/memory/hotlog.py +8 -2
- {aethergraph-0.1.0a1/src/aethergraph/services → aethergraph-0.1.0a3/src/aethergraph/storage}/memory/indices.py +31 -7
- aethergraph-0.1.0a3/src/aethergraph/storage/metering/meter_event.py +55 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/runs/doc_store.py +280 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/runs/inmen_store.py +82 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/runs/sqlite_run_store.py +403 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/sessions/doc_store.py +183 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/sessions/inmem_store.py +110 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/sessions/sqlite_session_store.py +399 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/vector_index/chroma_index.py +138 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/vector_index/faiss_index.py +179 -0
- aethergraph-0.1.0a3/src/aethergraph/storage/vector_index/sqlite_index.py +187 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3/src/aethergraph.egg-info}/PKG-INFO +138 -31
- aethergraph-0.1.0a3/src/aethergraph.egg-info/SOURCES.txt +360 -0
- aethergraph-0.1.0a3/src/aethergraph.egg-info/entry_points.txt +3 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph.egg-info/requires.txt +2 -1
- aethergraph-0.1.0a1/README.md +0 -167
- aethergraph-0.1.0a1/src/aethergraph/core/graph/graphify.py +0 -128
- aethergraph-0.1.0a1/src/aethergraph/core/runtime/ad_hoc_context.py +0 -61
- aethergraph-0.1.0a1/src/aethergraph/core/runtime/node_context.py +0 -203
- aethergraph-0.1.0a1/src/aethergraph/core/runtime/runtime_env.py +0 -157
- aethergraph-0.1.0a1/src/aethergraph/core/runtime/runtime_registry.py +0 -32
- aethergraph-0.1.0a1/src/aethergraph/core/runtime/runtime_services.py +0 -224
- aethergraph-0.1.0a1/src/aethergraph/plugins/channel/adapters/webui.py +0 -134
- aethergraph-0.1.0a1/src/aethergraph/plugins/channel/routes/webui_routes.py +0 -136
- aethergraph-0.1.0a1/src/aethergraph/server/app_factory.py +0 -84
- aethergraph-0.1.0a1/src/aethergraph/server/start.py +0 -122
- aethergraph-0.1.0a1/src/aethergraph/services/artifacts/facade.py +0 -284
- aethergraph-0.1.0a1/src/aethergraph/services/artifacts/factory.py +0 -35
- aethergraph-0.1.0a1/src/aethergraph/services/artifacts/fs_store.py +0 -656
- aethergraph-0.1.0a1/src/aethergraph/services/artifacts/jsonl_index.py +0 -123
- aethergraph-0.1.0a1/src/aethergraph/services/artifacts/sqlite_index.py +0 -209
- aethergraph-0.1.0a1/src/aethergraph/services/channel/session.py +0 -511
- aethergraph-0.1.0a1/src/aethergraph/services/llm/providers.py +0 -3
- aethergraph-0.1.0a1/src/aethergraph/services/mcp/service.py +0 -100
- aethergraph-0.1.0a1/src/aethergraph/services/memory/distillers/episode.py +0 -116
- aethergraph-0.1.0a1/src/aethergraph/services/memory/distillers/rolling.py +0 -74
- aethergraph-0.1.0a1/src/aethergraph/services/memory/facade.py +0 -633
- aethergraph-0.1.0a1/src/aethergraph/services/memory/persist_fs.py +0 -40
- aethergraph-0.1.0a1/src/aethergraph/services/metering/noop.py +0 -4
- aethergraph-0.1.0a1/src/aethergraph/services/rag/index/base.py +0 -27
- aethergraph-0.1.0a1/src/aethergraph/services/rag/index/faiss_index.py +0 -121
- aethergraph-0.1.0a1/src/aethergraph/services/rag/index/sqlite_index.py +0 -134
- aethergraph-0.1.0a1/src/aethergraph.egg-info/SOURCES.txt +0 -187
- aethergraph-0.1.0a1/src/aethergraph.egg-info/entry_points.txt +0 -2
- aethergraph-0.1.0a1/tests/test_slack_extra.py +0 -9
- aethergraph-0.1.0a1/tests/test_smoke.py +0 -2
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/LICENSE +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/NOTICE +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/setup.cfg +0 -0
- {aethergraph-0.1.0a1/src/aethergraph/config → aethergraph-0.1.0a3/src/aethergraph/api/v1}/__init__.py +0 -0
- {aethergraph-0.1.0a1/src/aethergraph/plugins/channel → aethergraph-0.1.0a3/src/aethergraph/config}/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/config/context.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/config/llm.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/config/runtime.py +0 -0
- {aethergraph-0.1.0a1/src/aethergraph/plugins/channel/adapters → aethergraph-0.1.0a3/src/aethergraph/contracts}/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/errors/errors.py +0 -0
- {aethergraph-0.1.0a1/src/aethergraph/plugins/channel/routes → aethergraph-0.1.0a3/src/aethergraph/contracts/services}/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/channel.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/continuations.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/eventbus.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/kv.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/llm.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/mcp.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/resume.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/contracts/services/wakeup.py +0 -0
- {aethergraph-0.1.0a1/src/aethergraph/plugins/channel/utils → aethergraph-0.1.0a3/src/aethergraph/core}/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/base_scheduler.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/retry_policy.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/step_result.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/execution/wait_types.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_io.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_refs.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/graph_state.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/interpreter.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/node_handle.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/task_node.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/utils.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/graph/visualize.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/bind_adapter.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/bound_memory.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/lifecycle.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/runtime/wakeup_watcher.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/tools/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/tools/builtins/channel_tools.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/core/tools/waitable.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/adapters/console.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/adapters/file.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/adapters/slack.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/adapters/telegram.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/adapters/webhook.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/routes/console_routes.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/routes/slack_routes.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/routes/telegram_routes.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/websockets/slack_ws.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/channel/websockets/telegram_polling.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/mcp/fs_server.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/mcp/http_server.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/mcp/ws_server.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/net/http.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/plugins/utils/data_io.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/runner/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/server/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/artifacts/paths.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/artifacts/utils.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/channel/wait_helpers.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/clock/clock.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/continuations/factory.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/continuations/stores/inmem_store.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/eventbus/inmem.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/features/static.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/kv/factory.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/kv/layered.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/kv/sqlite_kv.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/llm/factory.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/llm/service.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/logger/base.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/logger/compat.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/logger/formatters.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/helpers.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/mcp_tools.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/mcp/registry.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/memory/bound.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/memory/io_helpers.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/memory/resolver.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/prompts/file_store.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/chunker.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/parsers/md.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/parsers/pdf.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/parsers/txt.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/utils/hybrid.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/rag/utils/make_fs_key.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/redactor/simple.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/registry/key_parsing.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/resume/multi_scheduler_resume_bus.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/resume/router.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/schedulers/registry.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/secrets/base.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/secrets/env.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/externalize.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/graph_observer.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/json_store.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/resume_policy.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/state_stores/validate.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/tracing/noop.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/waits/wait_registry.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/wakeup/memory_queue.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/wakeup/scanner_producer.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/services/wakeup/worker.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/tools/__init__.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph/utils/optdeps.py +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph.egg-info/dependency_links.txt +0 -0
- {aethergraph-0.1.0a1 → aethergraph-0.1.0a3}/src/aethergraph.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aethergraph
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a3
|
|
4
4
|
Summary: Python-first agentic DAG execution framework
|
|
5
5
|
Author-email: Zhaocheng Liu <zhaocheng@aiperture.io>
|
|
6
6
|
License: Apache License
|
|
@@ -199,7 +199,7 @@ Requires-Python: >=3.10
|
|
|
199
199
|
Description-Content-Type: text/markdown
|
|
200
200
|
License-File: LICENSE
|
|
201
201
|
License-File: NOTICE
|
|
202
|
-
Requires-Dist: fastapi
|
|
202
|
+
Requires-Dist: fastapi<1.0,>=0.110
|
|
203
203
|
Requires-Dist: uvicorn[standard]>=0.31
|
|
204
204
|
Requires-Dist: pydantic>=2.6
|
|
205
205
|
Requires-Dist: pydantic-settings>=2.2
|
|
@@ -239,6 +239,7 @@ Provides-Extra: test
|
|
|
239
239
|
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
240
240
|
Requires-Dist: pytest-asyncio>=0.23; extra == "test"
|
|
241
241
|
Requires-Dist: coverage>=7.4; extra == "test"
|
|
242
|
+
Requires-Dist: trio; extra == "test"
|
|
242
243
|
Dynamic: license-file
|
|
243
244
|
|
|
244
245
|
<p align="center">
|
|
@@ -247,9 +248,13 @@ Dynamic: license-file
|
|
|
247
248
|
|
|
248
249
|
# AetherGraph
|
|
249
250
|
|
|
250
|
-
**AetherGraph** is a **Python
|
|
251
|
+
**AetherGraph** is a **Python-first agentic DAG execution framework** for building and orchestrating AI-powered workflows. It pairs a clean, function-oriented developer experience with a resilient runtime—event-driven waits, resumable runs, and pluggable services (LLM, memory, artifacts, RAG)—so you can start simple and scale to complex R&D pipelines.
|
|
251
252
|
|
|
252
|
-
Use AetherGraph to prototype interactive assistants, simulation/optimization loops, data transforms, or multi
|
|
253
|
+
Use AetherGraph to prototype interactive assistants, simulation/optimization loops, data transforms, or multi-step automations without boilerplate. It works **with or without LLMs**—bring your own tools and services, and compose them into repeatable, observable graphs.
|
|
254
|
+
|
|
255
|
+
* **[Introduction](https://aiperture.io)**
|
|
256
|
+
* **[Docs](https://aiperture.github.io/aethergraph-docs/)**
|
|
257
|
+
* **[Examples](https://github.com/AIperture/aethergraph-examples)**
|
|
253
258
|
|
|
254
259
|
---
|
|
255
260
|
|
|
@@ -257,8 +262,9 @@ Use AetherGraph to prototype interactive assistants, simulation/optimization loo
|
|
|
257
262
|
|
|
258
263
|
* Python **3.10+**
|
|
259
264
|
* macOS, Linux, or Windows
|
|
260
|
-
* *(
|
|
261
|
-
* *(Optional
|
|
265
|
+
* *(Suggested)* LLM API keys (OpenAI, Anthropic, Google, etc.)
|
|
266
|
+
* *(Optional)* `slack` or `telegram` token. See [Channel Setup](https://aiperture.github.io/aethergraph-docs/channel-setup/introduction/)
|
|
267
|
+
* *(Optional UI)* A modern browser to use the built-in AetherGraph web UI
|
|
262
268
|
|
|
263
269
|
---
|
|
264
270
|
|
|
@@ -280,6 +286,8 @@ pip install "aethergraph[slack]"
|
|
|
280
286
|
pip install "aethergraph[dev]"
|
|
281
287
|
```
|
|
282
288
|
|
|
289
|
+
> The PyPI package ships with a prebuilt UI bundle, so `/ui` works out of the box
|
|
290
|
+
> when you run the server locally.
|
|
283
291
|
|
|
284
292
|
### Option B — From source (editable dev mode)
|
|
285
293
|
|
|
@@ -294,11 +302,16 @@ pip install -e .
|
|
|
294
302
|
echo "(optional)" && pip install -e ".[slack,dev]"
|
|
295
303
|
```
|
|
296
304
|
|
|
305
|
+
> When running from source, the backend still works without the frontend bundle.
|
|
306
|
+
> If you want the **built-in UI** from source, you’ll need to build the frontend
|
|
307
|
+
> and copy the static bundle into `aethergraph/server/ui_static/`
|
|
308
|
+
> (see the “UI Guide” in the docs).
|
|
309
|
+
|
|
297
310
|
---
|
|
298
311
|
|
|
299
|
-
## Configure
|
|
312
|
+
## Configure
|
|
300
313
|
|
|
301
|
-
|
|
314
|
+
Aethergraph can run without an LLM, but for many LLM-backed flows in [examples](https://github.com/AIperture/aethergraph-examples), set keys via environment variables or a local secrets file.
|
|
302
315
|
|
|
303
316
|
Minimal example (OpenAI):
|
|
304
317
|
|
|
@@ -310,7 +323,7 @@ AETHERGRAPH_LLM__DEFAULT__MODEL=gpt-4o-mini
|
|
|
310
323
|
AETHERGRAPH_LLM__DEFAULT__API_KEY=sk-...your-key...
|
|
311
324
|
```
|
|
312
325
|
|
|
313
|
-
Or inline in a script at runtime (for on
|
|
326
|
+
Or inline in a script at runtime (for on-demand key setting):
|
|
314
327
|
|
|
315
328
|
```python
|
|
316
329
|
from aethergraph.runtime import register_llm_client
|
|
@@ -323,45 +336,131 @@ open_ai_client = register_llm_client(
|
|
|
323
336
|
)
|
|
324
337
|
```
|
|
325
338
|
|
|
326
|
-
See
|
|
327
|
-
|
|
339
|
+
See the docs for setup of **external channel** methods (Slack, Telegram, etc.) for real-time interaction.
|
|
328
340
|
|
|
329
|
-
> **Where should `.env` live?**
|
|
341
|
+
> **Where should `.env` live?**
|
|
342
|
+
> In your **project root** (the directory where you run your Python entry point).
|
|
343
|
+
> You can override with `AETHERGRAPH_ENV_FILE=/path/to/.env` if needed.
|
|
330
344
|
|
|
331
345
|
---
|
|
332
346
|
|
|
333
|
-
##
|
|
334
|
-
|
|
335
|
-
1. Verify install:
|
|
347
|
+
## Verify install
|
|
336
348
|
|
|
337
349
|
```bash
|
|
338
350
|
python -c "import aethergraph; print('AetherGraph OK, version:', getattr(aethergraph, '__version__', 'dev'))"
|
|
339
351
|
```
|
|
340
352
|
|
|
341
|
-
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Run the built-in UI
|
|
356
|
+
|
|
357
|
+
AetherGraph ships with a small web UI that lets you:
|
|
358
|
+
|
|
359
|
+
* Browse and launch **apps** (click-to-run graphs)
|
|
360
|
+
* Chat with **agents** (graph-backed chat endpoints)
|
|
361
|
+
* Inspect **runs**, **sessions**, and **artifacts**
|
|
362
|
+
|
|
363
|
+
### 1. Define a simple project module
|
|
364
|
+
|
|
365
|
+
From your project root:
|
|
366
|
+
|
|
367
|
+
```text
|
|
368
|
+
my_project/
|
|
369
|
+
demos/
|
|
370
|
+
__init__.py
|
|
371
|
+
chat_demo.py
|
|
372
|
+
aethergraph_data/ # workspace (created automatically as needed)
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Example `chat_demo.py`:
|
|
376
|
+
|
|
377
|
+
```python
|
|
378
|
+
# demos/chat_demo.py
|
|
379
|
+
from aethergraph import graphify
|
|
380
|
+
|
|
381
|
+
@graphify(
|
|
382
|
+
name="chat_with_memory_demo",
|
|
383
|
+
inputs=[],
|
|
384
|
+
outputs=["turns", "summary"],
|
|
385
|
+
as_app={
|
|
386
|
+
"id": "chat_with_memory_demo",
|
|
387
|
+
"name": "Chat with Memory",
|
|
388
|
+
},
|
|
389
|
+
)
|
|
390
|
+
def chat_with_memory_demo():
|
|
391
|
+
# Your graph implementation here – tools, nodes, etc.
|
|
392
|
+
...
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
> `as_app={...}` tells AetherGraph to expose this graph in the **App Gallery** of the UI.
|
|
396
|
+
> You can also define `graph_fn`-based **agents** with `as_agent={...}` to appear in the
|
|
397
|
+
> **Agent Gallery**.
|
|
398
|
+
|
|
399
|
+
### 2. Start the server with UI from the terminal (recommended)
|
|
400
|
+
|
|
401
|
+
From `my_project/`:
|
|
342
402
|
|
|
343
403
|
```bash
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
404
|
+
aethergraph serve \
|
|
405
|
+
--project-root . \
|
|
406
|
+
--load-module demos \
|
|
407
|
+
--reload
|
|
408
|
+
```
|
|
347
409
|
|
|
348
|
-
|
|
349
|
-
async def hello_world(context: NodeContext):
|
|
350
|
-
print("Hello from AetherGraph!")
|
|
351
|
-
return {"ok": True}
|
|
410
|
+
This will:
|
|
352
411
|
|
|
353
|
-
|
|
354
|
-
|
|
412
|
+
* Add `.` to `sys.path` so `demos` can be imported.
|
|
413
|
+
* Load any graphs/apps/agents defined in the `demos` module.
|
|
414
|
+
* Start the API + UI server on `http://127.0.0.1:8745`.
|
|
415
|
+
* Enable **auto-reload**: editing your graph files triggers a restart and reload.
|
|
416
|
+
|
|
417
|
+
You should see log lines like:
|
|
418
|
+
|
|
419
|
+
```text
|
|
420
|
+
[AetherGraph] 🚀 Server started at: http://127.0.0.1:8745
|
|
421
|
+
[AetherGraph] 🖥️ UI: http://127.0.0.1:8745/ui
|
|
422
|
+
[AetherGraph] 📡 API: http://127.0.0.1:8745/api/v1/
|
|
423
|
+
[AetherGraph] 📂 Workspace: ./aethergraph_data
|
|
424
|
+
[AetherGraph] ♻️ Auto-reload: enabled
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
Then open in your browser:
|
|
428
|
+
|
|
429
|
+
* **UI:** `http://127.0.0.1:8745/ui` – App Gallery, Agent Gallery, runs, sessions, artifacts.
|
|
430
|
+
* **API:** `http://127.0.0.1:8745/api/v1/` – for direct HTTP calls.
|
|
431
|
+
|
|
432
|
+
### 3. (Optional) Start the server from a Python script
|
|
433
|
+
|
|
434
|
+
If you prefer to embed the server in your own launcher:
|
|
435
|
+
|
|
436
|
+
```python
|
|
437
|
+
# start_server.py
|
|
438
|
+
from aethergraph import start_server
|
|
439
|
+
|
|
440
|
+
if __name__ == "__main__":
|
|
441
|
+
start_server(
|
|
442
|
+
workspace="./aethergraph_data",
|
|
443
|
+
project_root=".",
|
|
444
|
+
load_module=["demos"],
|
|
445
|
+
host="127.0.0.1",
|
|
446
|
+
port=8745,
|
|
447
|
+
)
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
python start_server.py
|
|
355
452
|
```
|
|
356
453
|
|
|
454
|
+
> For **active development**, the CLI with `--reload` is recommended.
|
|
455
|
+
> `start_server(...)` is better when you want a simple “ship a server in my app” story.
|
|
456
|
+
|
|
457
|
+
For more details, see the **UI Guide** section in the docs (server setup, agents/apps, and common pitfalls).
|
|
458
|
+
|
|
357
459
|
---
|
|
358
460
|
|
|
359
461
|
## Examples
|
|
360
462
|
|
|
361
|
-
Quick
|
|
362
|
-
|
|
363
|
-
* **Repo:** [https://github.com/AIperture/aethergraph-examples](https://github.com/AIperture/aethergraph-examples)
|
|
364
|
-
* **Path:** `examples/`
|
|
463
|
+
Quick-start scripts live under `examples/` in this repo.
|
|
365
464
|
|
|
366
465
|
Run an example:
|
|
367
466
|
|
|
@@ -370,14 +469,22 @@ cd examples
|
|
|
370
469
|
python hello_world.py
|
|
371
470
|
```
|
|
372
471
|
|
|
472
|
+
A growing gallery of standalone examples and recipes lives under:
|
|
473
|
+
|
|
474
|
+
* **Repo:** [https://github.com/AIperture/aethergraph-examples](https://github.com/AIperture/aethergraph-examples)
|
|
475
|
+
|
|
373
476
|
---
|
|
374
477
|
|
|
375
478
|
## Troubleshooting
|
|
376
479
|
|
|
377
480
|
* **`ModuleNotFoundError`**: ensure you installed into the active venv and that your shell is using it.
|
|
378
481
|
* **LLM/API errors**: confirm provider/model/key configuration (env vars or your local secrets file).
|
|
379
|
-
* **Windows path quirks**: clear any local cache folders (e.g., `.rag/`) and re
|
|
482
|
+
* **Windows path quirks**: clear any local cache folders (e.g., `.rag/`) and re-run; verify write permissions.
|
|
380
483
|
* **Slack extra**: install with `pip install "aethergraph[slack]"` if you need Slack channel integration.
|
|
484
|
+
* **UI shows no apps/agents**:
|
|
485
|
+
|
|
486
|
+
* Make sure your module (e.g. `demos`) is importable under `--project-root`.
|
|
487
|
+
* Ensure at least one graph has `as_app={...}` or `graph_fn` has `as_agent={...}`.
|
|
381
488
|
|
|
382
489
|
---
|
|
383
490
|
|
|
@@ -407,4 +514,4 @@ pytest -q
|
|
|
407
514
|
|
|
408
515
|
## License
|
|
409
516
|
|
|
410
|
-
**Apache
|
|
517
|
+
**Apache-2.0** — see `LICENSE`.
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/logo.png" alt="AetherGraph" width="360"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# AetherGraph
|
|
6
|
+
|
|
7
|
+
**AetherGraph** is a **Python-first agentic DAG execution framework** for building and orchestrating AI-powered workflows. It pairs a clean, function-oriented developer experience with a resilient runtime—event-driven waits, resumable runs, and pluggable services (LLM, memory, artifacts, RAG)—so you can start simple and scale to complex R&D pipelines.
|
|
8
|
+
|
|
9
|
+
Use AetherGraph to prototype interactive assistants, simulation/optimization loops, data transforms, or multi-step automations without boilerplate. It works **with or without LLMs**—bring your own tools and services, and compose them into repeatable, observable graphs.
|
|
10
|
+
|
|
11
|
+
* **[Introduction](https://aiperture.io)**
|
|
12
|
+
* **[Docs](https://aiperture.github.io/aethergraph-docs/)**
|
|
13
|
+
* **[Examples](https://github.com/AIperture/aethergraph-examples)**
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
* Python **3.10+**
|
|
20
|
+
* macOS, Linux, or Windows
|
|
21
|
+
* *(Suggested)* LLM API keys (OpenAI, Anthropic, Google, etc.)
|
|
22
|
+
* *(Optional)* `slack` or `telegram` token. See [Channel Setup](https://aiperture.github.io/aethergraph-docs/channel-setup/introduction/)
|
|
23
|
+
* *(Optional UI)* A modern browser to use the built-in AetherGraph web UI
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
### Option A — PyPI (recommended)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pip install aethergraph
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Optional extras:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Slack adapter
|
|
39
|
+
pip install "aethergraph[slack]"
|
|
40
|
+
|
|
41
|
+
# Dev tooling (linting, tests, types)
|
|
42
|
+
pip install "aethergraph[dev]"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> The PyPI package ships with a prebuilt UI bundle, so `/ui` works out of the box
|
|
46
|
+
> when you run the server locally.
|
|
47
|
+
|
|
48
|
+
### Option B — From source (editable dev mode)
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git clone https://github.com/AIperture/aethergraph.git
|
|
52
|
+
cd aethergraph
|
|
53
|
+
|
|
54
|
+
# Base
|
|
55
|
+
pip install -e .
|
|
56
|
+
|
|
57
|
+
# With extras
|
|
58
|
+
echo "(optional)" && pip install -e ".[slack,dev]"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
> When running from source, the backend still works without the frontend bundle.
|
|
62
|
+
> If you want the **built-in UI** from source, you’ll need to build the frontend
|
|
63
|
+
> and copy the static bundle into `aethergraph/server/ui_static/`
|
|
64
|
+
> (see the “UI Guide” in the docs).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Configure
|
|
69
|
+
|
|
70
|
+
Aethergraph can run without an LLM, but for many LLM-backed flows in [examples](https://github.com/AIperture/aethergraph-examples), set keys via environment variables or a local secrets file.
|
|
71
|
+
|
|
72
|
+
Minimal example (OpenAI):
|
|
73
|
+
|
|
74
|
+
```ini
|
|
75
|
+
# .env (example)
|
|
76
|
+
AETHERGRAPH_LLM__ENABLED=true
|
|
77
|
+
AETHERGRAPH_LLM__DEFAULT__PROVIDER=openai
|
|
78
|
+
AETHERGRAPH_LLM__DEFAULT__MODEL=gpt-4o-mini
|
|
79
|
+
AETHERGRAPH_LLM__DEFAULT__API_KEY=sk-...your-key...
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Or inline in a script at runtime (for on-demand key setting):
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
from aethergraph.runtime import register_llm_client
|
|
86
|
+
|
|
87
|
+
open_ai_client = register_llm_client(
|
|
88
|
+
profile="my_llm",
|
|
89
|
+
provider="openai",
|
|
90
|
+
model="gpt-4o-mini",
|
|
91
|
+
api_key="sk-...your-key...",
|
|
92
|
+
)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
See the docs for setup of **external channel** methods (Slack, Telegram, etc.) for real-time interaction.
|
|
96
|
+
|
|
97
|
+
> **Where should `.env` live?**
|
|
98
|
+
> In your **project root** (the directory where you run your Python entry point).
|
|
99
|
+
> You can override with `AETHERGRAPH_ENV_FILE=/path/to/.env` if needed.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Verify install
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -c "import aethergraph; print('AetherGraph OK, version:', getattr(aethergraph, '__version__', 'dev'))"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Run the built-in UI
|
|
112
|
+
|
|
113
|
+
AetherGraph ships with a small web UI that lets you:
|
|
114
|
+
|
|
115
|
+
* Browse and launch **apps** (click-to-run graphs)
|
|
116
|
+
* Chat with **agents** (graph-backed chat endpoints)
|
|
117
|
+
* Inspect **runs**, **sessions**, and **artifacts**
|
|
118
|
+
|
|
119
|
+
### 1. Define a simple project module
|
|
120
|
+
|
|
121
|
+
From your project root:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
my_project/
|
|
125
|
+
demos/
|
|
126
|
+
__init__.py
|
|
127
|
+
chat_demo.py
|
|
128
|
+
aethergraph_data/ # workspace (created automatically as needed)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Example `chat_demo.py`:
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
# demos/chat_demo.py
|
|
135
|
+
from aethergraph import graphify
|
|
136
|
+
|
|
137
|
+
@graphify(
|
|
138
|
+
name="chat_with_memory_demo",
|
|
139
|
+
inputs=[],
|
|
140
|
+
outputs=["turns", "summary"],
|
|
141
|
+
as_app={
|
|
142
|
+
"id": "chat_with_memory_demo",
|
|
143
|
+
"name": "Chat with Memory",
|
|
144
|
+
},
|
|
145
|
+
)
|
|
146
|
+
def chat_with_memory_demo():
|
|
147
|
+
# Your graph implementation here – tools, nodes, etc.
|
|
148
|
+
...
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
> `as_app={...}` tells AetherGraph to expose this graph in the **App Gallery** of the UI.
|
|
152
|
+
> You can also define `graph_fn`-based **agents** with `as_agent={...}` to appear in the
|
|
153
|
+
> **Agent Gallery**.
|
|
154
|
+
|
|
155
|
+
### 2. Start the server with UI from the terminal (recommended)
|
|
156
|
+
|
|
157
|
+
From `my_project/`:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
aethergraph serve \
|
|
161
|
+
--project-root . \
|
|
162
|
+
--load-module demos \
|
|
163
|
+
--reload
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
This will:
|
|
167
|
+
|
|
168
|
+
* Add `.` to `sys.path` so `demos` can be imported.
|
|
169
|
+
* Load any graphs/apps/agents defined in the `demos` module.
|
|
170
|
+
* Start the API + UI server on `http://127.0.0.1:8745`.
|
|
171
|
+
* Enable **auto-reload**: editing your graph files triggers a restart and reload.
|
|
172
|
+
|
|
173
|
+
You should see log lines like:
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
[AetherGraph] 🚀 Server started at: http://127.0.0.1:8745
|
|
177
|
+
[AetherGraph] 🖥️ UI: http://127.0.0.1:8745/ui
|
|
178
|
+
[AetherGraph] 📡 API: http://127.0.0.1:8745/api/v1/
|
|
179
|
+
[AetherGraph] 📂 Workspace: ./aethergraph_data
|
|
180
|
+
[AetherGraph] ♻️ Auto-reload: enabled
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Then open in your browser:
|
|
184
|
+
|
|
185
|
+
* **UI:** `http://127.0.0.1:8745/ui` – App Gallery, Agent Gallery, runs, sessions, artifacts.
|
|
186
|
+
* **API:** `http://127.0.0.1:8745/api/v1/` – for direct HTTP calls.
|
|
187
|
+
|
|
188
|
+
### 3. (Optional) Start the server from a Python script
|
|
189
|
+
|
|
190
|
+
If you prefer to embed the server in your own launcher:
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
# start_server.py
|
|
194
|
+
from aethergraph import start_server
|
|
195
|
+
|
|
196
|
+
if __name__ == "__main__":
|
|
197
|
+
start_server(
|
|
198
|
+
workspace="./aethergraph_data",
|
|
199
|
+
project_root=".",
|
|
200
|
+
load_module=["demos"],
|
|
201
|
+
host="127.0.0.1",
|
|
202
|
+
port=8745,
|
|
203
|
+
)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
python start_server.py
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
> For **active development**, the CLI with `--reload` is recommended.
|
|
211
|
+
> `start_server(...)` is better when you want a simple “ship a server in my app” story.
|
|
212
|
+
|
|
213
|
+
For more details, see the **UI Guide** section in the docs (server setup, agents/apps, and common pitfalls).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Examples
|
|
218
|
+
|
|
219
|
+
Quick-start scripts live under `examples/` in this repo.
|
|
220
|
+
|
|
221
|
+
Run an example:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
cd examples
|
|
225
|
+
python hello_world.py
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
A growing gallery of standalone examples and recipes lives under:
|
|
229
|
+
|
|
230
|
+
* **Repo:** [https://github.com/AIperture/aethergraph-examples](https://github.com/AIperture/aethergraph-examples)
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Troubleshooting
|
|
235
|
+
|
|
236
|
+
* **`ModuleNotFoundError`**: ensure you installed into the active venv and that your shell is using it.
|
|
237
|
+
* **LLM/API errors**: confirm provider/model/key configuration (env vars or your local secrets file).
|
|
238
|
+
* **Windows path quirks**: clear any local cache folders (e.g., `.rag/`) and re-run; verify write permissions.
|
|
239
|
+
* **Slack extra**: install with `pip install "aethergraph[slack]"` if you need Slack channel integration.
|
|
240
|
+
* **UI shows no apps/agents**:
|
|
241
|
+
|
|
242
|
+
* Make sure your module (e.g. `demos`) is importable under `--project-root`.
|
|
243
|
+
* Ensure at least one graph has `as_app={...}` or `graph_fn` has `as_agent={...}`.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Contributing (early phase)
|
|
248
|
+
|
|
249
|
+
* Use feature branches and open a PR against `main`.
|
|
250
|
+
* Keep public examples free of real secrets.
|
|
251
|
+
* Run tests locally before pushing.
|
|
252
|
+
|
|
253
|
+
Dev install:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
pip install -e .[dev]
|
|
257
|
+
pytest -q
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Project Links
|
|
263
|
+
|
|
264
|
+
* **Source:** [https://github.com/AIperture/aethergraph](https://github.com/AIperture/aethergraph)
|
|
265
|
+
* **Issues:** [https://github.com/AIperture/aethergraph/issues](https://github.com/AIperture/aethergraph/issues)
|
|
266
|
+
* **Examples:** [https://github.com/AIperture/aethergraph-examples](https://github.com/AIperture/aethergraph-examples)
|
|
267
|
+
* **Docs (preview):** [https://aiperture.github.io/aethergraph-docs/](https://aiperture.github.io/aethergraph-docs/)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## License
|
|
272
|
+
|
|
273
|
+
**Apache-2.0** — see `LICENSE`.
|
|
@@ -4,16 +4,16 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "aethergraph"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.0a3"
|
|
8
8
|
description = "Python-first agentic DAG execution framework"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
11
11
|
authors = [{ name = "Zhaocheng Liu", email = "zhaocheng@aiperture.io" }]
|
|
12
12
|
requires-python = ">=3.10"
|
|
13
13
|
|
|
14
|
-
# Conservative lower bounds;
|
|
14
|
+
# Conservative lower bounds; tighten as stabilize.
|
|
15
15
|
dependencies = [
|
|
16
|
-
"fastapi>=0.110",
|
|
16
|
+
"fastapi>=0.110,<1.0",
|
|
17
17
|
"uvicorn[standard]>=0.31",
|
|
18
18
|
"pydantic>=2.6",
|
|
19
19
|
"pydantic-settings>=2.2",
|
|
@@ -50,7 +50,9 @@ Documentation = "https://aiperture.github.io/aethergraph-docs/"
|
|
|
50
50
|
Issues = "https://github.com/AIperture/aethergraph/issues"
|
|
51
51
|
|
|
52
52
|
[project.scripts]
|
|
53
|
-
aethergraph = "aethergraph.
|
|
53
|
+
aethergraph = "aethergraph.__main__:main"
|
|
54
|
+
aethergraph-server = "aethergraph.server.server:main"
|
|
55
|
+
|
|
54
56
|
|
|
55
57
|
[project.optional-dependencies]
|
|
56
58
|
# Keep extras small and purposeful; add more as modularize features.
|
|
@@ -81,18 +83,26 @@ docs = [
|
|
|
81
83
|
test = [
|
|
82
84
|
"pytest>=8.0.0",
|
|
83
85
|
"pytest-asyncio>=0.23",
|
|
84
|
-
"coverage>=7.4"
|
|
86
|
+
"coverage>=7.4",
|
|
87
|
+
"trio"
|
|
85
88
|
]
|
|
86
89
|
|
|
87
90
|
[tool.setuptools]
|
|
88
91
|
package-dir = { "" = "src" }
|
|
89
|
-
include-package-data =
|
|
92
|
+
include-package-data = false # specify in later
|
|
90
93
|
license-files = ["LICENSE*", "NOTICE*", "COPYING*"]
|
|
91
94
|
|
|
92
95
|
[tool.setuptools.packages.find]
|
|
93
96
|
where = ["src"]
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
exclude = [
|
|
98
|
+
"tests*",
|
|
99
|
+
"examples*",
|
|
100
|
+
"aethergraph.demos*",
|
|
101
|
+
"aethergraph.demos.*"
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
[tool.setuptools.exclude-package-data]
|
|
105
|
+
aethergraph = ["demos/**"]
|
|
96
106
|
|
|
97
107
|
[tool.setuptools.package-data]
|
|
98
108
|
# Ship non-Python assets bundled with the package (adjust as needed)
|
|
@@ -102,6 +112,7 @@ aethergraph = [
|
|
|
102
112
|
"**/*.yml",
|
|
103
113
|
"**/*.txt",
|
|
104
114
|
"v*/**/templates/**/*",
|
|
115
|
+
"server/ui_static/**",
|
|
105
116
|
]
|
|
106
117
|
|
|
107
118
|
# -------------------------
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
__version__ = "0.1.
|
|
1
|
+
__version__ = "0.1.0a2"
|
|
2
2
|
|
|
3
|
+
import logging
|
|
3
4
|
|
|
4
|
-
# Server
|
|
5
|
-
# Channel buttons
|
|
6
5
|
from .contracts.services.channel import Button
|
|
7
6
|
|
|
8
7
|
# Graphs
|
|
@@ -24,6 +23,8 @@ from .server.start import (
|
|
|
24
23
|
stop_server, # stop the sidecar server
|
|
25
24
|
)
|
|
26
25
|
|
|
26
|
+
logging.getLogger("aethergraph").addHandler(logging.NullHandler())
|
|
27
|
+
|
|
27
28
|
__all__ = [
|
|
28
29
|
# Server
|
|
29
30
|
"start_server",
|
|
@@ -34,16 +35,9 @@ __all__ = [
|
|
|
34
35
|
"graph_fn",
|
|
35
36
|
"graphify",
|
|
36
37
|
"TaskGraph",
|
|
37
|
-
"RuntimeEnv",
|
|
38
38
|
"NodeContext",
|
|
39
39
|
# Services
|
|
40
40
|
"Service",
|
|
41
41
|
# Channel buttons
|
|
42
42
|
"Button",
|
|
43
43
|
]
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
# Setup a default null logger to avoid "No handler found" warnings
|
|
47
|
-
import logging
|
|
48
|
-
|
|
49
|
-
logging.getLogger("aethergraph").addHandler(logging.NullHandler())
|