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.

@@ -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, context: FlockContext) -> dict:
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
- # Set agent's context reference (transient, for this execution)
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
- context.get_last_agent_name()
71
- ) # Relies on context method
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(agent.input, context, previous_agent_name)
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, context: FlockContext
107
- ) -> dict | None:
108
- """Determines the next agent using the current agent's handoff router.
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
- Raises:
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 routing logic
149
- handoff_data: (
150
- HandOffRequest | Callable
151
- ) = await agent.router.route(agent, result, context)
152
-
153
- # Handle callable handoff functions - This is complex in distributed systems.
154
- # Consider if this pattern should be supported or if routing should always
155
- # return serializable data directly. Executing arbitrary code from context
156
- # within an activity can have side effects and security implications.
157
- # Assuming for now it MUST return HandOffRequest or structure convertible to it.
158
- if callable(handoff_data):
159
- logger.warning(
160
- "Callable handoff detected - executing function.",
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
- "Handoff determined",
209
- next_agent=handoff_data.next_agent,
184
+ "Next agent determined",
185
+ next_agent=next_name,
210
186
  agent=agent.name,
211
187
  )
212
- span.set_attribute("next_agent", handoff_data.next_agent)
213
- # Return the serializable HandOffRequest data using Pydantic's export method
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
@@ -118,13 +118,17 @@ class FlockWorkflow:
118
118
  )
119
119
 
120
120
  # --- Execute the current agent activity ---
121
- agent_result = await workflow.execute_activity(
122
- execute_single_agent,
123
- args=[current_agent_name, context],
124
- task_queue=activity_task_queue, # Use determined task queue
125
- start_to_close_timeout=activity_timeout, # Use determined timeout
126
- retry_policy=final_retry_policy, # Use determined retry policy
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 activity (using workflow defaults for now) ---
146
- # We could apply similar config logic to determine_next_agent if needed
147
- handoff_data_dict = await workflow.execute_activity(
148
- determine_next_agent,
149
- args=[current_agent_name, agent_result, context],
150
- # Using sensible defaults, but could be configured via workflow_config?
151
- start_to_close_timeout=timedelta(minutes=1),
152
- retry_policy=default_retry_config.to_temporalio_policy(), # Use default retry
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 handoff_data_dict:
159
- logger.debug(
160
- "Handoff data received", data=handoff_data_dict
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 = handoff_data_dict
168
+ context.history[-1].hand_off = {"next_agent": next_agent_name}
175
169
 
176
170
  # Set the next agent
177
- current_agent_name = handoff_request.next_agent
178
- if current_agent_name:
179
- context.set_variable(
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
- # No handoff data returned (no router or router returned None)
191
- logger.info("No handoff occurred, workflow terminating.")
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
- # or workflow logic errors
211
- logger.exception("Workflow execution failed", error=str(e))
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
  {
@@ -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
- # Consider making the address configurable
9
- client = await Client.connect("localhost:7233")
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.0b15
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==2.6.23
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[proxy]==v1.75.3
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==2.10.5
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, FlockFactory
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 = FlockFactory.create_default_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=xy0nzoawXm1HFVTNW0PSVUeUlt-nXxzA5gLexf7jgsE,8899
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=4Vpt6_McEPpN5lNTcXmj7JeZTBOT6rHI0uQE2Qy-3Gc,20103
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=CdHczlgrUYEJlKvErX3JbC9i7FAVX-SdwET4NEDfOfQ,3097
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=5n4Khlyc-xRaV65JFnCavNXeUCXMuL3PNS9T1tsTl7U,12023
42
- flock/core/flock_factory.py,sha256=-a4buSge2cdp1FwTjer283wbamSEyLeUQs_-MeM-S2Y,20049
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=JseDY72KaMPQAeMqGlvPpCtcfYR2iFr3UDYTWDDH0To,8285
49
- flock/core/agent/flock_agent_lifecycle.py,sha256=msGKSNVRwV70_UvKBFLpdnLkTfvTu5FKJIMVZQC59NE,7292
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=zdQuB1YWPJmQVv_2_sm1HK7FSnusa3Jl-83PcTuaLUk,7791
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=rnIQvaJOs6zZORUcR3vvyS6LPREDJTjaygl_Db0M8ao,952
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=dHcb0xuzPFWU_wbwTgI7glLNyyppei93Txs2sapjhaw,6283
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=5hz48PClJgB4l2eatS5eNR9Qswv3wYVVfl5ZWeJWm3E,7471
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=Mkcod8l9jakljXDnnZQrw8JDynQ6LkAUSqJRmTsc76Y,26359
90
- flock/core/mcp/flock_mcp_tool.py,sha256=Ed2aALKyV1ivZBbT11txUIlV-8ucssBKSbH3LmLllEI,6796
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=1cEC3u1JICXuXrGyffirAGcqNR1wdxUZG6hIKzGqHrw,16479
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=jS_hJvDK3YReyI5Y9tmNQQrVdW1t1zFtnDqjRVQovPo,17720
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=NNzihOCdHfSp1XWQa_yMKbrO4ah58Sk2c7TQviakdYg,11416
107
- flock/core/orchestration/flock_initialization.py,sha256=7tz2eDuQXcFET5Q6tb5moDIzvW-AMu3jdpA-LjyhCT4,4578
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=_TvGJw5zLP-asJxtAGJ65nqWNlLSEzeCSe2N-4JAST8,15283
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=XNQlx0zRyAIkeVY4SSpfDnpyGQThsEwp3aj_ylv1hjo,5765
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=CzTkbjGqrPoAbldaQOS_doesosDK9mT04M8cbtvP5ps,9432
550
- flock/workflow/flock_workflow.py,sha256=ZhAF82ewNRY2vvDjNpXT1D9lCVQsLOSMTaZVzdcogJc,9674
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=YIHnSBntzOchHfMSh8hoLeNXrz3B1UbR14YrR6soM7A,1606
553
- flock_core-0.5.0b15.dist-info/METADATA,sha256=4gCI7ya_Gy5QeHKEDArbDyYDFLV2ksmJztbHR7C_q7g,10026
554
- flock_core-0.5.0b15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
555
- flock_core-0.5.0b15.dist-info/entry_points.txt,sha256=rWaS5KSpkTmWySURGFZk6PhbJ87TmvcFQDi2uzjlagQ,37
556
- flock_core-0.5.0b15.dist-info/licenses/LICENSE,sha256=iYEqWy0wjULzM9GAERaybP4LBiPeu7Z1NEliLUdJKSc,1072
557
- flock_core-0.5.0b15.dist-info/RECORD,,
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,,