AbstractAgent 0.3.1__tar.gz → 0.3.5__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.
Files changed (69) hide show
  1. {abstractagent-0.3.1 → abstractagent-0.3.5}/PKG-INFO +48 -3
  2. abstractagent-0.3.1/src/abstractagent.egg-info/PKG-INFO → abstractagent-0.3.5/README.md +31 -13
  3. {abstractagent-0.3.1 → abstractagent-0.3.5}/pyproject.toml +22 -3
  4. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/react.py +1 -1
  5. abstractagent-0.3.1/README.md → abstractagent-0.3.5/src/abstractagent.egg-info/PKG-INFO +58 -0
  6. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent.egg-info/SOURCES.txt +1 -0
  7. abstractagent-0.3.5/src/abstractagent.egg-info/requires.txt +24 -0
  8. abstractagent-0.3.5/tests/test_packaging_profiles.py +43 -0
  9. abstractagent-0.3.1/src/abstractagent.egg-info/requires.txt +0 -5
  10. {abstractagent-0.3.1 → abstractagent-0.3.5}/LICENSE +0 -0
  11. {abstractagent-0.3.1 → abstractagent-0.3.5}/setup.cfg +0 -0
  12. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/__init__.py +0 -0
  13. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/__init__.py +0 -0
  14. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/codeact_runtime.py +0 -0
  15. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/generation_params.py +0 -0
  16. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/media.py +0 -0
  17. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/memact_runtime.py +0 -0
  18. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/adapters/react_runtime.py +0 -0
  19. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/agents/__init__.py +0 -0
  20. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/agents/base.py +0 -0
  21. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/agents/codeact.py +0 -0
  22. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/agents/memact.py +0 -0
  23. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/agents/react.py +0 -0
  24. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/__init__.py +0 -0
  25. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/builtins.py +0 -0
  26. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/codeact.py +0 -0
  27. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/memact.py +0 -0
  28. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/logic/types.py +0 -0
  29. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/repl.py +0 -0
  30. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/sandbox/__init__.py +0 -0
  31. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/sandbox/interface.py +0 -0
  32. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/sandbox/local.py +0 -0
  33. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/scripts/__init__.py +0 -0
  34. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/scripts/lmstudio_tool_eval.py +0 -0
  35. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/tools/__init__.py +0 -0
  36. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/tools/code_execution.py +0 -0
  37. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent/tools/self_improve.py +0 -0
  38. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent.egg-info/dependency_links.txt +0 -0
  39. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent.egg-info/entry_points.txt +0 -0
  40. {abstractagent-0.3.1 → abstractagent-0.3.5}/src/abstractagent.egg-info/top_level.txt +0 -0
  41. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_active_context_policy_adoption.py +0 -0
  42. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_agent_plan_review_modes.py +0 -0
  43. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_agents_integration_llm.py +0 -0
  44. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_base_agent_trace_accessors.py +0 -0
  45. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_builtin_tool_specs_optional_defaults.py +0 -0
  46. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_codeact_logic.py +0 -0
  47. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_codeact_runtime_verifier_policy.py +0 -0
  48. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_generation_params_media_policies.py +0 -0
  49. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_llm_call_payload_requires_prompt_or_messages.py +0 -0
  50. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_memact_session_memory.py +0 -0
  51. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_memact_workflow.py +0 -0
  52. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_memory_recall_tool.py +0 -0
  53. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_open_attachment_tool_available.py +0 -0
  54. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_active_attachments_disable_tools_first_iteration.py +0 -0
  55. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_adapter_forwards_context_attachments_media.py +0 -0
  56. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_delegate_agent_tool.py +0 -0
  57. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_logic.py +0 -0
  58. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_loop_context_transcript_levels.py +0 -0
  59. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_loop_followthrough_retry.py +0 -0
  60. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_loop_side_effect_dedupe_comms.py +0 -0
  61. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_loop_truncated_output_retry.py +0 -0
  62. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_max_iterations_concludes.py +0 -0
  63. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_planish_heuristic.py +0 -0
  64. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_workflow_system_prompt_and_tools_override.py +0 -0
  65. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_react_workflow_toolset_refresh.py +0 -0
  66. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_run_start_seeds_runtime_provider_model.py +0 -0
  67. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_session_memory.py +0 -0
  68. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_tool_observe_emits_result_for_tui.py +0 -0
  69. {abstractagent-0.3.1 → abstractagent-0.3.5}/tests/test_tools_editing.py +0 -0
