soe-ai 0.1.0__py3-none-any.whl → 0.1.2__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.
- soe/broker.py +4 -5
- soe/builtin_tools/__init__.py +39 -0
- soe/builtin_tools/soe_add_signal.py +82 -0
- soe/builtin_tools/soe_call_tool.py +111 -0
- soe/builtin_tools/soe_copy_context.py +80 -0
- soe/builtin_tools/soe_explore_docs.py +290 -0
- soe/builtin_tools/soe_get_available_tools.py +42 -0
- soe/builtin_tools/soe_get_context.py +50 -0
- soe/builtin_tools/soe_get_workflows.py +63 -0
- soe/builtin_tools/soe_inject_node.py +86 -0
- soe/builtin_tools/soe_inject_workflow.py +105 -0
- soe/builtin_tools/soe_list_contexts.py +73 -0
- soe/builtin_tools/soe_remove_node.py +72 -0
- soe/builtin_tools/soe_remove_workflow.py +62 -0
- soe/builtin_tools/soe_update_context.py +54 -0
- soe/docs/_config.yml +10 -0
- soe/docs/advanced_patterns/guide_fanout_and_aggregations.md +318 -0
- soe/docs/advanced_patterns/guide_inheritance.md +435 -0
- soe/docs/advanced_patterns/hybrid_intelligence.md +237 -0
- soe/docs/advanced_patterns/index.md +49 -0
- soe/docs/advanced_patterns/operational.md +781 -0
- soe/docs/advanced_patterns/self_evolving_workflows.md +385 -0
- soe/docs/advanced_patterns/swarm_intelligence.md +211 -0
- soe/docs/builtins/context.md +164 -0
- soe/docs/builtins/explore_docs.md +135 -0
- soe/docs/builtins/tools.md +164 -0
- soe/docs/builtins/workflows.md +199 -0
- soe/docs/guide_00_getting_started.md +341 -0
- soe/docs/guide_01_tool.md +206 -0
- soe/docs/guide_02_llm.md +143 -0
- soe/docs/guide_03_router.md +146 -0
- soe/docs/guide_04_patterns.md +475 -0
- soe/docs/guide_05_agent.md +159 -0
- soe/docs/guide_06_schema.md +397 -0
- soe/docs/guide_07_identity.md +540 -0
- soe/docs/guide_08_child.md +612 -0
- soe/docs/guide_09_ecosystem.md +690 -0
- soe/docs/guide_10_infrastructure.md +427 -0
- soe/docs/guide_11_builtins.md +118 -0
- soe/docs/index.md +104 -0
- soe/docs/primitives/backends.md +281 -0
- soe/docs/primitives/context.md +256 -0
- soe/docs/primitives/node_reference.md +259 -0
- soe/docs/primitives/primitives.md +331 -0
- soe/docs/primitives/signals.md +865 -0
- soe/docs_index.py +1 -1
- soe/init.py +2 -2
- soe/lib/__init__.py +0 -0
- soe/lib/child_context.py +46 -0
- soe/lib/context_fields.py +51 -0
- soe/lib/inheritance.py +172 -0
- soe/lib/jinja_render.py +113 -0
- soe/lib/operational.py +51 -0
- soe/lib/parent_sync.py +71 -0
- soe/lib/register_event.py +75 -0
- soe/lib/schema_validation.py +134 -0
- soe/lib/yaml_parser.py +14 -0
- soe/local_backends/__init__.py +18 -0
- soe/local_backends/factory.py +124 -0
- soe/local_backends/in_memory/context.py +38 -0
- soe/local_backends/in_memory/conversation_history.py +60 -0
- soe/local_backends/in_memory/identity.py +52 -0
- soe/local_backends/in_memory/schema.py +40 -0
- soe/local_backends/in_memory/telemetry.py +38 -0
- soe/local_backends/in_memory/workflow.py +33 -0
- soe/local_backends/storage/context.py +57 -0
- soe/local_backends/storage/conversation_history.py +82 -0
- soe/local_backends/storage/identity.py +118 -0
- soe/local_backends/storage/schema.py +96 -0
- soe/local_backends/storage/telemetry.py +72 -0
- soe/local_backends/storage/workflow.py +56 -0
- soe/nodes/__init__.py +13 -0
- soe/nodes/agent/__init__.py +10 -0
- soe/nodes/agent/factory.py +134 -0
- soe/nodes/agent/lib/loop_handlers.py +150 -0
- soe/nodes/agent/lib/loop_state.py +157 -0
- soe/nodes/agent/lib/prompts.py +65 -0
- soe/nodes/agent/lib/tools.py +35 -0
- soe/nodes/agent/stages/__init__.py +12 -0
- soe/nodes/agent/stages/parameter.py +37 -0
- soe/nodes/agent/stages/response.py +54 -0
- soe/nodes/agent/stages/router.py +37 -0
- soe/nodes/agent/state.py +111 -0
- soe/nodes/agent/types.py +66 -0
- soe/nodes/agent/validation/__init__.py +11 -0
- soe/nodes/agent/validation/config.py +95 -0
- soe/nodes/agent/validation/operational.py +24 -0
- soe/nodes/child/__init__.py +3 -0
- soe/nodes/child/factory.py +61 -0
- soe/nodes/child/state.py +59 -0
- soe/nodes/child/validation/__init__.py +11 -0
- soe/nodes/child/validation/config.py +126 -0
- soe/nodes/child/validation/operational.py +28 -0
- soe/nodes/lib/conditions.py +71 -0
- soe/nodes/lib/context.py +24 -0
- soe/nodes/lib/conversation_history.py +77 -0
- soe/nodes/lib/identity.py +64 -0
- soe/nodes/lib/llm_resolver.py +142 -0
- soe/nodes/lib/output.py +68 -0
- soe/nodes/lib/response_builder.py +91 -0
- soe/nodes/lib/signal_emission.py +79 -0
- soe/nodes/lib/signals.py +54 -0
- soe/nodes/lib/tools.py +100 -0
- soe/nodes/llm/__init__.py +7 -0
- soe/nodes/llm/factory.py +103 -0
- soe/nodes/llm/state.py +76 -0
- soe/nodes/llm/types.py +12 -0
- soe/nodes/llm/validation/__init__.py +11 -0
- soe/nodes/llm/validation/config.py +89 -0
- soe/nodes/llm/validation/operational.py +23 -0
- soe/nodes/router/__init__.py +3 -0
- soe/nodes/router/factory.py +37 -0
- soe/nodes/router/state.py +32 -0
- soe/nodes/router/validation/__init__.py +11 -0
- soe/nodes/router/validation/config.py +58 -0
- soe/nodes/router/validation/operational.py +16 -0
- soe/nodes/tool/factory.py +66 -0
- soe/nodes/tool/lib/__init__.py +11 -0
- soe/nodes/tool/lib/conditions.py +35 -0
- soe/nodes/tool/lib/failure.py +28 -0
- soe/nodes/tool/lib/parameters.py +67 -0
- soe/nodes/tool/state.py +66 -0
- soe/nodes/tool/types.py +27 -0
- soe/nodes/tool/validation/__init__.py +15 -0
- soe/nodes/tool/validation/config.py +132 -0
- soe/nodes/tool/validation/operational.py +16 -0
- soe/types.py +40 -28
- soe/validation/__init__.py +18 -0
- soe/validation/config.py +195 -0
- soe/validation/jinja.py +54 -0
- soe/validation/operational.py +110 -0
- {soe_ai-0.1.0.dist-info → soe_ai-0.1.2.dist-info}/METADATA +72 -9
- soe_ai-0.1.2.dist-info/RECORD +137 -0
- {soe_ai-0.1.0.dist-info → soe_ai-0.1.2.dist-info}/WHEEL +1 -1
- soe/validation.py +0 -8
- soe_ai-0.1.0.dist-info/RECORD +0 -11
- {soe_ai-0.1.0.dist-info → soe_ai-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {soe_ai-0.1.0.dist-info → soe_ai-0.1.2.dist-info}/top_level.txt +0 -0
soe/validation/jinja.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Jinja template validation utilities.
|
|
3
|
+
|
|
4
|
+
Used during config validation to catch Jinja errors early.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from jinja2 import Environment, BaseLoader, TemplateSyntaxError
|
|
8
|
+
from ..types import WorkflowValidationError
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _dummy_accumulated_filter(value):
|
|
12
|
+
"""Dummy accumulated filter for validation - just returns value as list."""
|
|
13
|
+
return [value] if value is not None else []
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_jinja_syntax(template: str, context_description: str) -> None:
|
|
17
|
+
"""
|
|
18
|
+
Validate Jinja template syntax at config time.
|
|
19
|
+
|
|
20
|
+
Called during config validation to catch Jinja errors early.
|
|
21
|
+
|
|
22
|
+
Catches:
|
|
23
|
+
- Unclosed braces {{ without }}
|
|
24
|
+
- Unknown filters like | capitalize_all
|
|
25
|
+
- Basic syntax errors
|
|
26
|
+
|
|
27
|
+
Does NOT catch:
|
|
28
|
+
- Runtime errors like division by zero (depends on context values)
|
|
29
|
+
- Undefined variables (depends on context at runtime)
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
template: The Jinja template string to validate
|
|
33
|
+
context_description: Description for error messages (e.g., "condition for signal 'DONE'")
|
|
34
|
+
|
|
35
|
+
Raises:
|
|
36
|
+
WorkflowValidationError: If template has syntax or filter errors
|
|
37
|
+
"""
|
|
38
|
+
if not template or ("{{" not in template and "{%" not in template):
|
|
39
|
+
return
|
|
40
|
+
try:
|
|
41
|
+
env = Environment(loader=BaseLoader())
|
|
42
|
+
env.filters["accumulated"] = _dummy_accumulated_filter
|
|
43
|
+
env.parse(template)
|
|
44
|
+
env.from_string(template)
|
|
45
|
+
except TemplateSyntaxError as e:
|
|
46
|
+
raise WorkflowValidationError(
|
|
47
|
+
f"{context_description}: Jinja syntax error - {e.message}"
|
|
48
|
+
)
|
|
49
|
+
except Exception as e:
|
|
50
|
+
error_msg = str(e)
|
|
51
|
+
if "filter" in error_msg.lower():
|
|
52
|
+
raise WorkflowValidationError(
|
|
53
|
+
f"{context_description}: {error_msg}"
|
|
54
|
+
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Operational validation - validates runtime state before node execution.
|
|
3
|
+
|
|
4
|
+
This validates that the context and backends are in a valid state
|
|
5
|
+
for node execution. Runs before each node executes so that operational
|
|
6
|
+
code can trust the structure and avoid defensive programming.
|
|
7
|
+
|
|
8
|
+
Fail-fast: If validation fails, raise immediately with clear message.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from typing import Dict, Any
|
|
12
|
+
|
|
13
|
+
from ..types import Backends, SoeError
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class OperationalValidationError(SoeError):
|
|
17
|
+
"""Raised when operational context is invalid."""
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def validate_operational(
|
|
22
|
+
execution_id: str,
|
|
23
|
+
backends: Backends,
|
|
24
|
+
) -> Dict[str, Any]:
|
|
25
|
+
"""
|
|
26
|
+
Validate that operational context exists and has required structure.
|
|
27
|
+
|
|
28
|
+
Call this before any node execution to ensure __operational__ is valid.
|
|
29
|
+
Returns the context so caller doesn't need to fetch it again.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
execution_id: The execution ID
|
|
33
|
+
backends: Backend services
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
The validated context dict
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
OperationalValidationError: If context or __operational__ is invalid
|
|
40
|
+
"""
|
|
41
|
+
context = backends.context.get_context(execution_id)
|
|
42
|
+
|
|
43
|
+
if not context:
|
|
44
|
+
raise OperationalValidationError(
|
|
45
|
+
f"No context found for execution_id '{execution_id}'. "
|
|
46
|
+
f"Context must be initialized before node execution."
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
operational = context.get("__operational__")
|
|
50
|
+
|
|
51
|
+
if operational is None:
|
|
52
|
+
raise OperationalValidationError(
|
|
53
|
+
f"Missing '__operational__' in context for execution_id '{execution_id}'. "
|
|
54
|
+
f"Call initialize_operational_context() before node execution."
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
required_fields = ["signals", "nodes", "llm_calls", "tool_calls", "errors", "main_execution_id"]
|
|
58
|
+
missing = [f for f in required_fields if f not in operational]
|
|
59
|
+
|
|
60
|
+
if missing:
|
|
61
|
+
raise OperationalValidationError(
|
|
62
|
+
f"Invalid '__operational__' structure for execution_id '{execution_id}'. "
|
|
63
|
+
f"Missing fields: {missing}"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
if not isinstance(operational["signals"], list):
|
|
67
|
+
raise OperationalValidationError(
|
|
68
|
+
f"Invalid '__operational__.signals' - must be a list, got {type(operational['signals']).__name__}"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
if not isinstance(operational["nodes"], dict):
|
|
72
|
+
raise OperationalValidationError(
|
|
73
|
+
f"Invalid '__operational__.nodes' - must be a dict, got {type(operational['nodes']).__name__}"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
if not isinstance(operational["llm_calls"], int):
|
|
77
|
+
raise OperationalValidationError(
|
|
78
|
+
f"Invalid '__operational__.llm_calls' - must be an int, got {type(operational['llm_calls']).__name__}"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
if not isinstance(operational["tool_calls"], int):
|
|
82
|
+
raise OperationalValidationError(
|
|
83
|
+
f"Invalid '__operational__.tool_calls' - must be an int, got {type(operational['tool_calls']).__name__}"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
if not isinstance(operational["errors"], int):
|
|
87
|
+
raise OperationalValidationError(
|
|
88
|
+
f"Invalid '__operational__.errors' - must be an int, got {type(operational['errors']).__name__}"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
return context
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def validate_backends(backends: Backends) -> None:
|
|
95
|
+
"""
|
|
96
|
+
Validate that backends has required attributes.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
backends: Backend services
|
|
100
|
+
|
|
101
|
+
Raises:
|
|
102
|
+
OperationalValidationError: If backends is invalid
|
|
103
|
+
"""
|
|
104
|
+
required = ["context", "workflow"]
|
|
105
|
+
|
|
106
|
+
for attr in required:
|
|
107
|
+
if not hasattr(backends, attr) or getattr(backends, attr) is None:
|
|
108
|
+
raise OperationalValidationError(
|
|
109
|
+
f"Invalid backends: missing required attribute '{attr}'"
|
|
110
|
+
)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soe-ai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Signal-driven Orchestration Engine - Agent orchestration with event-driven workflow engine
|
|
5
|
-
Author-email: Pedro Garcia <
|
|
5
|
+
Author-email: Pedro Garcia <pgarcia14180@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/pgarcia14180/soe
|
|
8
8
|
Project-URL: Documentation, https://github.com/pgarcia14180/soe/tree/master/docs
|
|
@@ -91,12 +91,44 @@ All workflow state flows through **context**—a shared dictionary accessible vi
|
|
|
91
91
|
- LLM prompts can interpolate any context field
|
|
92
92
|
- No hidden state—everything is inspectable
|
|
93
93
|
|
|
94
|
-
### 3. Deterministic
|
|
95
|
-
|
|
94
|
+
### 3. Purely Deterministic or Hybrid Agentic
|
|
95
|
+
SOE is a complete orchestration solution. You can use it as a purely deterministic engine for standard business logic, or mix in LLM-driven "Agentic" behavior.
|
|
96
|
+
- **Deterministic**: Use `router` and `tool` nodes for 100% predictable workflows.
|
|
97
|
+
- **Agentic**: Add `llm` and `agent` nodes for creative, reasoning-based tasks.
|
|
98
|
+
You get the safety of code with the flexibility of AI in a single, unified system.
|
|
96
99
|
|
|
97
100
|
### 4. Portable
|
|
98
101
|
Workflows are YAML. Run them locally, in CI, in production. Extract them, version them, share them.
|
|
99
102
|
|
|
103
|
+
### 5. Self-Evolving
|
|
104
|
+
Workflows can modify themselves at runtime. Built-in tools like `inject_workflow`, `inject_node_configuration`, and `add_signal` allow agents to:
|
|
105
|
+
- Create new workflows dynamically
|
|
106
|
+
- Add or modify nodes in existing workflows
|
|
107
|
+
- Update signal routing on the fly
|
|
108
|
+
|
|
109
|
+
This enables **meta-programming**: an AI system that can extend its own capabilities without human intervention.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## What SOE Unlocks
|
|
114
|
+
|
|
115
|
+
SOE is a **Protocol for Intelligence** that unlocks new forms of intelligent behavior:
|
|
116
|
+
|
|
117
|
+
### Self-Evolving Intelligence
|
|
118
|
+
AI systems that can rewrite and improve themselves at runtime - the ultimate evolution of software.
|
|
119
|
+
|
|
120
|
+
### Swarm Intelligence
|
|
121
|
+
Efficient collective decision-making among multiple agents through signal-based consensus.
|
|
122
|
+
|
|
123
|
+
### Hybrid Intelligence
|
|
124
|
+
Seamless combination of deterministic logic and AI creativity with programmatic safety rails.
|
|
125
|
+
|
|
126
|
+
### Fractal Intelligence
|
|
127
|
+
Hierarchical agent organizations that scale complexity while remaining manageable.
|
|
128
|
+
|
|
129
|
+
### Infrastructure Intelligence
|
|
130
|
+
AI orchestration that works everywhere - from edge devices to cloud platforms.
|
|
131
|
+
|
|
100
132
|
---
|
|
101
133
|
|
|
102
134
|
## Installation
|
|
@@ -117,6 +149,37 @@ cd soe && uv sync
|
|
|
117
149
|
|
|
118
150
|
## Quick Start
|
|
119
151
|
|
|
152
|
+
### 1. Provide Your LLM
|
|
153
|
+
|
|
154
|
+
SOE is LLM-agnostic. You must provide a `call_llm` function that matches this signature:
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
def call_llm(
|
|
158
|
+
prompt: str,
|
|
159
|
+
config: dict,
|
|
160
|
+
) -> str:
|
|
161
|
+
"""
|
|
162
|
+
Called by SOE when a node needs LLM processing.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
prompt: The rendered prompt string (includes instructions, context, and schemas)
|
|
166
|
+
config: The full node configuration from YAML (useful for model parameters)
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
The raw text response from the LLM.
|
|
170
|
+
"""
|
|
171
|
+
# Example with OpenAI:
|
|
172
|
+
from openai import OpenAI
|
|
173
|
+
client = OpenAI()
|
|
174
|
+
response = client.chat.completions.create(
|
|
175
|
+
model=config.get("model", "gpt-4o"),
|
|
176
|
+
messages=[{"role": "user", "content": prompt}],
|
|
177
|
+
)
|
|
178
|
+
return response.choices[0].message.content
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 2. Run a Workflow
|
|
182
|
+
|
|
120
183
|
```python
|
|
121
184
|
from soe import orchestrate, create_all_nodes
|
|
122
185
|
from soe.local_backends import create_local_backends
|
|
@@ -134,8 +197,8 @@ example_workflow:
|
|
|
134
197
|
# Create backends (storage for context, workflows, etc.)
|
|
135
198
|
backends = create_local_backends("./data")
|
|
136
199
|
|
|
137
|
-
# Create all node handlers
|
|
138
|
-
nodes, broadcast = create_all_nodes(backends)
|
|
200
|
+
# Create all node handlers (pass your call_llm function)
|
|
201
|
+
nodes, broadcast = create_all_nodes(backends, call_llm=call_llm)
|
|
139
202
|
|
|
140
203
|
# Run the workflow
|
|
141
204
|
execution_id = orchestrate(
|
|
@@ -157,9 +220,9 @@ execution_id = orchestrate(
|
|
|
157
220
|
|
|
158
221
|
| Audience | Start Here |
|
|
159
222
|
|----------|------------|
|
|
160
|
-
| **Builders** (workflow authors) | [Documentation](docs/index.md) — Step-by-step chapters |
|
|
161
|
-
| **Engineers** (infrastructure) | [
|
|
162
|
-
| **Researchers** (advanced patterns) | [Advanced Patterns](docs/advanced_patterns/
|
|
223
|
+
| **Builders** (workflow authors) | [Documentation](soe/docs/index.md) — Step-by-step chapters |
|
|
224
|
+
| **Engineers** (infrastructure) | [Infrastructure Guide](soe/docs/guide_10_infrastructure.md) — Backend protocols |
|
|
225
|
+
| **Researchers** (advanced patterns) | [Advanced Patterns](docs/advanced_patterns/) — Swarm, hybrid, self-evolving |
|
|
163
226
|
|
|
164
227
|
---
|
|
165
228
|
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
soe/__init__.py,sha256=4g0b-2C4wlr3Aq9eSmISxEMeWRCI4fim_I1v4nfW_Cs,1131
|
|
2
|
+
soe/broker.py,sha256=F_lKV0uqi9_dY1NIzQnUFJm84r6xd1CmvXjjfgRpwrM,5956
|
|
3
|
+
soe/docs_index.py,sha256=CQZKGozZWB-uovDQxUts-vjIlS5vq6PmH824k8AJNbo,3507566
|
|
4
|
+
soe/init.py,sha256=SdVV1oTmh63BCtJpaYZavyO0ALfffsFgd75Vb8aJmXI,5928
|
|
5
|
+
soe/types.py,sha256=3CERX7rti_xRSliH2knZKeNDWqbetWg0z-tTQaGZODk,5929
|
|
6
|
+
soe/builtin_tools/__init__.py,sha256=DgFnCFYJ0tsyQqIbkiqe-rYjzaFMxKCuhG5X3ws31R0,1739
|
|
7
|
+
soe/builtin_tools/soe_add_signal.py,sha256=G85UkaOzYEtQDX5CcYk1HL8-aBd48mytVsvzC20fm9w,2583
|
|
8
|
+
soe/builtin_tools/soe_call_tool.py,sha256=2aFPIHhKIvQIwtWbKOyvHBn4tMp_75YurgvRhKH-4QA,3370
|
|
9
|
+
soe/builtin_tools/soe_copy_context.py,sha256=kuffSBSd8qgiqQQCzNr2qp9idW-aQMeQou-CXMHR5po,2812
|
|
10
|
+
soe/builtin_tools/soe_explore_docs.py,sha256=yKanIF8XuSHkN9di3cWDBXdByLUz4L4E2VlfATrpZrk,9957
|
|
11
|
+
soe/builtin_tools/soe_get_available_tools.py,sha256=WtE0EpumNfIc-EGQo8uCG87xQhFaShZwmZf_fJOQiUc,1154
|
|
12
|
+
soe/builtin_tools/soe_get_context.py,sha256=wmWsV_lV_fzzjGyUpM2KQ1A6P1s0DqRA32sBU-coaVY,1463
|
|
13
|
+
soe/builtin_tools/soe_get_workflows.py,sha256=l04xLHHq87T69_9GRdQCzZ9eiv3cvFoJRpvZwxy63-M,2223
|
|
14
|
+
soe/builtin_tools/soe_inject_node.py,sha256=0X1GP23Jqjp3Bm-W-TVToI5VSvYZQ0cCgg2jWfiDpEM,2830
|
|
15
|
+
soe/builtin_tools/soe_inject_workflow.py,sha256=VqLcLObBJHNxG_LphzeXp7WK_YLEJukOGY6WUhyqSkY,3859
|
|
16
|
+
soe/builtin_tools/soe_list_contexts.py,sha256=yDZI4feISa0sue_PYIe96De46-NondA9E3J6fur12kU,2290
|
|
17
|
+
soe/builtin_tools/soe_remove_node.py,sha256=rDe8az7K9FaM4L4nTFdWFJRhte2p4eRXha6iv-5DoZg,2197
|
|
18
|
+
soe/builtin_tools/soe_remove_workflow.py,sha256=AlhjPU1xrj6VqKSwAbBVpt1sv1B3gcnWasKcrJvw12w,1848
|
|
19
|
+
soe/builtin_tools/soe_update_context.py,sha256=1gu0dTYtK-EY1n3qysJQeusfZYmxWoXCt3c7nhXTcRY,1547
|
|
20
|
+
soe/docs/_config.yml,sha256=PBTNeE97HoDj80tgMtpfxrAAGQxr0OiCaMZaJF-qVmo,255
|
|
21
|
+
soe/docs/guide_00_getting_started.md,sha256=ULHQfKSyex5I3FVwENVa3AmOQkMMKVKJ8TaVPpYVVXA,11279
|
|
22
|
+
soe/docs/guide_01_tool.md,sha256=twDxHgQhHYgdWDlmoY0v9xnC-5RX_NbOMCRi68l_b_s,6964
|
|
23
|
+
soe/docs/guide_02_llm.md,sha256=2t9td-V37vWdtdxfsPNFIT4y5w0vXZVQtc-gy6A3Jko,4839
|
|
24
|
+
soe/docs/guide_03_router.md,sha256=614FW8jhwJBZ6TBeyhBfRRDyw3xV6_6byZH74hlgO6A,5645
|
|
25
|
+
soe/docs/guide_04_patterns.md,sha256=Yyzhb0yyFuHZSiPam7UCj6HagkTcqrI3K2MJbwA2nQU,15368
|
|
26
|
+
soe/docs/guide_05_agent.md,sha256=eZAYryU1AypunOM3V8i9DOeCDPcvk0FjMg97355DCPw,6075
|
|
27
|
+
soe/docs/guide_06_schema.md,sha256=kxRKErtpwPGiasf7gxuYouHaQFOgg-dz1A77vPJMvjw,11513
|
|
28
|
+
soe/docs/guide_07_identity.md,sha256=s2FGdS5rB5YD9GW64SYontIw-STreGkb0QRNvEkwlUw,17038
|
|
29
|
+
soe/docs/guide_08_child.md,sha256=whBLBmCH9si17lQfoUgN6U9A5Mc71_TywCYq_XQSfeg,17888
|
|
30
|
+
soe/docs/guide_09_ecosystem.md,sha256=rfoKjskQmpOc4Fl1h6HUSqRExMd8DVnvH2rLNhxjVac,20219
|
|
31
|
+
soe/docs/guide_10_infrastructure.md,sha256=oGZWtE-PJ-CpqGOF5aM5hM4CCXRjuMAA-C4IBhK-ZlE,14154
|
|
32
|
+
soe/docs/guide_11_builtins.md,sha256=rxndeJ8INNxH7w7fWDQOfmCsNbpKwha3ZKPrcw4gZEo,4234
|
|
33
|
+
soe/docs/index.md,sha256=kVJsInGngoHGUf0shEIgPKnaRo7BWTtrXSuS2YCOcQU,5084
|
|
34
|
+
soe/docs/advanced_patterns/guide_fanout_and_aggregations.md,sha256=vWs6-sBqczHI4knFBi7EtNUGdYmknb4Pp_vXp8lHMtY,9459
|
|
35
|
+
soe/docs/advanced_patterns/guide_inheritance.md,sha256=xDC0MYn1oGQfiwy-4z01PpwUcpuLMREHqh61H-oCQWg,12212
|
|
36
|
+
soe/docs/advanced_patterns/hybrid_intelligence.md,sha256=BoxK-MN8WRZOckqigWzOtwHsA47SKSAbzO9ekK06lGs,7142
|
|
37
|
+
soe/docs/advanced_patterns/index.md,sha256=MTs60CftW5jIrPCOumaH_QPfd1TE7ClW0Qvl_ybHqEE,2127
|
|
38
|
+
soe/docs/advanced_patterns/operational.md,sha256=uk7r3Uh5yNIanbW6JrKD-_n_VPO5WZE8AKIkqFJkRFU,23707
|
|
39
|
+
soe/docs/advanced_patterns/self_evolving_workflows.md,sha256=HICTmuwIg-zjmiAXdbyPKmgD0hELoBLn9y54bbwYV1w,11072
|
|
40
|
+
soe/docs/advanced_patterns/swarm_intelligence.md,sha256=rGKReC1beiU4x5pnKF9hWEXAmqrntQj9TnQ8KvKv8YY,6210
|
|
41
|
+
soe/docs/builtins/context.md,sha256=l1sc9q2jFHCSm8w4klcZN32LNsq5xiMT6mk09oynMC8,3655
|
|
42
|
+
soe/docs/builtins/explore_docs.md,sha256=XJRDNAGsxi98k9BHSyRHs06av_gqEVLwgaC1YFKG6NE,3646
|
|
43
|
+
soe/docs/builtins/tools.md,sha256=a5QZLEdddK6WZ1jJ1UPxlmTHHOjm4QhQZ8pC2GOEbr0,3753
|
|
44
|
+
soe/docs/builtins/workflows.md,sha256=M1n2tGECcrCUQwZ-OzF-GqVRx-LNUxTvKDxIv41esx4,4774
|
|
45
|
+
soe/docs/primitives/backends.md,sha256=T_6jhjum6af9gPil4vIZdJtX9tgSGCJk6IQUuiISnyo,8209
|
|
46
|
+
soe/docs/primitives/context.md,sha256=FJ5d_7H8hOYJeSQ5MPzsapMS13WZ2f9IJ6of8TvmwdY,5325
|
|
47
|
+
soe/docs/primitives/node_reference.md,sha256=S8Ifwmhtl3PDex5XpzQAgFd-MmbZRg84vIIdGP0b0Gs,8208
|
|
48
|
+
soe/docs/primitives/primitives.md,sha256=LUtIb1h5b2b3QCWSJrPYHUWAwE4KJjagCDCNJjj_UJo,11519
|
|
49
|
+
soe/docs/primitives/signals.md,sha256=1TBzz5hdTVsvSl1tNKwKl-hRJeLiYatyRplxgxx0za0,26287
|
|
50
|
+
soe/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
soe/lib/child_context.py,sha256=qIosNpCjhvEuLpJUHxRkgXjA78FyasnGrsTTcq9DN-4,1431
|
|
52
|
+
soe/lib/context_fields.py,sha256=Fct7JlzWLQ2268pdKHo8P2o2DVhpIDNwVMQ3o5bcqtI,1363
|
|
53
|
+
soe/lib/inheritance.py,sha256=m8BP-G8UIKuDYZBTXOcz1Jbecr1Tjg31GBTtYGA-GwU,5122
|
|
54
|
+
soe/lib/jinja_render.py,sha256=MTWNvv0XU2WmhcTupTfLkp_n348dL9nBlz0J4oDDm4Q,4041
|
|
55
|
+
soe/lib/operational.py,sha256=pgx-nSOhYXD9pj1vlQqyCMloLLfPazL0WYp785K4mjQ,1416
|
|
56
|
+
soe/lib/parent_sync.py,sha256=h5x20aop3zqgtLWaIJ848sd6hkRcEFvVed99JFBTdxQ,2504
|
|
57
|
+
soe/lib/register_event.py,sha256=3j6NbJPevkAHIbYwm7bOBcvS3xk1XG6sLfAE6sK8lsE,2591
|
|
58
|
+
soe/lib/schema_validation.py,sha256=mivLPUCVdo_P4CD4x7ZOk0Ixos2Xj52QiVNFl88Zy_A,4070
|
|
59
|
+
soe/lib/yaml_parser.py,sha256=dZcG1SarrNfRtDTqDcGeCGvyEXtBt2d38v-isepR5KM,408
|
|
60
|
+
soe/local_backends/__init__.py,sha256=GLBYWxu6o4zlp9ejEOzebrwyiwKzQILOIzrVzzwLQ6A,558
|
|
61
|
+
soe/local_backends/factory.py,sha256=WEvTq34qeb2d91uu9Pze4G2KY24L9zeqy7WBUxm3i-o,4594
|
|
62
|
+
soe/local_backends/in_memory/context.py,sha256=M7TMKDn7LPFOJz61_vFcCVRxDmc1VOr5sx_Xs9Tdias,944
|
|
63
|
+
soe/local_backends/in_memory/conversation_history.py,sha256=AzQl1qiEntUKfw20U0FPHK-Jizj7wTP8bwzTTnZVHxM,1635
|
|
64
|
+
soe/local_backends/in_memory/identity.py,sha256=O-QSPX-wajAzaVeaEniLsIIBe5tCrM8FykuC4N0QEto,1774
|
|
65
|
+
soe/local_backends/in_memory/schema.py,sha256=eXOwKFbFDWZfyRCxrBZx2lYABnZeLNzz1zxMOgRn_es,1216
|
|
66
|
+
soe/local_backends/in_memory/telemetry.py,sha256=-krImbIfa183DblbRq1K7785hSGJF5lu49VCQ66vMNI,1020
|
|
67
|
+
soe/local_backends/in_memory/workflow.py,sha256=STujgxyTpgK0giQJcJvYMUKcoKX_6UopnLOQzEb1lPA,1141
|
|
68
|
+
soe/local_backends/storage/context.py,sha256=ufM58u86MN6rMj0ZGjKJ6_tU0mifaT7NAXoCxN7FXtk,1588
|
|
69
|
+
soe/local_backends/storage/conversation_history.py,sha256=-BV8zlD_6CV3q8CnlHJL0dG0e-1E0YSUx2X_V_y6sDI,2638
|
|
70
|
+
soe/local_backends/storage/identity.py,sha256=adm_zA6XjVsjV-6ZdZOFsSV7i1PvCI0unfBxgc4LhXk,3910
|
|
71
|
+
soe/local_backends/storage/schema.py,sha256=slNFDaiae1pY_PbeYsgdzror9xL2vReIo3XcaX6q4dM,3068
|
|
72
|
+
soe/local_backends/storage/telemetry.py,sha256=K6gcpXDsoH9Pll_Lz-27ff_ad48nCNwfHi5gzC5YNKA,2138
|
|
73
|
+
soe/local_backends/storage/workflow.py,sha256=d3DiwfjR1OP4bnhRLgzdTZQ6xYUnwBh5B3sz0W5sH_k,2094
|
|
74
|
+
soe/nodes/__init__.py,sha256=soAkTMdrAuc82la7TRabTtpiQW2kngd8MlWuJuCRCrM,305
|
|
75
|
+
soe/nodes/agent/__init__.py,sha256=SQaDB9TAiMv5ZjGLX4B1nBnOwX_DGUxqzzDJ4BIT534,171
|
|
76
|
+
soe/nodes/agent/factory.py,sha256=skqPpMcfA9qYtcFEJ2FqjRXhVrvn2XgEPg40dt8KnHw,5359
|
|
77
|
+
soe/nodes/agent/state.py,sha256=2fznePHA-0etOlCepMKVnguFDpooYynTBD21VjI_Fgw,3716
|
|
78
|
+
soe/nodes/agent/types.py,sha256=t25gHmsJ_oYxGXWSWvychvXcXcSenbQAMkET1CA-iO4,1837
|
|
79
|
+
soe/nodes/agent/lib/loop_handlers.py,sha256=ndCoW_hQbtEkoj7UYlvXskZxXc-IgTCG3kBQzjJqQUE,4642
|
|
80
|
+
soe/nodes/agent/lib/loop_state.py,sha256=oft2uP5Rrl5iYrKZ31JX9nslKhi6GZRQZFclTU0w6DU,5474
|
|
81
|
+
soe/nodes/agent/lib/prompts.py,sha256=Nk3115Hq7Pa5FX1w_YZel7Yi1BLcMjLGme-p3UgyOxY,2002
|
|
82
|
+
soe/nodes/agent/lib/tools.py,sha256=8XDof2qYnUw8BWC0VXybMaBx-QwzEfZM5fAbA9VMwc0,986
|
|
83
|
+
soe/nodes/agent/stages/__init__.py,sha256=l3jXE7U4B41w7iTvuvgVrymD_BNIQSNA65oWfMRYtgs,330
|
|
84
|
+
soe/nodes/agent/stages/parameter.py,sha256=R6ylX2Lprf24FGiohN9LQk3C6jrQkTtOWdNNQHKST9g,1052
|
|
85
|
+
soe/nodes/agent/stages/response.py,sha256=khoyIr8nX10DLKvw-fNE7NUZh5uB_rpmmKm6pOt0OG0,1671
|
|
86
|
+
soe/nodes/agent/stages/router.py,sha256=AWtcYD8ae25QQFySg7iKyn9kKIq-8LLEZyqBG7XxL4I,1138
|
|
87
|
+
soe/nodes/agent/validation/__init__.py,sha256=ELLoSXqr1NeVwG766QzTuP2Fm3rLMKBXdhsgRUYOy_E,314
|
|
88
|
+
soe/nodes/agent/validation/config.py,sha256=YQABnBSS4bLZvdhl2N5AfSPsZmhVljWS8ibxDxAeyWs,3834
|
|
89
|
+
soe/nodes/agent/validation/operational.py,sha256=yFVD0wadNx5WH981d3NUHGIxkBMlVduE-N8UVlvqxrg,743
|
|
90
|
+
soe/nodes/child/__init__.py,sha256=Ac85rPNGjefXqTc4poyYi6PYuXqUEVThiF9SSSPV0dY,87
|
|
91
|
+
soe/nodes/child/factory.py,sha256=eELq_v7RVhpRyEu4OY4RzcCnd3lepw7O-uqG0weFgkE,2054
|
|
92
|
+
soe/nodes/child/state.py,sha256=QTzXcTd4CstgCww01-nxzbWHf05lNcn4gfHd1lRl_WA,2080
|
|
93
|
+
soe/nodes/child/validation/__init__.py,sha256=TBPmAlQ92wIIYD22yG8YjfYo25tsUDay1amA4cexPi4,314
|
|
94
|
+
soe/nodes/child/validation/config.py,sha256=IF-IdaNRgNbFhPfr-ssTbnTsC9XgjC9DBv1kl_SqRbk,5421
|
|
95
|
+
soe/nodes/child/validation/operational.py,sha256=NPM1exArEbrzNqBN-SY7DXp-zk8tdHpHHDPjKdnNXfI,859
|
|
96
|
+
soe/nodes/lib/conditions.py,sha256=QlVbaG9UF-VACBxw2pukqJWMgpeqx98QpyaDBjT2P4Y,2437
|
|
97
|
+
soe/nodes/lib/context.py,sha256=1gKkCW4B19yt2NTfeJvWn39V1aT1PCYd2mQ2L-HV1iU,798
|
|
98
|
+
soe/nodes/lib/conversation_history.py,sha256=WTQscCSTElWShehij3lEVSWebHtrGpM_s2RbZxfJSx4,2844
|
|
99
|
+
soe/nodes/lib/identity.py,sha256=HxSVJrjPAyAjMujFOgq-uZkGYrSz6sZbjM1VFi2PSVk,1861
|
|
100
|
+
soe/nodes/lib/llm_resolver.py,sha256=KJYh9Rt3T85XDe8wWyf1p-UPPxF6EYqGCdnd87rUk3o,4138
|
|
101
|
+
soe/nodes/lib/output.py,sha256=bfTwwSmSFr8i5_AoKwrPU-bEMqImo8QDd-AWEY9mac4,2231
|
|
102
|
+
soe/nodes/lib/response_builder.py,sha256=xnx7iKGRay3UNAfWRl934kUEmtb3VfxAoLG7aPWUa8o,3078
|
|
103
|
+
soe/nodes/lib/signal_emission.py,sha256=o69AtiUctwP9E8UCKrfKUcFQJ5USlx-nhiY-F2I2Ibg,2773
|
|
104
|
+
soe/nodes/lib/signals.py,sha256=GD5PnwACVNvQ8VnH5o60ixhwZrO6cFlAb0DwEjW06T4,1829
|
|
105
|
+
soe/nodes/lib/tools.py,sha256=2m5kQQWC46zL0wjj7Amo-m4Hzar56UH11q1z8XMlgmo,3105
|
|
106
|
+
soe/nodes/llm/__init__.py,sha256=2iUEslXqRO5izJZLdecLBUZ0cXsQsD0pWg0CaBY13MI,159
|
|
107
|
+
soe/nodes/llm/factory.py,sha256=3wiZxHGDWdTEi-_rZNAoPz_QTKYUurtd3Hd_aR9goCs,3743
|
|
108
|
+
soe/nodes/llm/state.py,sha256=c4x_22SdYTa1NRz5APjex8Ro_l3ISAixg55-rIG6ucQ,2775
|
|
109
|
+
soe/nodes/llm/types.py,sha256=hqUrvnNRCw_vnqJWIvdru9k4sLh6O3Zk9DSY-7jOE7c,223
|
|
110
|
+
soe/nodes/llm/validation/__init__.py,sha256=HAArh6mw4ixTRx4v8CW44BcpIRpU6tLjLGPd06X9m4Y,308
|
|
111
|
+
soe/nodes/llm/validation/config.py,sha256=j1kr3yDBdC95aDpu7Z7nItN55reaOSBWvQkeybvoA8g,3593
|
|
112
|
+
soe/nodes/llm/validation/operational.py,sha256=fyVsVgCLA1FqBvxDyA7SYYp5qI_3evrhooQHDBVH364,672
|
|
113
|
+
soe/nodes/router/__init__.py,sha256=3a4BcgFLGGcO1xdjcbAnxNjGwhvl8NGRLLxTnCqtkjM,67
|
|
114
|
+
soe/nodes/router/factory.py,sha256=37qyLurhjAuGWwGOb6FbpZ6Ef5Hzw2gBd4dQxWTzuy4,1338
|
|
115
|
+
soe/nodes/router/state.py,sha256=vXZWWQ7BJ0SEZayUoAIX3rEkJTARYHwIiJ7O8N1esHg,886
|
|
116
|
+
soe/nodes/router/validation/__init__.py,sha256=DgU37MHrR90GI1VvvfaUltrFtwpVGlGOc9PBGIVUjX0,317
|
|
117
|
+
soe/nodes/router/validation/config.py,sha256=iR07s31GsyJJBInljRu8qh7zMKHKGoYVf2auLb0lSQQ,2195
|
|
118
|
+
soe/nodes/router/validation/operational.py,sha256=Chldb5tpMe1MfFV3ym5XzneIF2OA8cBTvbfdWchX21c,519
|
|
119
|
+
soe/nodes/tool/factory.py,sha256=cWJD-tNsCQnp6vNGtdbdX7pnQWlsCu1RdClKH6q2KSA,2460
|
|
120
|
+
soe/nodes/tool/state.py,sha256=ncJ0huYPwkKqU_2ITEc3hXOnB7S9a4RbLytZKVxs2uQ,2263
|
|
121
|
+
soe/nodes/tool/types.py,sha256=l3ZjXlOReqYEe8jg1ohzmldaPqQGEmZpkgNFCvWejw4,566
|
|
122
|
+
soe/nodes/tool/lib/__init__.py,sha256=KG1pnYuOAdPofsmX9LZgNc61bqagj1SMv-mzw8J5Hvc,201
|
|
123
|
+
soe/nodes/tool/lib/conditions.py,sha256=3xoBEjBeCZQGGjh8cRumH1IGwvZqv3vw_2zk9Ha6AWU,1111
|
|
124
|
+
soe/nodes/tool/lib/failure.py,sha256=miCrV2Mbx8b6sle1WT_zoaAoAyB7tHQhkwcjxgiDmRY,891
|
|
125
|
+
soe/nodes/tool/lib/parameters.py,sha256=q0c7znyqpRY3L0iI8x3WXTWyjSQ-XzDGw6baVJVdvDw,2182
|
|
126
|
+
soe/nodes/tool/validation/__init__.py,sha256=9sdtiYrPZg4zJ3WXAWg6h4c_oS9SIVgL7Oc7JQTiMfI,382
|
|
127
|
+
soe/nodes/tool/validation/config.py,sha256=tI8mHawFjbXLQ6xSMOJ9mnQUirnoqqK5Gfi9kclB3DE,4632
|
|
128
|
+
soe/nodes/tool/validation/operational.py,sha256=5he58ssGzQ_kXfdy26y4kqNEjo_CAVx989JJxNa5fi0,488
|
|
129
|
+
soe/validation/__init__.py,sha256=oZGAT3Mp8Pzu_D_FSObLUEBTf10dk8C-GhM4tipfAxw,523
|
|
130
|
+
soe/validation/config.py,sha256=hB7Gk_bkoqvf0iES9PNmVTcKgyUm_0UgiCSXcc30ztc,6834
|
|
131
|
+
soe/validation/jinja.py,sha256=_Ykj-UT9i3wQRXCyQgja3boCZuI3lrqOnf5C3iB1Kmg,1746
|
|
132
|
+
soe/validation/operational.py,sha256=P5SrE_8345IhHvsXpJ-XDEp1sIQVFhGXDBNQhuh7sTo,3628
|
|
133
|
+
soe_ai-0.1.2.dist-info/licenses/LICENSE,sha256=SvEn330zvSOu83Vi4lDCX2QHgr6bmSSXOV1YClLGk1Y,1069
|
|
134
|
+
soe_ai-0.1.2.dist-info/METADATA,sha256=ro4JH1Nr4YbaGYsgVpq-cz3_sGsKyKOzX4q35aJ4MaQ,8794
|
|
135
|
+
soe_ai-0.1.2.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
136
|
+
soe_ai-0.1.2.dist-info/top_level.txt,sha256=TUufXyVAQnzN6iT6zRb4dRHdfBSiWXuAL8EoyvugZuY,4
|
|
137
|
+
soe_ai-0.1.2.dist-info/RECORD,,
|
soe/validation.py
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
DEPRECATED: This module has been moved to soe/validation/ folder.
|
|
3
|
-
This file is kept temporarily but will be removed.
|
|
4
|
-
|
|
5
|
-
Import from soe.validation instead:
|
|
6
|
-
from soe.validation import validate_config, validate_operational
|
|
7
|
-
"""
|
|
8
|
-
# This file should be deleted - Python will import from soe/validation/ folder instead
|
soe_ai-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
soe/__init__.py,sha256=4g0b-2C4wlr3Aq9eSmISxEMeWRCI4fim_I1v4nfW_Cs,1131
|
|
2
|
-
soe/broker.py,sha256=R5s5GvgmwgBQK9FyI-UAMVb7nf14tMdXpeEZ-t8d3rE,5987
|
|
3
|
-
soe/docs_index.py,sha256=mDnQ-LVyPgF25_8yCuD04j2PxiQCR_6Si_NMkfJyk-0,3055071
|
|
4
|
-
soe/init.py,sha256=Fzw7MDoEOlZLfCwH-kL0evUjc3WHmLEVOaeR2-dgwWs,5876
|
|
5
|
-
soe/types.py,sha256=xSmkRcKehYW2pesnzB0qCZHjpm_IoDTBbQcb1SwV-8o,5712
|
|
6
|
-
soe/validation.py,sha256=SeBfGaaGjUi73ejnHNqVLTv7LYtU_gFHX8OJ3iytJMo,318
|
|
7
|
-
soe_ai-0.1.0.dist-info/licenses/LICENSE,sha256=SvEn330zvSOu83Vi4lDCX2QHgr6bmSSXOV1YClLGk1Y,1069
|
|
8
|
-
soe_ai-0.1.0.dist-info/METADATA,sha256=bWjq5DC6W9NenF18lKAgVkK-xZE_9cYGYJOOCQCoHSM,6558
|
|
9
|
-
soe_ai-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
10
|
-
soe_ai-0.1.0.dist-info/top_level.txt,sha256=TUufXyVAQnzN6iT6zRb4dRHdfBSiWXuAL8EoyvugZuY,4
|
|
11
|
-
soe_ai-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|