flock-core 0.5.0b15__py3-none-any.whl → 0.5.0b17__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.
Potentially problematic release.
This version of flock-core might be problematic. Click here for more details.
- flock/components/evaluation/declarative_evaluation_component.py +99 -40
- flock/components/utility/memory_utility_component.py +5 -3
- flock/core/__init__.py +5 -0
- flock/core/agent/default_agent.py +170 -0
- flock/core/agent/flock_agent_integration.py +54 -0
- flock/core/agent/flock_agent_lifecycle.py +9 -0
- flock/core/context/context.py +2 -3
- flock/core/execution/local_executor.py +1 -1
- flock/core/execution/temporal_executor.py +4 -6
- flock/core/flock_agent.py +15 -2
- flock/core/flock_factory.py +92 -80
- flock/core/logging/telemetry.py +7 -2
- flock/core/mcp/flock_mcp_server.py +19 -0
- flock/core/mcp/flock_mcp_tool.py +9 -53
- flock/core/mcp/mcp_config.py +22 -4
- flock/core/mixin/dspy_integration.py +107 -149
- flock/core/orchestration/flock_execution.py +7 -0
- flock/core/orchestration/flock_initialization.py +24 -0
- flock/core/serialization/serialization_utils.py +20 -20
- flock/core/util/input_resolver.py +16 -6
- flock/workflow/agent_execution_activity.py +57 -83
- flock/workflow/flock_workflow.py +39 -50
- flock/workflow/temporal_setup.py +11 -3
- {flock_core-0.5.0b15.dist-info → flock_core-0.5.0b17.dist-info}/METADATA +7 -7
- {flock_core-0.5.0b15.dist-info → flock_core-0.5.0b17.dist-info}/RECORD +28 -27
- {flock_core-0.5.0b15.dist-info → flock_core-0.5.0b17.dist-info}/WHEEL +0 -0
- {flock_core-0.5.0b15.dist-info → flock_core-0.5.0b17.dist-info}/entry_points.txt +0 -0
- {flock_core-0.5.0b15.dist-info → flock_core-0.5.0b17.dist-info}/licenses/LICENSE +0 -0
|
@@ -23,7 +23,7 @@ registry = get_registry() # Get registry instance once
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@activity.defn
|
|
26
|
-
async def execute_single_agent(agent_name: str,
|
|
26
|
+
async def execute_single_agent(agent_name: str, context_dict: dict) -> dict:
|
|
27
27
|
"""Executes a single specified agent and returns its result.
|
|
28
28
|
|
|
29
29
|
Args:
|
|
@@ -47,7 +47,8 @@ async def execute_single_agent(agent_name: str, context: FlockContext) -> dict:
|
|
|
47
47
|
# Raise error for Temporal to potentially retry/fail the activity
|
|
48
48
|
raise ValueError(f"Agent '{agent_name}' not found in registry.")
|
|
49
49
|
|
|
50
|
-
#
|
|
50
|
+
# Rehydrate context from dict and set on agent (transient for this execution)
|
|
51
|
+
context = FlockContext.from_dict(context_dict)
|
|
51
52
|
agent.context = context
|
|
52
53
|
|
|
53
54
|
# Ensure model is set (using context value if needed)
|
|
@@ -66,13 +67,39 @@ async def execute_single_agent(agent_name: str, context: FlockContext) -> dict:
|
|
|
66
67
|
# agent.resolve_callables(context=context)
|
|
67
68
|
|
|
68
69
|
# Resolve inputs for this specific agent run
|
|
69
|
-
previous_agent_name = (
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
previous_agent_name = context.get_last_agent_name() # May be None on first agent
|
|
71
|
+
prev_def = (
|
|
72
|
+
context.get_agent_definition(previous_agent_name)
|
|
73
|
+
if previous_agent_name
|
|
74
|
+
else None
|
|
75
|
+
)
|
|
76
|
+
prev_out_spec = (
|
|
77
|
+
(prev_def.agent_data.get("output_spec") if isinstance(prev_def, type(prev_def)) else None)
|
|
78
|
+
if prev_def and isinstance(prev_def.agent_data, dict)
|
|
79
|
+
else None
|
|
80
|
+
)
|
|
81
|
+
prev_cfg = (
|
|
82
|
+
prev_def.agent_data.get("config")
|
|
83
|
+
if prev_def and isinstance(prev_def.agent_data, dict)
|
|
84
|
+
else {}
|
|
85
|
+
)
|
|
86
|
+
prev_strategy = (
|
|
87
|
+
prev_cfg.get("handoff_strategy") if isinstance(prev_cfg, dict) else None
|
|
88
|
+
) or "static"
|
|
89
|
+
prev_map = (
|
|
90
|
+
prev_cfg.get("handoff_map") if isinstance(prev_cfg, dict) else None
|
|
91
|
+
) or {}
|
|
72
92
|
logger.debug(
|
|
73
93
|
f"Resolving inputs for {agent_name} with previous agent {previous_agent_name}"
|
|
74
94
|
)
|
|
75
|
-
agent_inputs = resolve_inputs(
|
|
95
|
+
agent_inputs = resolve_inputs(
|
|
96
|
+
agent.input,
|
|
97
|
+
context,
|
|
98
|
+
previous_agent_name or "",
|
|
99
|
+
prev_out_spec or "",
|
|
100
|
+
prev_strategy,
|
|
101
|
+
prev_map,
|
|
102
|
+
)
|
|
76
103
|
span.add_event(
|
|
77
104
|
"resolved inputs", attributes={"inputs": str(agent_inputs)}
|
|
78
105
|
)
|
|
@@ -96,6 +123,8 @@ async def execute_single_agent(agent_name: str, context: FlockContext) -> dict:
|
|
|
96
123
|
error=str(e),
|
|
97
124
|
exc_info=True,
|
|
98
125
|
)
|
|
126
|
+
# Debug aid: ensure exception prints even if logger is muted in environment
|
|
127
|
+
print(f"[agent_activity] Single agent execution failed for {agent_name}: {e!r}")
|
|
99
128
|
span.record_exception(e)
|
|
100
129
|
# Re-raise the exception for Temporal to handle based on retry policy
|
|
101
130
|
raise
|
|
@@ -103,22 +132,11 @@ async def execute_single_agent(agent_name: str, context: FlockContext) -> dict:
|
|
|
103
132
|
|
|
104
133
|
@activity.defn
|
|
105
134
|
async def determine_next_agent(
|
|
106
|
-
current_agent_name: str, result: dict,
|
|
107
|
-
) ->
|
|
108
|
-
"""
|
|
109
|
-
|
|
110
|
-
Args:
|
|
111
|
-
current_agent_name: The name of the agent that just ran.
|
|
112
|
-
result: The result produced by the current agent.
|
|
113
|
-
context: The current FlockContext.
|
|
114
|
-
|
|
115
|
-
Returns:
|
|
116
|
-
A dictionary representing the HandOffRequest (serialized via model_dump),
|
|
117
|
-
or None if no handoff occurs or router doesn't specify a next agent.
|
|
135
|
+
current_agent_name: str, result: dict, context_dict: dict
|
|
136
|
+
) -> str | None:
|
|
137
|
+
"""Determine the next agent using the agent's routing component.
|
|
118
138
|
|
|
119
|
-
|
|
120
|
-
ValueError: If the current agent cannot be found.
|
|
121
|
-
Exception: Propagates exceptions from router execution for Temporal retries.
|
|
139
|
+
Returns the next agent's name or None if the workflow should terminate.
|
|
122
140
|
"""
|
|
123
141
|
with tracer.start_as_current_span("determine_next_agent") as span:
|
|
124
142
|
span.set_attribute("agent.name", current_agent_name)
|
|
@@ -145,75 +163,30 @@ async def determine_next_agent(
|
|
|
145
163
|
agent=agent.name,
|
|
146
164
|
)
|
|
147
165
|
try:
|
|
148
|
-
# Execute the
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
agent=agent.name,
|
|
162
|
-
)
|
|
163
|
-
# Ensure context is available if the callable needs it
|
|
164
|
-
try:
|
|
165
|
-
handoff_data = handoff_data(
|
|
166
|
-
context, result
|
|
167
|
-
) # Potential side effects
|
|
168
|
-
if not isinstance(handoff_data, HandOffRequest):
|
|
169
|
-
logger.error(
|
|
170
|
-
"Handoff function did not return a HandOffRequest object.",
|
|
171
|
-
agent=agent.name,
|
|
172
|
-
)
|
|
173
|
-
raise TypeError(
|
|
174
|
-
"Handoff function must return a HandOffRequest object."
|
|
175
|
-
)
|
|
176
|
-
except Exception as e:
|
|
177
|
-
logger.error(
|
|
178
|
-
"Handoff function execution failed",
|
|
179
|
-
agent=agent.name,
|
|
180
|
-
error=str(e),
|
|
181
|
-
exc_info=True,
|
|
182
|
-
)
|
|
183
|
-
span.record_exception(e)
|
|
184
|
-
raise # Propagate error
|
|
185
|
-
|
|
186
|
-
# Ensure we have a HandOffRequest object after potentially calling function
|
|
187
|
-
if not isinstance(handoff_data, HandOffRequest):
|
|
188
|
-
logger.error(
|
|
189
|
-
"Router returned unexpected type",
|
|
190
|
-
type=type(handoff_data).__name__,
|
|
191
|
-
agent=agent.name,
|
|
192
|
-
)
|
|
193
|
-
raise TypeError(
|
|
194
|
-
f"Router for agent '{agent.name}' did not return a HandOffRequest object."
|
|
195
|
-
)
|
|
196
|
-
|
|
197
|
-
# Ensure agent instance is converted to name for serialization across boundaries
|
|
198
|
-
if isinstance(handoff_data.next_agent, FlockAgent):
|
|
199
|
-
handoff_data.next_agent = handoff_data.next_agent.name
|
|
200
|
-
|
|
201
|
-
# If router logic determines no further agent, return None
|
|
202
|
-
if not handoff_data.next_agent:
|
|
166
|
+
# Execute routing logic on the router component (unified architecture)
|
|
167
|
+
context = FlockContext.from_dict(context_dict)
|
|
168
|
+
next_val = await agent.router.determine_next_step(agent, result, context)
|
|
169
|
+
|
|
170
|
+
# Convert to a simple agent name if needed
|
|
171
|
+
if isinstance(next_val, FlockAgent):
|
|
172
|
+
next_name = next_val.name
|
|
173
|
+
elif isinstance(next_val, str):
|
|
174
|
+
next_name = next_val
|
|
175
|
+
else:
|
|
176
|
+
next_name = None
|
|
177
|
+
|
|
178
|
+
if not next_name:
|
|
203
179
|
logger.info("Router determined no next agent", agent=agent.name)
|
|
204
180
|
span.add_event("no_next_agent_from_router")
|
|
205
181
|
return None
|
|
206
182
|
|
|
207
183
|
logger.info(
|
|
208
|
-
"
|
|
209
|
-
next_agent=
|
|
184
|
+
"Next agent determined",
|
|
185
|
+
next_agent=next_name,
|
|
210
186
|
agent=agent.name,
|
|
211
187
|
)
|
|
212
|
-
span.set_attribute("next_agent",
|
|
213
|
-
|
|
214
|
-
return handoff_data.model_dump(
|
|
215
|
-
mode="json"
|
|
216
|
-
) # Ensure JSON-serializable
|
|
188
|
+
span.set_attribute("next_agent", next_name)
|
|
189
|
+
return next_name
|
|
217
190
|
|
|
218
191
|
except Exception as e:
|
|
219
192
|
# Catch potential errors during routing execution
|
|
@@ -223,6 +196,7 @@ async def determine_next_agent(
|
|
|
223
196
|
error=str(e),
|
|
224
197
|
exc_info=True,
|
|
225
198
|
)
|
|
199
|
+
print(f"[agent_activity] Router execution failed for {agent.name}: {e!r}")
|
|
226
200
|
span.record_exception(e)
|
|
227
201
|
# Let Temporal handle the activity failure based on retry policy
|
|
228
202
|
raise
|
flock/workflow/flock_workflow.py
CHANGED
|
@@ -118,13 +118,17 @@ class FlockWorkflow:
|
|
|
118
118
|
)
|
|
119
119
|
|
|
120
120
|
# --- Execute the current agent activity ---
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
try:
|
|
122
|
+
agent_result = await workflow.execute_activity(
|
|
123
|
+
execute_single_agent,
|
|
124
|
+
args=[current_agent_name, context.model_dump(mode="json")],
|
|
125
|
+
task_queue=activity_task_queue,
|
|
126
|
+
start_to_close_timeout=activity_timeout,
|
|
127
|
+
retry_policy=final_retry_policy,
|
|
128
|
+
)
|
|
129
|
+
except Exception as e:
|
|
130
|
+
logger.error("execute_single_agent activity failed", agent=current_agent_name, error=str(e))
|
|
131
|
+
raise
|
|
128
132
|
|
|
129
133
|
# Record the execution in the context history
|
|
130
134
|
# Note: The 'called_from' is the agent *before* this one
|
|
@@ -142,54 +146,34 @@ class FlockWorkflow:
|
|
|
142
146
|
"Determining next agent activity",
|
|
143
147
|
current_agent=current_agent_name,
|
|
144
148
|
)
|
|
145
|
-
# --- Determine the next agent
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
149
|
+
# --- Determine the next agent (using routing component) ---
|
|
150
|
+
try:
|
|
151
|
+
next_agent_name = await workflow.execute_activity(
|
|
152
|
+
determine_next_agent,
|
|
153
|
+
args=[current_agent_name, agent_result, context.model_dump(mode="json")],
|
|
154
|
+
start_to_close_timeout=timedelta(minutes=1),
|
|
155
|
+
retry_policy=default_retry_config.to_temporalio_policy(),
|
|
156
|
+
)
|
|
157
|
+
except Exception as e:
|
|
158
|
+
logger.error("determine_next_agent activity failed", agent=current_agent_name, error=str(e))
|
|
159
|
+
raise
|
|
154
160
|
|
|
155
161
|
# Update previous agent name for the next loop iteration
|
|
156
162
|
previous_agent_name = current_agent_name
|
|
157
163
|
|
|
158
|
-
if
|
|
159
|
-
logger.debug(
|
|
160
|
-
|
|
161
|
-
)
|
|
162
|
-
# Deserialize handoff data back into Pydantic model for easier access
|
|
163
|
-
handoff_request = HandOffRequest.model_validate(
|
|
164
|
-
handoff_data_dict
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
# Update context based on handoff overrides
|
|
168
|
-
if handoff_request.override_context:
|
|
169
|
-
context.state.update(handoff_request.override_context)
|
|
170
|
-
logger.info("Context updated based on handoff override")
|
|
171
|
-
|
|
172
|
-
# Update the last record's handoff information
|
|
164
|
+
if next_agent_name:
|
|
165
|
+
logger.debug("Next agent received", data=next_agent_name)
|
|
166
|
+
# Update the last record's handoff information for observability
|
|
173
167
|
if context.history:
|
|
174
|
-
context.history[-1].hand_off =
|
|
168
|
+
context.history[-1].hand_off = {"next_agent": next_agent_name}
|
|
175
169
|
|
|
176
170
|
# Set the next agent
|
|
177
|
-
current_agent_name =
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
FLOCK_CURRENT_AGENT, current_agent_name
|
|
181
|
-
)
|
|
182
|
-
logger.info("Next agent set", agent=current_agent_name)
|
|
183
|
-
else:
|
|
184
|
-
logger.info(
|
|
185
|
-
"Handoff requested termination (no next agent)"
|
|
186
|
-
)
|
|
187
|
-
break # Exit loop if router explicitly returned no next agent
|
|
188
|
-
|
|
171
|
+
current_agent_name = next_agent_name
|
|
172
|
+
context.set_variable(FLOCK_CURRENT_AGENT, current_agent_name)
|
|
173
|
+
logger.info("Next agent set", agent=current_agent_name)
|
|
189
174
|
else:
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
current_agent_name = None # End the loop
|
|
175
|
+
logger.info("No next agent, workflow terminating.")
|
|
176
|
+
current_agent_name = None
|
|
193
177
|
|
|
194
178
|
# --- Workflow Completion ---
|
|
195
179
|
logger.success(
|
|
@@ -206,9 +190,14 @@ class FlockWorkflow:
|
|
|
206
190
|
return final_result # Return the actual result of the last agent
|
|
207
191
|
|
|
208
192
|
except Exception as e:
|
|
209
|
-
# Catch exceptions from activities (e.g., after retries fail)
|
|
210
|
-
|
|
211
|
-
|
|
193
|
+
# Catch exceptions from activities (e.g., after retries fail) or workflow logic errors
|
|
194
|
+
logger.exception(f"Workflow execution failed: {e!r}")
|
|
195
|
+
try:
|
|
196
|
+
from temporalio.exceptions import ActivityError
|
|
197
|
+
if isinstance(e, ActivityError) and getattr(e, "cause", None) is not None:
|
|
198
|
+
logger.error(f"ActivityError cause: {e.cause!r}")
|
|
199
|
+
except Exception:
|
|
200
|
+
pass
|
|
212
201
|
context.set_variable(
|
|
213
202
|
"flock.result",
|
|
214
203
|
{
|
flock/workflow/temporal_setup.py
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import uuid
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from temporalio.client import Client
|
|
4
5
|
from temporalio.worker import Worker
|
|
6
|
+
from flock.config import TEMPORAL_SERVER_URL
|
|
5
7
|
|
|
6
8
|
|
|
7
|
-
async def create_temporal_client() -> Client:
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
async def create_temporal_client(server_address: Optional[str] = None) -> Client:
|
|
10
|
+
"""Create a Temporal client using configured server address.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
server_address: Optional override for the Temporal server endpoint. If not
|
|
14
|
+
provided, falls back to flock.config.TEMPORAL_SERVER_URL.
|
|
15
|
+
"""
|
|
16
|
+
address = server_address or TEMPORAL_SERVER_URL
|
|
17
|
+
client = await Client.connect(address)
|
|
10
18
|
return client
|
|
11
19
|
|
|
12
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flock-core
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b17
|
|
4
4
|
Summary: Declarative LLM Orchestration at Scale
|
|
5
5
|
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -16,10 +16,10 @@ Requires-Dist: cloudpickle>=3.1.1
|
|
|
16
16
|
Requires-Dist: croniter>=6.0.0
|
|
17
17
|
Requires-Dist: datasets>=3.2.0
|
|
18
18
|
Requires-Dist: devtools>=0.12.2
|
|
19
|
-
Requires-Dist: dspy
|
|
19
|
+
Requires-Dist: dspy>=3.0.0
|
|
20
20
|
Requires-Dist: fastapi>=0.115.8
|
|
21
21
|
Requires-Dist: httpx>=0.28.1
|
|
22
|
-
Requires-Dist: litellm
|
|
22
|
+
Requires-Dist: litellm>=1.75.3
|
|
23
23
|
Requires-Dist: loguru>=0.7.3
|
|
24
24
|
Requires-Dist: markdown2>=2.5.3
|
|
25
25
|
Requires-Dist: mcp>=1.7.1
|
|
@@ -38,7 +38,7 @@ Requires-Dist: pillow>=10.4.0
|
|
|
38
38
|
Requires-Dist: prometheus-client>=0.21.1
|
|
39
39
|
Requires-Dist: psutil>=6.1.1
|
|
40
40
|
Requires-Dist: pydantic-settings>=2.7.1
|
|
41
|
-
Requires-Dist: pydantic
|
|
41
|
+
Requires-Dist: pydantic>=2.10.5
|
|
42
42
|
Requires-Dist: python-box>=7.3.2
|
|
43
43
|
Requires-Dist: python-decouple>=3.8
|
|
44
44
|
Requires-Dist: python-dotenv>=1.0.1
|
|
@@ -118,16 +118,16 @@ No brittle prompts. No guesswork. Just reliable, testable AI agents.
|
|
|
118
118
|
## ⚡ Quick Start
|
|
119
119
|
|
|
120
120
|
```python
|
|
121
|
-
from flock.core import Flock,
|
|
121
|
+
from flock.core import Flock, DefaultAgent
|
|
122
122
|
|
|
123
123
|
# 1. Create the main orchestrator
|
|
124
124
|
my_flock = Flock(model="openai/gpt-4.1")
|
|
125
125
|
|
|
126
126
|
# 2. Declaratively define an agent
|
|
127
|
-
brainstorm_agent =
|
|
127
|
+
brainstorm_agent = DefaultAgent(
|
|
128
128
|
name="idea_generator",
|
|
129
129
|
input="topic",
|
|
130
|
-
output="catchy_title, key_points"
|
|
130
|
+
output="catchy_title, key_points",
|
|
131
131
|
)
|
|
132
132
|
|
|
133
133
|
# 3. Add the agent to the Flock
|
|
@@ -27,26 +27,27 @@ flock/cli/yaml_editor.py,sha256=K3N0bh61G1TSDAZDnurqW9e_-hO6CtSQKXQqlDhCjVo,1252
|
|
|
27
27
|
flock/cli/assets/release_notes.md,sha256=bqnk50jxM3w5uY44Dc7MkdT8XmRREFxrVBAG9XCOSSU,4896
|
|
28
28
|
flock/components/__init__.py,sha256=qDcaP0O7_b5RlUEXluqwskpKCkhM73kSMeNXReze63M,963
|
|
29
29
|
flock/components/evaluation/__init__.py,sha256=_M3UlRFeNN90fEny6byt5VdLDE5o5khbd0EPT0o9S9k,303
|
|
30
|
-
flock/components/evaluation/declarative_evaluation_component.py,sha256=
|
|
30
|
+
flock/components/evaluation/declarative_evaluation_component.py,sha256=OXuJlH7TTQAy3upg3K68oSr4cS89XlSty2GeM3l6fDs,11606
|
|
31
31
|
flock/components/routing/__init__.py,sha256=BH_pFm9T6bUuf8HH4byDJ0dO0fzEVHv9m-ghUdDVdm0,542
|
|
32
32
|
flock/components/routing/conditional_routing_component.py,sha256=WqZLMz-0Dhfb97xvttNrJCIVe6FNMLEQ2m4KQTDpIbI,21374
|
|
33
33
|
flock/components/routing/default_routing_component.py,sha256=ZHt2Kjf-GHB5n7evU5NSGeQJ1Wuims5soeMswqaUb1E,3370
|
|
34
34
|
flock/components/routing/llm_routing_component.py,sha256=SAaOFjlnhnenM6QEBn3WIpjjNXO-tFpP44TS73zvqzQ,7502
|
|
35
35
|
flock/components/utility/__init__.py,sha256=JRj932upddjzZMWs1avOupEFr_GZNu21ac66Rhw_XgY,532
|
|
36
|
-
flock/components/utility/memory_utility_component.py,sha256=
|
|
36
|
+
flock/components/utility/memory_utility_component.py,sha256=26Io61bbCGjD8UQ4BltMA5RLkMXp8tQoQmddXbQSrzA,20183
|
|
37
37
|
flock/components/utility/metrics_utility_component.py,sha256=u3Bys0dP7FmTeyZOi4XdMhZHCRYc5miXXJ690-qS1Us,24440
|
|
38
38
|
flock/components/utility/output_utility_component.py,sha256=c4K_PL3bGqdyy_v6dnOrmTqV-MkWKAB2w0HS8kzg82k,7613
|
|
39
|
-
flock/core/__init__.py,sha256=
|
|
39
|
+
flock/core/__init__.py,sha256=OkjsVjRkAB-I6ibeTKVikZ3MxLIcTIzWKphHTbzbr7s,3231
|
|
40
40
|
flock/core/flock.py,sha256=wRycQlGeaq-Vd75mFpPe02qyWTOEyXthT873iBhA3TI,23388
|
|
41
|
-
flock/core/flock_agent.py,sha256=
|
|
42
|
-
flock/core/flock_factory.py,sha256
|
|
41
|
+
flock/core/flock_agent.py,sha256=27dDaedYuaSAU85u9Qoaaaj0V4PX24FYrxjTIr63yjA,12776
|
|
42
|
+
flock/core/flock_factory.py,sha256=Z6GJpYXN9_DXuOqvBH9ir0SMoUw78DkWhrhkm90luAQ,20910
|
|
43
43
|
flock/core/flock_scheduler.py,sha256=ng_s7gyijmc-AmYvBn5rtg61CSUZiIkXPRSlA1xO6VQ,8766
|
|
44
44
|
flock/core/flock_server_manager.py,sha256=tM_nOs37vAbEvxmhwy_DL2JPvgFViWroNxrRSu5MfUQ,4523
|
|
45
45
|
flock/core/agent/__init__.py,sha256=l32KFMJnC_gidMXpAXK8-OX228bWOhNc8OY_NzXm59Q,515
|
|
46
|
+
flock/core/agent/default_agent.py,sha256=W5ewr4l4adjZjstcCvr6S8r2EnrmH0wFOVEtA8OQprI,6962
|
|
46
47
|
flock/core/agent/flock_agent_components.py,sha256=LamOgpRC7wDKuU3d6enDG0UFlNxyKPErLpH7SQ_Pi74,4539
|
|
47
48
|
flock/core/agent/flock_agent_execution.py,sha256=pdOddBGv8y1P89Ix8XFWa1eW9i3bWjOYiQQxeY2K0yo,4217
|
|
48
|
-
flock/core/agent/flock_agent_integration.py,sha256=
|
|
49
|
-
flock/core/agent/flock_agent_lifecycle.py,sha256=
|
|
49
|
+
flock/core/agent/flock_agent_integration.py,sha256=fnxzEA8-gIopHwD1de8QKt2A7Ilb1iH5Koxk1uiASas,10737
|
|
50
|
+
flock/core/agent/flock_agent_lifecycle.py,sha256=0E5gZXcV3ZiI2idalIslzpGe0pTu3Vqa5SXeng_h180,7882
|
|
50
51
|
flock/core/agent/flock_agent_serialization.py,sha256=U9UcX34G_ntT6O1pkiXKonc8bZWxQt-T3OWWxxqmwkk,16954
|
|
51
52
|
flock/core/api/__init__.py,sha256=KdzUwBOwhxqqy7lAMLpysKL5GvpIiwOy6CxXELZVWaY,186
|
|
52
53
|
flock/core/api/custom_endpoint.py,sha256=Mbk2owdcXVATaT5FtEWXFzllgursozcmqP8ouG5btc0,1305
|
|
@@ -63,19 +64,19 @@ flock/core/component/routing_component.py,sha256=gXUpMAf5Ty831FAQ20EAiAW8OkX8jjh
|
|
|
63
64
|
flock/core/component/utility_component.py,sha256=05DTltnp8-xNGOPVpmKIxG8ry0VNB3PjojOzLZMyrI0,2322
|
|
64
65
|
flock/core/config/flock_agent_config.py,sha256=5Y9vJKYEkhtjU6I-bJAJBh0eLDYjGdPar_sJ9wMP65A,2132
|
|
65
66
|
flock/core/config/scheduled_agent_config.py,sha256=3okCjpggJSKkc1Dp8ZJuQP010tQvN3dk8n_llbTc5aE,1506
|
|
66
|
-
flock/core/context/context.py,sha256=
|
|
67
|
+
flock/core/context/context.py,sha256=gIxcUJeiAx2tIGrOz-0oCNBXIM_ZCq7MEOndjuLUFzA,7734
|
|
67
68
|
flock/core/context/context_manager.py,sha256=FANSWa6DEhdhtZ7t_9Gza0v80UdpoDOhHbfVOccmjkA,1181
|
|
68
69
|
flock/core/context/context_vars.py,sha256=ASPA29hpENWub4mgRoG62FtTVakCHQZfn6IhJQKe3C8,347
|
|
69
70
|
flock/core/evaluation/utils.py,sha256=q3Z6PD6Ko9IY9S-aTV8vIwtG7GzyHFydrmtM9sHEpDM,15360
|
|
70
71
|
flock/core/execution/batch_executor.py,sha256=Qw3geig7ciCJJTFkayuKZikQ2iHC1Za4UlQCmIydqYg,15260
|
|
71
72
|
flock/core/execution/evaluation_executor.py,sha256=D2AwJXfcgFT1ir0pYdTFT6rug5H4Va-17bIVcy-v3nQ,17681
|
|
72
|
-
flock/core/execution/local_executor.py,sha256=
|
|
73
|
+
flock/core/execution/local_executor.py,sha256=cjnGQT_U5p6jKo5BGUQq5jT3T-GhPyjahMcu7BxL9rw,945
|
|
73
74
|
flock/core/execution/opik_executor.py,sha256=tlxsgweWXbIveE4vW_F9qFdUTfmHF45XfLz-Xx8n4xE,3319
|
|
74
|
-
flock/core/execution/temporal_executor.py,sha256=
|
|
75
|
+
flock/core/execution/temporal_executor.py,sha256=327JJ2iKLUXcjYR2ys_aYnIH2op-pnwp37XbCBlqh24,6298
|
|
75
76
|
flock/core/interpreter/python_interpreter.py,sha256=4-wRsxC6-gToEdRr_pp-n2idWwe_Y2zN0o3TbzUPhy0,26632
|
|
76
77
|
flock/core/logging/__init__.py,sha256=xn5fC-8IgsdIv0ywe_cICK1KVhTrVD8t-jYORg0ETUA,155
|
|
77
78
|
flock/core/logging/logging.py,sha256=y-V4XPxiwtWCjiAN_YoIRAUP1ialMSH_kT_TYircGjQ,19870
|
|
78
|
-
flock/core/logging/telemetry.py,sha256=
|
|
79
|
+
flock/core/logging/telemetry.py,sha256=2T_o5qjvWWGMEP3UmlF9pbiTr4HDUcojHNrAbsad0NU,7559
|
|
79
80
|
flock/core/logging/trace_and_logged.py,sha256=5vNrK1kxuPMoPJ0-QjQg-EDJL1oiEzvU6UNi6X8FiMs,2117
|
|
80
81
|
flock/core/logging/formatters/enum_builder.py,sha256=LgEYXUv84wK5vwHflZ5h8HBGgvLH3sByvUQe8tZiyY0,981
|
|
81
82
|
flock/core/logging/formatters/theme_builder.py,sha256=Wnaal3HuUDA4HFg9tdql1BxYwK83ACOZBBQy-DXnxcA,17342
|
|
@@ -86,11 +87,11 @@ flock/core/logging/telemetry_exporter/base_exporter.py,sha256=rQJJzS6q9n2aojoSqw
|
|
|
86
87
|
flock/core/logging/telemetry_exporter/file_exporter.py,sha256=nKAjJSZtA7FqHSTuTiFtYYepaxOq7l1rDvs8U8rSBlA,3023
|
|
87
88
|
flock/core/logging/telemetry_exporter/sqlite_exporter.py,sha256=CDsiMb9QcqeXelZ6ZqPSS56ovMPGqOu6whzBZRK__Vg,3498
|
|
88
89
|
flock/core/mcp/__init__.py,sha256=g3hzM_9ntsr-Af9dE9cCZEjQ9YX2jk7-Jm-0JcHSk1A,25
|
|
89
|
-
flock/core/mcp/flock_mcp_server.py,sha256=
|
|
90
|
-
flock/core/mcp/flock_mcp_tool.py,sha256=
|
|
90
|
+
flock/core/mcp/flock_mcp_server.py,sha256=kyJevS2Mwysjhxpv0x689XICrgFrxeYPxQlwQTDcGX8,27374
|
|
91
|
+
flock/core/mcp/flock_mcp_tool.py,sha256=eGwV8uo-AfvRjcrmOZCLvJAcgB3XKrvrQ7F6GZXF4nI,5494
|
|
91
92
|
flock/core/mcp/mcp_client.py,sha256=JqY_sAYjWCDrIJDOxy-bMqhXjb7kTPHlqxth8SYKr7g,25893
|
|
92
93
|
flock/core/mcp/mcp_client_manager.py,sha256=P-m3loDqPoH2UEW5VeNamgxtoPdZPiG4iPwZ4t28Ctw,8020
|
|
93
|
-
flock/core/mcp/mcp_config.py,sha256=
|
|
94
|
+
flock/core/mcp/mcp_config.py,sha256=ejVG8S4Z7nUlwwdGDrXM7TEjFK_In7nmvB9dEbP4vrw,17437
|
|
94
95
|
flock/core/mcp/types/__init__.py,sha256=YgEJvTXe5VfSMfJNlpefdBYJOmMbMWQsXzc_qmOAybg,25
|
|
95
96
|
flock/core/mcp/types/callbacks.py,sha256=M4dvL9-PUVmojPTK18fg8ngHqYd7AogMoO6HixM9q10,2494
|
|
96
97
|
flock/core/mcp/types/factories.py,sha256=T4fIyyJYibP8AGg_gjR1Pu5LO5xP5LsAfmBxyD6bBmY,3440
|
|
@@ -98,13 +99,13 @@ flock/core/mcp/types/handlers.py,sha256=VEpOx5ShvlvOEvgo2Fs5rql-x0obVQYgEpcb8FBr
|
|
|
98
99
|
flock/core/mcp/types/types.py,sha256=2amE-oastGe1GGVI4gbH2ltCX7QvYnJebSArATvttUU,11410
|
|
99
100
|
flock/core/mcp/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
100
101
|
flock/core/mcp/util/helpers.py,sha256=Xlf4iKW_lZxsVMTRoOnV29JsJfAppfmEJrb6sIcoCH4,636
|
|
101
|
-
flock/core/mixin/dspy_integration.py,sha256=
|
|
102
|
+
flock/core/mixin/dspy_integration.py,sha256=KN7ugTcTyqTVv2EzP1ohek4MDFqrI3nCUpNrNbRv46s,16444
|
|
102
103
|
flock/core/mixin/prompt_parser.py,sha256=eOqI-FK3y17gVqpc_y5GF-WmK1Jv8mFlkZxTcgweoxI,5121
|
|
103
104
|
flock/core/orchestration/__init__.py,sha256=zS3gvSeuAxhmXER7uCKjZuKl_FIJm8F_onGCAy_8elw,403
|
|
104
105
|
flock/core/orchestration/flock_batch_processor.py,sha256=2vqSOHd-Zk871UTai3jGXvITgcwSowaCNjvDkSWbkLg,3357
|
|
105
106
|
flock/core/orchestration/flock_evaluator.py,sha256=_Ctub0P5VOnePpaPQgb7Qw-gvJerns8uO8u2QVOyGYA,4082
|
|
106
|
-
flock/core/orchestration/flock_execution.py,sha256=
|
|
107
|
-
flock/core/orchestration/flock_initialization.py,sha256
|
|
107
|
+
flock/core/orchestration/flock_execution.py,sha256=70lo0Olm_sWEDqMuSpqeWyKZNV0d7ckekqG304ryb-g,11804
|
|
108
|
+
flock/core/orchestration/flock_initialization.py,sha256=-k2Xbqh6LcOJIF0OP6Y_ZV7tRN4q_XQMz_i7Iab8GN4,5850
|
|
108
109
|
flock/core/orchestration/flock_server_manager.py,sha256=idDds7QGsqneY21Y5oL9NHN7fz13FlPF4W1C5HsNhZE,2568
|
|
109
110
|
flock/core/orchestration/flock_web_server.py,sha256=uLTKW2pLf4vW3MqhrA2bl3K69zHRqRqcx6vkFZHRi70,3827
|
|
110
111
|
flock/core/registry/__init__.py,sha256=CWKLV1-lnIM1mQXbmZgyzbSFM177FDGeQDexfI5GDus,1324
|
|
@@ -123,11 +124,11 @@ flock/core/serialization/flock_serializer.py,sha256=xsv6Sg1HBbXG5-oyrPqBTbGRtzBe
|
|
|
123
124
|
flock/core/serialization/json_encoder.py,sha256=gAKj2zU_8wQiNvdkby2hksSA4fbPNwTjup_yz1Le1Vw,1229
|
|
124
125
|
flock/core/serialization/secure_serializer.py,sha256=n5-zRvvXddgJv1FFHsaQ2wuYdL3WUSGPvG_LGaffEJo,6144
|
|
125
126
|
flock/core/serialization/serializable.py,sha256=qlv8TsTqRuklXiNuCMrvro5VKz764xC2i3FlgLJSkdk,12129
|
|
126
|
-
flock/core/serialization/serialization_utils.py,sha256=
|
|
127
|
+
flock/core/serialization/serialization_utils.py,sha256=kxsuWy-8kFBcihHQvSOSNYp96ZPKxBMnasyRTtvIktY,15532
|
|
127
128
|
flock/core/util/cli_helper.py,sha256=w8N7UJZOdOFhkcUSSusnL22JDlmJGgWmH0DgO--j-5c,50057
|
|
128
129
|
flock/core/util/file_path_utils.py,sha256=Odf7uU32C-x1KNighbNERSiMtkzW4h8laABIoFK7A5M,6246
|
|
129
130
|
flock/core/util/hydrator.py,sha256=qRfVTDBEwqv1-ET2D4s5NI25f-UA_tGsoAmt5jaJMDI,10693
|
|
130
|
-
flock/core/util/input_resolver.py,sha256=
|
|
131
|
+
flock/core/util/input_resolver.py,sha256=t3C98xz_-LGnDH0YeWQyV8yKZrls-_ekOYR-IKrAXDs,6232
|
|
131
132
|
flock/core/util/loader.py,sha256=j3q2qem5bFMP2SmMuYjb-ISxsNGNZd1baQmpvAnRUUk,2244
|
|
132
133
|
flock/core/util/splitter.py,sha256=rDLnZX158PWkmW8vi2UfMLAMRXcHQFUIydAABd-lDGw,7154
|
|
133
134
|
flock/mcp/servers/sse/__init__.py,sha256=r6YtleRSOMJqKhTtKQeFKd3QDaUJVz9R1BGJgOm_PF8,51
|
|
@@ -546,12 +547,12 @@ flock/webapp/templates/partials/_theme_preview.html,sha256=THeMYTXzgzHJxzWqaTtUh
|
|
|
546
547
|
flock/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
547
548
|
flock/workflow/activities.py,sha256=iCGy_45YKUSrNEV89JyT7C4zOZyVEEvSYZUh3qSZR0E,8533
|
|
548
549
|
flock/workflow/agent_activities.py,sha256=NhBZscflEf2IMfSRa_pBM_TRP7uVEF_O0ROvWZ33eDc,963
|
|
549
|
-
flock/workflow/agent_execution_activity.py,sha256=
|
|
550
|
-
flock/workflow/flock_workflow.py,sha256=
|
|
550
|
+
flock/workflow/agent_execution_activity.py,sha256=0exwmeWKYXXxdUqDf4YaUVpn0zl06SdgUlVTeK-QVz8,7908
|
|
551
|
+
flock/workflow/flock_workflow.py,sha256=sKFsRIL_bDGonXSNhK1zwu6UechghC_PihJJMidI-VI,9139
|
|
551
552
|
flock/workflow/temporal_config.py,sha256=3_8O7SDEjMsSMXsWJBfnb6XTp0TFaz39uyzSlMTSF_I,3988
|
|
552
|
-
flock/workflow/temporal_setup.py,sha256=
|
|
553
|
-
flock_core-0.5.
|
|
554
|
-
flock_core-0.5.
|
|
555
|
-
flock_core-0.5.
|
|
556
|
-
flock_core-0.5.
|
|
557
|
-
flock_core-0.5.
|
|
553
|
+
flock/workflow/temporal_setup.py,sha256=KR6MlWOrpMtv8NyhaIPAsfl4tjobt81OBByQvg8Kw-Y,1948
|
|
554
|
+
flock_core-0.5.0b17.dist-info/METADATA,sha256=5ccnb7IKfldm855CT8LnKXxZj0pW0sG28oGdeZncTOA,9997
|
|
555
|
+
flock_core-0.5.0b17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
556
|
+
flock_core-0.5.0b17.dist-info/entry_points.txt,sha256=rWaS5KSpkTmWySURGFZk6PhbJ87TmvcFQDi2uzjlagQ,37
|
|
557
|
+
flock_core-0.5.0b17.dist-info/licenses/LICENSE,sha256=iYEqWy0wjULzM9GAERaybP4LBiPeu7Z1NEliLUdJKSc,1072
|
|
558
|
+
flock_core-0.5.0b17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|