@@ -1,22 +1,52 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractagent
3
- Version: 0.3.1
3
+ Version: 0.3.5
4
4
  Summary: Agent implementations using AbstractRuntime and AbstractCore
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
- Requires-Dist: abstractcore[tools]
9
- Requires-Dist: abstractruntime
8
+ Requires-Dist: abstractcore[tools]>=2.13.12
9
+ Requires-Dist: abstractruntime>=0.4.8
10
+ Provides-Extra: apple
11
+ Requires-Dist: abstractcore[apple]>=2.13.12; extra == "apple"
12
+ Requires-Dist: abstractruntime[apple]>=0.4.8; extra == "apple"
13
+ Provides-Extra: gpu
14
+ Requires-Dist: abstractcore[gpu]>=2.13.12; extra == "gpu"
15
+ Requires-Dist: abstractruntime[gpu]>=0.4.8; extra == "gpu"
16
+ Provides-Extra: all-apple
17
+ Requires-Dist: abstractcore[all-apple]>=2.13.12; extra == "all-apple"
18
+ Requires-Dist: abstractruntime[all-apple]>=0.4.8; extra == "all-apple"
19
+ Provides-Extra: all-gpu
20
+ Requires-Dist: abstractcore[all-gpu]>=2.13.12; extra == "all-gpu"
21
+ Requires-Dist: abstractruntime[all-gpu]>=0.4.8; extra == "all-gpu"
10
22
  Provides-Extra: dev
11
23
  Requires-Dist: pytest>=7.0; extra == "dev"
24
+ Provides-Extra: test
25
+ Requires-Dist: pytest>=7.0; extra == "test"
12
26
  Dynamic: license-file
13
27
 
14
28
  # AbstractAgent
15
29
 
16
30
  Agent patterns (ReAct / CodeAct / MemAct) built on **AbstractRuntime** (durable execution) and **AbstractCore** (tools + LLM integration).
17
31
 
32
+ AbstractAgent is part of the **AbstractFramework** ecosystem:
33
+ - AbstractFramework (ecosystem overview): https://github.com/lpalbou/AbstractFramework
34
+ - AbstractCore (providers + tool schemas): https://github.com/lpalbou/abstractcore
35
+ - AbstractRuntime (durable workflows + storage/ledger): https://github.com/lpalbou/abstractruntime
36
+
18
37
  Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/README.md`](docs/README.md) for the full index)
19
38
 
39
+ ## How it fits (high level)
40
+
41
+ ```mermaid
42
+ flowchart LR
43
+ Host[Your app / service] --> Agent[AbstractAgent<br/>ReAct / CodeAct / MemAct]
44
+ Agent --> RT[AbstractRuntime<br/>WorkflowSpec + Effects]
45
+ RT --> Core[AbstractCore<br/>LLM + tool-call normalization]
46
+ RT --> Stores[RunStore + LedgerStore]
47
+ Agent --> Tools[Tool callables<br/>(abstractcore common_tools + agent tools)]
48
+ ```
49
+
20
50
  ## Documentation
21
51
 
22
52
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
@@ -37,6 +67,16 @@ Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/RE
37
67
  - **Tool control**: explicit tool bundles + per-run allowlists
38
68
  - **Observability**: durable ledger of LLM calls, tool calls, and waits
39
69
 
70
+ Where this lives in code (source of truth):
71
+ - Agents: `src/abstractagent/agents/*`
72
+ - Workflows/adapters: `src/abstractagent/adapters/*_runtime.py`
73
+ - Prompting/parsing logic (runtime-agnostic): `src/abstractagent/logic/*`
74
+ - Default tool bundle: `src/abstractagent/tools/__init__.py`
75
+
76
+ ## Requirements
77
+
78
+ - Python `>=3.10` (see `pyproject.toml`)
79
+
40
80
  ## Installation
41
81
 
42
82
  From source (development):
@@ -57,6 +97,11 @@ From PyPI:
57
97
  pip install abstractagent
58
98
  ```
59
99
 
100
+ Native Python hardware profile cascades are available for deployment manifests:
101
+ `abstractagent[apple]`, `abstractagent[gpu]`, `abstractagent[all-apple]`, and
102
+ `abstractagent[all-gpu]`. These delegate to the matching AbstractCore and
103
+ AbstractRuntime profiles; AbstractAgent itself remains provider/runtime agnostic.
104
+
60
105
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
61
106
 
62
107
  ```bash
@@ -1,22 +1,25 @@
1
- Metadata-Version: 2.4
2
- Name: abstractagent
3
- Version: 0.3.1
4
- Summary: Agent implementations using AbstractRuntime and AbstractCore
5
- Requires-Python: >=3.10
6
- Description-Content-Type: text/markdown
7
- License-File: LICENSE
8
- Requires-Dist: abstractcore[tools]
9
- Requires-Dist: abstractruntime
10
- Provides-Extra: dev
11
- Requires-Dist: pytest>=7.0; extra == "dev"
12
- Dynamic: license-file
13
-
14
1
  # AbstractAgent
15
2
 
16
3
  Agent patterns (ReAct / CodeAct / MemAct) built on **AbstractRuntime** (durable execution) and **AbstractCore** (tools + LLM integration).
17
4
 
5
+ AbstractAgent is part of the **AbstractFramework** ecosystem:
6
+ - AbstractFramework (ecosystem overview): https://github.com/lpalbou/AbstractFramework
7
+ - AbstractCore (providers + tool schemas): https://github.com/lpalbou/abstractcore
8
+ - AbstractRuntime (durable workflows + storage/ledger): https://github.com/lpalbou/abstractruntime
9
+
18
10
  Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/README.md`](docs/README.md) for the full index)
19
11
 
12
+ ## How it fits (high level)
13
+
14
+ ```mermaid
15
+ flowchart LR
16
+ Host[Your app / service] --> Agent[AbstractAgent<br/>ReAct / CodeAct / MemAct]
17
+ Agent --> RT[AbstractRuntime<br/>WorkflowSpec + Effects]
18
+ RT --> Core[AbstractCore<br/>LLM + tool-call normalization]
19
+ RT --> Stores[RunStore + LedgerStore]
20
+ Agent --> Tools[Tool callables<br/>(abstractcore common_tools + agent tools)]
21
+ ```
22
+
20
23
  ## Documentation
21
24
 
22
25
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
@@ -37,6 +40,16 @@ Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/RE
37
40
  - **Tool control**: explicit tool bundles + per-run allowlists
38
41
  - **Observability**: durable ledger of LLM calls, tool calls, and waits
39
42
 
43
+ Where this lives in code (source of truth):
44
+ - Agents: `src/abstractagent/agents/*`
45
+ - Workflows/adapters: `src/abstractagent/adapters/*_runtime.py`
46
+ - Prompting/parsing logic (runtime-agnostic): `src/abstractagent/logic/*`
47
+ - Default tool bundle: `src/abstractagent/tools/__init__.py`
48
+
49
+ ## Requirements
50
+
51
+ - Python `>=3.10` (see `pyproject.toml`)
52
+
40
53
  ## Installation
41
54
 
42
55
  From source (development):
@@ -57,6 +70,11 @@ From PyPI:
57
70
  pip install abstractagent
58
71
  ```
59
72
 
73
+ Native Python hardware profile cascades are available for deployment manifests:
74
+ `abstractagent[apple]`, `abstractagent[gpu]`, `abstractagent[all-apple]`, and
75
+ `abstractagent[all-gpu]`. These delegate to the matching AbstractCore and
76
+ AbstractRuntime profiles; AbstractAgent itself remains provider/runtime agnostic.
77
+
60
78
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
61
79
 
62
80
  ```bash
@@ -4,19 +4,38 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractagent"
7
- version = "0.3.1"
7
+ version = "0.3.5"
8
8
  description = "Agent implementations using AbstractRuntime and AbstractCore"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  dependencies = [
12
- "abstractcore[tools]",
13
- "abstractruntime",
12
+ "abstractcore[tools]>=2.13.12",
13
+ "abstractruntime>=0.4.8",
14
14
  ]
15
15
 
16
16
  [project.optional-dependencies]
17
+ apple = [
18
+ "abstractcore[apple]>=2.13.12",
19
+ "abstractruntime[apple]>=0.4.8",
20
+ ]
21
+ gpu = [
22
+ "abstractcore[gpu]>=2.13.12",
23
+ "abstractruntime[gpu]>=0.4.8",
24
+ ]
25
+ all-apple = [
26
+ "abstractcore[all-apple]>=2.13.12",
27
+ "abstractruntime[all-apple]>=0.4.8",
28
+ ]
29
+ all-gpu = [
30
+ "abstractcore[all-gpu]>=2.13.12",
31
+ "abstractruntime[all-gpu]>=0.4.8",
32
+ ]
17
33
  dev = [
18
34
  "pytest>=7.0",
19
35
  ]
36
+ test = [
37
+ "pytest>=7.0",
38
+ ]
20
39
 
21
40
  [tool.setuptools.packages.find]
22
41
  where = ["src"]
@@ -112,7 +112,7 @@ class ReActLogic:
112
112
  " Do NOT call tools just to re-open/read them.\n"
113
113
  " - If you see 'Stored session attachments', those may not be included in the current call.\n"
114
114
  " Only if you truly need it, use the attachment-open tool with artifact_id and a bounded line range.\n"
115
- " - Never use filesystem tools on attachment filenames/paths or absolute paths outside the workspace.\n"
115
+ " - Never use filesystem tools on attachment filenames/paths; use the attachment-open tool instead.\n"
116
116
  "- For fetch_url: use include_full_content=False for shorter previews; set keep_links=False to strip links when not needed.\n"
117
117
  "- For large files, create a small skeleton first, then refine via multiple smaller edits/tool calls.\n"
118
118
  "- Use tool outputs as evidence; do not claim actions without tool outputs.\n"
@@ -1,9 +1,52 @@
1
+ Metadata-Version: 2.4
2
+ Name: abstractagent
3
+ Version: 0.3.5
4
+ Summary: Agent implementations using AbstractRuntime and AbstractCore
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: abstractcore[tools]>=2.13.12
9
+ Requires-Dist: abstractruntime>=0.4.8
10
+ Provides-Extra: apple
11
+ Requires-Dist: abstractcore[apple]>=2.13.12; extra == "apple"
12
+ Requires-Dist: abstractruntime[apple]>=0.4.8; extra == "apple"
13
+ Provides-Extra: gpu
14
+ Requires-Dist: abstractcore[gpu]>=2.13.12; extra == "gpu"
15
+ Requires-Dist: abstractruntime[gpu]>=0.4.8; extra == "gpu"
16
+ Provides-Extra: all-apple
17
+ Requires-Dist: abstractcore[all-apple]>=2.13.12; extra == "all-apple"
18
+ Requires-Dist: abstractruntime[all-apple]>=0.4.8; extra == "all-apple"
19
+ Provides-Extra: all-gpu
20
+ Requires-Dist: abstractcore[all-gpu]>=2.13.12; extra == "all-gpu"
21
+ Requires-Dist: abstractruntime[all-gpu]>=0.4.8; extra == "all-gpu"
22
+ Provides-Extra: dev
23
+ Requires-Dist: pytest>=7.0; extra == "dev"
24
+ Provides-Extra: test
25
+ Requires-Dist: pytest>=7.0; extra == "test"
26
+ Dynamic: license-file
27
+
1
28
  # AbstractAgent
2
29
 
3
30
  Agent patterns (ReAct / CodeAct / MemAct) built on **AbstractRuntime** (durable execution) and **AbstractCore** (tools + LLM integration).
4
31
 
32
+ AbstractAgent is part of the **AbstractFramework** ecosystem:
33
+ - AbstractFramework (ecosystem overview): https://github.com/lpalbou/AbstractFramework
34
+ - AbstractCore (providers + tool schemas): https://github.com/lpalbou/abstractcore
35
+ - AbstractRuntime (durable workflows + storage/ledger): https://github.com/lpalbou/abstractruntime
36
+
5
37
  Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/README.md`](docs/README.md) for the full index)
6
38
 
39
+ ## How it fits (high level)
40
+
41
+ ```mermaid
42
+ flowchart LR
43
+ Host[Your app / service] --> Agent[AbstractAgent<br/>ReAct / CodeAct / MemAct]
44
+ Agent --> RT[AbstractRuntime<br/>WorkflowSpec + Effects]
45
+ RT --> Core[AbstractCore<br/>LLM + tool-call normalization]
46
+ RT --> Stores[RunStore + LedgerStore]
47
+ Agent --> Tools[Tool callables<br/>(abstractcore common_tools + agent tools)]
48
+ ```
49
+
7
50
  ## Documentation
8
51
 
9
52
  - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
@@ -24,6 +67,16 @@ Start here: [`docs/getting-started.md`](docs/getting-started.md) (then [`docs/RE
24
67
  - **Tool control**: explicit tool bundles + per-run allowlists
25
68
  - **Observability**: durable ledger of LLM calls, tool calls, and waits
26
69
 
70
+ Where this lives in code (source of truth):
71
+ - Agents: `src/abstractagent/agents/*`
72
+ - Workflows/adapters: `src/abstractagent/adapters/*_runtime.py`
73
+ - Prompting/parsing logic (runtime-agnostic): `src/abstractagent/logic/*`
74
+ - Default tool bundle: `src/abstractagent/tools/__init__.py`
75
+
76
+ ## Requirements
77
+
78
+ - Python `>=3.10` (see `pyproject.toml`)
79
+
27
80
  ## Installation
28
81
 
29
82
  From source (development):
@@ -44,6 +97,11 @@ From PyPI:
44
97
  pip install abstractagent
45
98
  ```
46
99
 
100
+ Native Python hardware profile cascades are available for deployment manifests:
101
+ `abstractagent[apple]`, `abstractagent[gpu]`, `abstractagent[all-apple]`, and
102
+ `abstractagent[all-gpu]`. These delegate to the matching AbstractCore and
103
+ AbstractRuntime profiles; AbstractAgent itself remains provider/runtime agnostic.
104
+
47
105
  Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
48
106
 
49
107
  ```bash
@@ -47,6 +47,7 @@ tests/test_memact_session_memory.py
47
47
  tests/test_memact_workflow.py
48
48
  tests/test_memory_recall_tool.py
49
49
  tests/test_open_attachment_tool_available.py
50
+ tests/test_packaging_profiles.py
50
51
  tests/test_react_active_attachments_disable_tools_first_iteration.py
51
52
  tests/test_react_adapter_forwards_context_attachments_media.py
52
53
  tests/test_react_delegate_agent_tool.py
@@ -0,0 +1,24 @@
1
+ abstractcore[tools]>=2.13.12
2
+ abstractruntime>=0.4.8
3
+
4
+ [all-apple]
5
+ abstractcore[all-apple]>=2.13.12
6
+ abstractruntime[all-apple]>=0.4.8
7
+
8
+ [all-gpu]
9
+ abstractcore[all-gpu]>=2.13.12
10
+ abstractruntime[all-gpu]>=0.4.8
11
+
12
+ [apple]
13
+ abstractcore[apple]>=2.13.12
14
+ abstractruntime[apple]>=0.4.8
15
+
16
+ [dev]
17
+ pytest>=7.0
18
+
19
+ [gpu]
20
+ abstractcore[gpu]>=2.13.12
21
+ abstractruntime[gpu]>=0.4.8
22
+
23
+ [test]
24
+ pytest>=7.0
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+ try:
6
+ import tomllib
7
+ except ModuleNotFoundError: # pragma: no cover
8
+ import tomli as tomllib # type: ignore
9
+
10
+
11
+ ROOT = Path(__file__).resolve().parents[1]
12
+
13
+
14
+ def _project() -> dict:
15
+ return tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))["project"]
16
+
17
+
18
+ def test_base_dependency_floors_match_gateway_alignment() -> None:
19
+ deps = set(_project()["dependencies"])
20
+
21
+ assert "abstractcore[tools]>=2.13.12" in deps
22
+ assert "abstractruntime>=0.4.8" in deps
23
+
24
+
25
+ def test_hardware_profile_extras_are_core_runtime_cascades() -> None:
26
+ extras = _project()["optional-dependencies"]
27
+
28
+ assert set(extras["apple"]) == {
29
+ "abstractcore[apple]>=2.13.12",
30
+ "abstractruntime[apple]>=0.4.8",
31
+ }
32
+ assert set(extras["gpu"]) == {
33
+ "abstractcore[gpu]>=2.13.12",
34
+ "abstractruntime[gpu]>=0.4.8",
35
+ }
36
+ assert set(extras["all-apple"]) == {
37
+ "abstractcore[all-apple]>=2.13.12",
38
+ "abstractruntime[all-apple]>=0.4.8",
39
+ }
40
+ assert set(extras["all-gpu"]) == {
41
+ "abstractcore[all-gpu]>=2.13.12",
42
+ "abstractruntime[all-gpu]>=0.4.8",
43
+ }
@@ -1,5 +0,0 @@
1
- abstractcore[tools]
2
- abstractruntime
3
-
4
- [dev]
5
- pytest>=7.0
File without changes
File without changes