flock-core 0.4.0b30__py3-none-any.whl → 0.4.0b32__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/core/flock_agent.py +4 -0
- flock/core/mixin/dspy_integration.py +45 -57
- flock/core/util/input_resolver.py +1 -54
- flock/core/util/spliter.py +126 -0
- {flock_core-0.4.0b30.dist-info → flock_core-0.4.0b32.dist-info}/METADATA +1 -1
- {flock_core-0.4.0b30.dist-info → flock_core-0.4.0b32.dist-info}/RECORD +9 -8
- {flock_core-0.4.0b30.dist-info → flock_core-0.4.0b32.dist-info}/WHEEL +0 -0
- {flock_core-0.4.0b30.dist-info → flock_core-0.4.0b32.dist-info}/entry_points.txt +0 -0
- {flock_core-0.4.0b30.dist-info → flock_core-0.4.0b32.dist-info}/licenses/LICENSE +0 -0
flock/core/flock_agent.py
CHANGED
|
@@ -239,6 +239,10 @@ class FlockAgent(BaseModel, Serializable, DSPyIntegrationMixin, ABC):
|
|
|
239
239
|
if self.write_to_file:
|
|
240
240
|
self._save_output(self.name, result)
|
|
241
241
|
|
|
242
|
+
if self.wait_for_input:
|
|
243
|
+
# simple input prompt
|
|
244
|
+
input("Press Enter to continue...")
|
|
245
|
+
|
|
242
246
|
except Exception as module_error:
|
|
243
247
|
logger.error(
|
|
244
248
|
"Error during terminate",
|
|
@@ -6,6 +6,7 @@ import typing
|
|
|
6
6
|
from typing import Any, Literal
|
|
7
7
|
|
|
8
8
|
from flock.core.logging.logging import get_logger
|
|
9
|
+
from flock.core.util.spliter import split_top_level
|
|
9
10
|
|
|
10
11
|
# Import split_top_level (assuming it's moved or copied appropriately)
|
|
11
12
|
# Option 1: If moved to a shared util
|
|
@@ -19,48 +20,6 @@ logger = get_logger("mixin.dspy")
|
|
|
19
20
|
AgentType = Literal["ReAct", "Completion", "ChainOfThought"] | None
|
|
20
21
|
|
|
21
22
|
|
|
22
|
-
# Helper function needed by _resolve_type_string (copied from input_resolver.py/previous response)
|
|
23
|
-
def split_top_level(s: str) -> list[str]:
|
|
24
|
-
"""Split a string on commas that are not enclosed within brackets, parentheses, or quotes."""
|
|
25
|
-
parts = []
|
|
26
|
-
current = []
|
|
27
|
-
level = 0
|
|
28
|
-
in_quote = False
|
|
29
|
-
quote_char = ""
|
|
30
|
-
i = 0
|
|
31
|
-
while i < len(s):
|
|
32
|
-
char = s[i]
|
|
33
|
-
# Handle escapes within quotes
|
|
34
|
-
if in_quote and char == "\\" and i + 1 < len(s):
|
|
35
|
-
current.append(char)
|
|
36
|
-
current.append(s[i + 1])
|
|
37
|
-
i += 1 # Skip next char
|
|
38
|
-
elif in_quote:
|
|
39
|
-
current.append(char)
|
|
40
|
-
if char == quote_char:
|
|
41
|
-
in_quote = False
|
|
42
|
-
elif char in ('"', "'"):
|
|
43
|
-
in_quote = True
|
|
44
|
-
quote_char = char
|
|
45
|
-
current.append(char)
|
|
46
|
-
elif char in "([{":
|
|
47
|
-
level += 1
|
|
48
|
-
current.append(char)
|
|
49
|
-
elif char in ")]}":
|
|
50
|
-
level -= 1
|
|
51
|
-
current.append(char)
|
|
52
|
-
elif char == "," and level == 0:
|
|
53
|
-
parts.append("".join(current).strip())
|
|
54
|
-
current = []
|
|
55
|
-
else:
|
|
56
|
-
current.append(char)
|
|
57
|
-
i += 1
|
|
58
|
-
if current:
|
|
59
|
-
parts.append("".join(current).strip())
|
|
60
|
-
# Filter out empty strings that might result from trailing commas etc.
|
|
61
|
-
return [part for part in parts if part]
|
|
62
|
-
|
|
63
|
-
|
|
64
23
|
# Helper function to resolve type strings (can be static or module-level)
|
|
65
24
|
def _resolve_type_string(type_str: str) -> type:
|
|
66
25
|
"""Resolves a type string into a Python type object.
|
|
@@ -93,20 +52,26 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
93
52
|
if generic_match:
|
|
94
53
|
base_name = generic_match.group(1).strip()
|
|
95
54
|
args_str = generic_match.group(2).strip()
|
|
96
|
-
logger.debug(
|
|
55
|
+
logger.debug(
|
|
56
|
+
f"Detected generic pattern: Base='{base_name}', Args='{args_str}'"
|
|
57
|
+
)
|
|
97
58
|
|
|
98
59
|
try:
|
|
99
60
|
# Get the base generic type (e.g., list, dict, Optional) from registry/builtins
|
|
100
61
|
BaseType = FlockRegistry.get_type(
|
|
101
62
|
base_name
|
|
102
63
|
) # Expects List, Dict etc. to be registered
|
|
103
|
-
logger.debug(
|
|
64
|
+
logger.debug(
|
|
65
|
+
f"Resolved base generic type '{base_name}' to: {BaseType}"
|
|
66
|
+
)
|
|
104
67
|
|
|
105
68
|
# Special handling for Literal
|
|
106
69
|
if BaseType is typing.Literal:
|
|
107
70
|
# Split literal values, remove quotes, strip whitespace
|
|
108
71
|
literal_args_raw = split_top_level(args_str)
|
|
109
|
-
literal_args = tuple(
|
|
72
|
+
literal_args = tuple(
|
|
73
|
+
s.strip().strip("'\"") for s in literal_args_raw
|
|
74
|
+
)
|
|
110
75
|
logger.debug(
|
|
111
76
|
f"Parsing Literal arguments: {literal_args_raw} -> {literal_args}"
|
|
112
77
|
)
|
|
@@ -121,7 +86,9 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
121
86
|
if not arg_strs:
|
|
122
87
|
raise ValueError("Generic type has no arguments.")
|
|
123
88
|
|
|
124
|
-
resolved_arg_types = tuple(
|
|
89
|
+
resolved_arg_types = tuple(
|
|
90
|
+
_resolve_type_string(arg) for arg in arg_strs
|
|
91
|
+
)
|
|
125
92
|
logger.debug(f"Resolved generic arguments: {resolved_arg_types}")
|
|
126
93
|
|
|
127
94
|
# Construct the generic type hint
|
|
@@ -129,7 +96,9 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
129
96
|
if len(resolved_arg_types) != 1:
|
|
130
97
|
raise ValueError("Optional requires exactly one argument.")
|
|
131
98
|
resolved_type = typing.Union[resolved_arg_types[0], type(None)] # type: ignore
|
|
132
|
-
logger.debug(
|
|
99
|
+
logger.debug(
|
|
100
|
+
f"Constructed Optional type as Union: {resolved_type}"
|
|
101
|
+
)
|
|
133
102
|
return resolved_type
|
|
134
103
|
elif BaseType is typing.Union:
|
|
135
104
|
if not resolved_arg_types:
|
|
@@ -141,7 +110,9 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
141
110
|
BaseType, "__getitem__"
|
|
142
111
|
): # Check if subscriptable (like list, dict, List, Dict)
|
|
143
112
|
resolved_type = BaseType[resolved_arg_types] # type: ignore
|
|
144
|
-
logger.debug(
|
|
113
|
+
logger.debug(
|
|
114
|
+
f"Constructed subscripted generic type: {resolved_type}"
|
|
115
|
+
)
|
|
145
116
|
return resolved_type
|
|
146
117
|
else:
|
|
147
118
|
# Base type found but cannot be subscripted
|
|
@@ -221,7 +192,8 @@ class DSPyIntegrationMixin:
|
|
|
221
192
|
if not fields_string or not fields_string.strip():
|
|
222
193
|
return
|
|
223
194
|
|
|
224
|
-
|
|
195
|
+
split_fields = split_top_level(fields_string)
|
|
196
|
+
for field in split_fields:
|
|
225
197
|
if field.strip():
|
|
226
198
|
parsed = parse_field(field)
|
|
227
199
|
if not parsed:
|
|
@@ -232,11 +204,15 @@ class DSPyIntegrationMixin:
|
|
|
232
204
|
)
|
|
233
205
|
|
|
234
206
|
FieldClass = (
|
|
235
|
-
dspy.InputField
|
|
207
|
+
dspy.InputField
|
|
208
|
+
if field_kind == "input"
|
|
209
|
+
else dspy.OutputField
|
|
236
210
|
)
|
|
237
211
|
# DSPy Fields use 'desc' for description
|
|
238
212
|
class_dict[name] = (
|
|
239
|
-
FieldClass(desc=desc)
|
|
213
|
+
FieldClass(desc=desc)
|
|
214
|
+
if desc is not None
|
|
215
|
+
else FieldClass()
|
|
240
216
|
)
|
|
241
217
|
|
|
242
218
|
try:
|
|
@@ -247,11 +223,15 @@ class DSPyIntegrationMixin:
|
|
|
247
223
|
f"Error processing fields for DSPy signature '{agent_name}': {e}",
|
|
248
224
|
exc_info=True,
|
|
249
225
|
)
|
|
250
|
-
raise ValueError(
|
|
226
|
+
raise ValueError(
|
|
227
|
+
f"Could not process fields for signature: {e}"
|
|
228
|
+
) from e
|
|
251
229
|
|
|
252
230
|
# Create and return the dynamic class
|
|
253
231
|
try:
|
|
254
|
-
DynamicSignature = type(
|
|
232
|
+
DynamicSignature = type(
|
|
233
|
+
"dspy_" + agent_name, (base_class,), class_dict
|
|
234
|
+
)
|
|
255
235
|
logger.info(
|
|
256
236
|
f"Successfully created DSPy Signature: {DynamicSignature.__name__} "
|
|
257
237
|
f"with fields: {DynamicSignature.__annotations__}"
|
|
@@ -324,7 +304,9 @@ class DSPyIntegrationMixin:
|
|
|
324
304
|
try:
|
|
325
305
|
import dspy
|
|
326
306
|
except ImportError:
|
|
327
|
-
logger.error(
|
|
307
|
+
logger.error(
|
|
308
|
+
"DSPy library is not installed. Cannot select DSPy task."
|
|
309
|
+
)
|
|
328
310
|
raise ImportError("DSPy is required for this functionality.")
|
|
329
311
|
|
|
330
312
|
processed_tools = []
|
|
@@ -343,7 +325,9 @@ class DSPyIntegrationMixin:
|
|
|
343
325
|
|
|
344
326
|
# Determine type if not overridden
|
|
345
327
|
if not selected_type:
|
|
346
|
-
selected_type =
|
|
328
|
+
selected_type = (
|
|
329
|
+
"ReAct" if processed_tools else "Predict"
|
|
330
|
+
) # Default logic
|
|
347
331
|
|
|
348
332
|
logger.debug(
|
|
349
333
|
f"Selecting DSPy program type: {selected_type} (Tools provided: {bool(processed_tools)})"
|
|
@@ -366,7 +350,9 @@ class DSPyIntegrationMixin:
|
|
|
366
350
|
)
|
|
367
351
|
dspy_program = dspy.Predict(signature)
|
|
368
352
|
|
|
369
|
-
logger.info(
|
|
353
|
+
logger.info(
|
|
354
|
+
f"Instantiated DSPy program: {type(dspy_program).__name__}"
|
|
355
|
+
)
|
|
370
356
|
return dspy_program
|
|
371
357
|
except Exception as e:
|
|
372
358
|
logger.error(
|
|
@@ -390,7 +376,9 @@ class DSPyIntegrationMixin:
|
|
|
390
376
|
output_dict = dict(result.items())
|
|
391
377
|
elif hasattr(result, "__dict__"): # Fallback for other object types
|
|
392
378
|
output_dict = {
|
|
393
|
-
k: v
|
|
379
|
+
k: v
|
|
380
|
+
for k, v in result.__dict__.items()
|
|
381
|
+
if not k.startswith("_")
|
|
394
382
|
}
|
|
395
383
|
else:
|
|
396
384
|
# If it's already a dict (less common for DSPy results directly)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Utility functions for resolving input keys to their corresponding values."""
|
|
2
2
|
|
|
3
3
|
from flock.core.context.context import FlockContext
|
|
4
|
+
from flock.core.util.spliter import split_top_level
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def get_callable_members(obj):
|
|
@@ -22,60 +23,6 @@ def get_callable_members(obj):
|
|
|
22
23
|
return callables
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
def split_top_level(s: str) -> list[str]:
|
|
26
|
-
"""Split a string on commas that are not enclosed within brackets, parentheses, or quotes.
|
|
27
|
-
|
|
28
|
-
This function iterates over the string while keeping track of the nesting level. It
|
|
29
|
-
only splits on commas when the nesting level is zero. It also properly handles quoted
|
|
30
|
-
substrings.
|
|
31
|
-
|
|
32
|
-
Args:
|
|
33
|
-
s (str): The input string.
|
|
34
|
-
|
|
35
|
-
Returns:
|
|
36
|
-
List[str]: A list of substrings split at top-level commas.
|
|
37
|
-
"""
|
|
38
|
-
parts = []
|
|
39
|
-
current = []
|
|
40
|
-
level = 0
|
|
41
|
-
in_quote = False
|
|
42
|
-
quote_char = ""
|
|
43
|
-
|
|
44
|
-
for char in s:
|
|
45
|
-
# If inside a quote, only exit when the matching quote is found.
|
|
46
|
-
if in_quote:
|
|
47
|
-
current.append(char)
|
|
48
|
-
if char == quote_char:
|
|
49
|
-
in_quote = False
|
|
50
|
-
elif char == "\\":
|
|
51
|
-
# Include escape sequences
|
|
52
|
-
continue
|
|
53
|
-
continue
|
|
54
|
-
|
|
55
|
-
# Check for the start of a quote.
|
|
56
|
-
if char in ('"', "'"):
|
|
57
|
-
in_quote = True
|
|
58
|
-
quote_char = char
|
|
59
|
-
current.append(char)
|
|
60
|
-
continue
|
|
61
|
-
|
|
62
|
-
# Track nesting.
|
|
63
|
-
if char in "([{":
|
|
64
|
-
level += 1
|
|
65
|
-
elif char in ")]}":
|
|
66
|
-
level -= 1
|
|
67
|
-
|
|
68
|
-
# Split on commas if not nested.
|
|
69
|
-
if char == "," and level == 0:
|
|
70
|
-
parts.append("".join(current).strip())
|
|
71
|
-
current = []
|
|
72
|
-
else:
|
|
73
|
-
current.append(char)
|
|
74
|
-
if current:
|
|
75
|
-
parts.append("".join(current).strip())
|
|
76
|
-
return parts
|
|
77
|
-
|
|
78
|
-
|
|
79
26
|
def _parse_keys(keys: list[str]) -> list[str]:
|
|
80
27
|
"""Split a comma‐separated string and strip any type annotations.
|
|
81
28
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def split_top_level(spec: str) -> list[str]:
|
|
5
|
+
"""Split *spec* on commas that are truly between fields (i.e. that
|
|
6
|
+
are **not** inside brackets, braces, parentheses, string literals,
|
|
7
|
+
or the free-form description).
|
|
8
|
+
|
|
9
|
+
Strategy
|
|
10
|
+
--------
|
|
11
|
+
1. Single pass, char-by-char.
|
|
12
|
+
2. Track • nesting depth for (), [], {}
|
|
13
|
+
• whether we are inside a quoted string
|
|
14
|
+
3. Consider a comma a separator *only* if depth == 0, we are not
|
|
15
|
+
inside quotes **and** the text that follows matches
|
|
16
|
+
`optional-ws + identifier + optional-ws + ':'`
|
|
17
|
+
which can only be the start of the next field.
|
|
18
|
+
"""
|
|
19
|
+
fields: list[str] = []
|
|
20
|
+
start = 0
|
|
21
|
+
depth = 0
|
|
22
|
+
quote_char: str | None = None
|
|
23
|
+
i = 0
|
|
24
|
+
ident_re = re.compile(r"[A-Za-z_]\w*") # cheap Python identifier
|
|
25
|
+
|
|
26
|
+
while i < len(spec):
|
|
27
|
+
ch = spec[i]
|
|
28
|
+
|
|
29
|
+
# ---------------- string handling ----------------
|
|
30
|
+
if quote_char:
|
|
31
|
+
if ch == quote_char:
|
|
32
|
+
quote_char = None
|
|
33
|
+
i += 1
|
|
34
|
+
continue
|
|
35
|
+
|
|
36
|
+
if ch in {"'", '"'}:
|
|
37
|
+
# treat as string delimiter only in places regular Python would
|
|
38
|
+
prev = spec[i - 1] if i else " "
|
|
39
|
+
if depth or prev.isspace() or prev in "=([{,:": # likely a quote
|
|
40
|
+
quote_char = ch
|
|
41
|
+
i += 1
|
|
42
|
+
continue
|
|
43
|
+
|
|
44
|
+
# ---------------- bracket / brace / paren ----------------
|
|
45
|
+
if ch in "([{":
|
|
46
|
+
depth += 1
|
|
47
|
+
i += 1
|
|
48
|
+
continue
|
|
49
|
+
if ch in ")]}":
|
|
50
|
+
depth = max(depth - 1, 0)
|
|
51
|
+
i += 1
|
|
52
|
+
continue
|
|
53
|
+
|
|
54
|
+
# ---------------- field separators ----------------
|
|
55
|
+
if ch == "," and depth == 0:
|
|
56
|
+
j = i + 1
|
|
57
|
+
while j < len(spec) and spec[j].isspace():
|
|
58
|
+
j += 1
|
|
59
|
+
if j < len(spec):
|
|
60
|
+
id_match = ident_re.match(spec, j)
|
|
61
|
+
if id_match:
|
|
62
|
+
k = id_match.end()
|
|
63
|
+
while k < len(spec) and spec[k].isspace():
|
|
64
|
+
k += 1
|
|
65
|
+
if k < len(spec) and spec[k] == ":":
|
|
66
|
+
# confirmed: the comma ends the current field
|
|
67
|
+
fields.append(spec[start:i].strip())
|
|
68
|
+
start = i + 1
|
|
69
|
+
i += 1
|
|
70
|
+
continue
|
|
71
|
+
|
|
72
|
+
i += 1
|
|
73
|
+
|
|
74
|
+
fields.append(spec[start:].strip())
|
|
75
|
+
return [f for f in fields if f] # prune empties
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def parse_schema(spec: str) -> list[tuple[str, str, str]]:
|
|
79
|
+
"""Turn the raw *spec* into List[(name, python_type, description)]."""
|
|
80
|
+
result: list[tuple[str, str, str]] = []
|
|
81
|
+
|
|
82
|
+
for field in split_top_level(spec):
|
|
83
|
+
if ":" not in field:
|
|
84
|
+
raise ValueError(f"Malformed field (missing ':'): {field!r}")
|
|
85
|
+
|
|
86
|
+
name_part, rest = field.split(":", 1)
|
|
87
|
+
name = name_part.strip()
|
|
88
|
+
|
|
89
|
+
type_part, _, desc_part = rest.partition("|")
|
|
90
|
+
type_str = type_part.strip()
|
|
91
|
+
description = desc_part.strip()
|
|
92
|
+
|
|
93
|
+
result.append((name, type_str, description))
|
|
94
|
+
|
|
95
|
+
return result
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# ------------------------------ demo ------------------------------
|
|
99
|
+
if __name__ == "__main__":
|
|
100
|
+
SAMPLE_1 = (
|
|
101
|
+
" name: str | The character's full name,"
|
|
102
|
+
"race: str | The character's fantasy race,"
|
|
103
|
+
"class: Literal['mage','thief'] | The character's profession,"
|
|
104
|
+
"background: str | A brief backstory for the character"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
SAMPLE_2 = (
|
|
108
|
+
"field_with_internal_quotes: Literal['type_A', "
|
|
109
|
+
'"type_B_with_\'_apostrophe"] | A literal with mixed quotes,'
|
|
110
|
+
" another_field: str"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
print(f"Sample 1: {SAMPLE_1}")
|
|
114
|
+
print(f"Sample 2: {SAMPLE_2}")
|
|
115
|
+
|
|
116
|
+
print("\nSplitting Sample 1:")
|
|
117
|
+
split_sample_1 = split_top_level(SAMPLE_1)
|
|
118
|
+
print(split_sample_1)
|
|
119
|
+
for field in split_sample_1:
|
|
120
|
+
print(parse_schema(field))
|
|
121
|
+
|
|
122
|
+
print("\nSplitting Sample 2:")
|
|
123
|
+
split_sample_2 = split_top_level(SAMPLE_2)
|
|
124
|
+
print(split_sample_2)
|
|
125
|
+
for field in split_sample_2:
|
|
126
|
+
print(parse_schema(field))
|
|
@@ -20,7 +20,7 @@ flock/cli/yaml_editor.py,sha256=K3N0bh61G1TSDAZDnurqW9e_-hO6CtSQKXQqlDhCjVo,1252
|
|
|
20
20
|
flock/cli/assets/release_notes.md,sha256=bqnk50jxM3w5uY44Dc7MkdT8XmRREFxrVBAG9XCOSSU,4896
|
|
21
21
|
flock/core/__init__.py,sha256=p7lmQULRu9ejIAELfanZiyMhW0CougIPvyFHW2nqBFQ,847
|
|
22
22
|
flock/core/flock.py,sha256=_T_KAFePtEGDzfiFGV1HCdz7VHzj_U0cCquhAQ4xMAM,28199
|
|
23
|
-
flock/core/flock_agent.py,sha256=
|
|
23
|
+
flock/core/flock_agent.py,sha256=VXNsnsiqsMvrVsTZBNPCa7qCH3LdzvGKg3-mKO-Hj64,39227
|
|
24
24
|
flock/core/flock_evaluator.py,sha256=dOXZeDOGZcAmJ9ahqq_2bdGUU1VOXY4skmwTVpAjiVw,1685
|
|
25
25
|
flock/core/flock_factory.py,sha256=_4zsjkEmJnCR7IvJ3SUHnDbX6c7Tt3E4P5ohxwKvE6w,3173
|
|
26
26
|
flock/core/flock_module.py,sha256=2MdAh-n0o4uw7jogvW9iHjVPUawUNN1oGor5ego3RLI,3057
|
|
@@ -56,7 +56,7 @@ flock/core/logging/span_middleware/baggage_span_processor.py,sha256=gJfRl8FeB6jd
|
|
|
56
56
|
flock/core/logging/telemetry_exporter/base_exporter.py,sha256=rQJJzS6q9n2aojoSqwCnl7ZtHrh5LZZ-gkxUuI5WfrQ,1124
|
|
57
57
|
flock/core/logging/telemetry_exporter/file_exporter.py,sha256=nKAjJSZtA7FqHSTuTiFtYYepaxOq7l1rDvs8U8rSBlA,3023
|
|
58
58
|
flock/core/logging/telemetry_exporter/sqlite_exporter.py,sha256=CDsiMb9QcqeXelZ6ZqPSS56ovMPGqOu6whzBZRK__Vg,3498
|
|
59
|
-
flock/core/mixin/dspy_integration.py,sha256=
|
|
59
|
+
flock/core/mixin/dspy_integration.py,sha256=ITT3L9U6VlEG5qty39pED1icNinsbLOh59kjc4HRl34,16403
|
|
60
60
|
flock/core/mixin/prompt_parser.py,sha256=eOqI-FK3y17gVqpc_y5GF-WmK1Jv8mFlkZxTcgweoxI,5121
|
|
61
61
|
flock/core/serialization/__init__.py,sha256=CML7fPgG6p4c0CDBlJ_uwV1aZZhJKK9uy3IoIHfO87w,431
|
|
62
62
|
flock/core/serialization/callable_registry.py,sha256=sUZECTZWsM3fJ8FDRQ-FgLNW9hF26nY17AD6fJKADMc,1419
|
|
@@ -74,8 +74,9 @@ flock/core/tools/dev_tools/github.py,sha256=a2OTPXS7kWOVA4zrZHynQDcsmEi4Pac5MfSj
|
|
|
74
74
|
flock/core/util/cli_helper.py,sha256=Q8GFizNKiMW3wMJwIOobR6ldP40wYCdcNqTgD5z4sPo,49951
|
|
75
75
|
flock/core/util/file_path_utils.py,sha256=Odf7uU32C-x1KNighbNERSiMtkzW4h8laABIoFK7A5M,6246
|
|
76
76
|
flock/core/util/hydrator.py,sha256=QJvCA8F4nkSP5akp3yg0cT6oaajOr1n7sldW5dCs6Lo,10733
|
|
77
|
-
flock/core/util/input_resolver.py,sha256=
|
|
77
|
+
flock/core/util/input_resolver.py,sha256=KPoPSpklyCoiR2t5r6J6GJHegmPLFZ0YE126VcKBewM,4703
|
|
78
78
|
flock/core/util/loader.py,sha256=j3q2qem5bFMP2SmMuYjb-ISxsNGNZd1baQmpvAnRUUk,2244
|
|
79
|
+
flock/core/util/spliter.py,sha256=qGGbz2UN6v0nATymDzD_G656mWS9dXHrfQoore-lw9M,4027
|
|
79
80
|
flock/evaluators/declarative/declarative_evaluator.py,sha256=q3qKHuKrj17mhaoOZuKh2HyVfiDBEEUk1Y1ZrejvggA,6328
|
|
80
81
|
flock/evaluators/memory/memory_evaluator.py,sha256=ySwz7kcc8suXMJ7gKNSWThW8iOMlE8lUcUzEAHvv8rw,3559
|
|
81
82
|
flock/evaluators/test/test_case_evaluator.py,sha256=3Emcoty0LOLLBIuPGxSpKphuZC9Fu1DTr1vbGg-hd0Q,1233
|
|
@@ -444,8 +445,8 @@ flock/workflow/agent_execution_activity.py,sha256=Gy6FtuVAjf0NiUXmC3syS2eJpNQF4R
|
|
|
444
445
|
flock/workflow/flock_workflow.py,sha256=iSUF_soFvWar0ffpkzE4irkDZRx0p4HnwmEBi_Ne2sY,9666
|
|
445
446
|
flock/workflow/temporal_config.py,sha256=3_8O7SDEjMsSMXsWJBfnb6XTp0TFaz39uyzSlMTSF_I,3988
|
|
446
447
|
flock/workflow/temporal_setup.py,sha256=YIHnSBntzOchHfMSh8hoLeNXrz3B1UbR14YrR6soM7A,1606
|
|
447
|
-
flock_core-0.4.
|
|
448
|
-
flock_core-0.4.
|
|
449
|
-
flock_core-0.4.
|
|
450
|
-
flock_core-0.4.
|
|
451
|
-
flock_core-0.4.
|
|
448
|
+
flock_core-0.4.0b32.dist-info/METADATA,sha256=XEuCjPQqyIbUkZHfPKCt-wRNAbArW9Yxj-3RxXIvwNM,17125
|
|
449
|
+
flock_core-0.4.0b32.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
450
|
+
flock_core-0.4.0b32.dist-info/entry_points.txt,sha256=rWaS5KSpkTmWySURGFZk6PhbJ87TmvcFQDi2uzjlagQ,37
|
|
451
|
+
flock_core-0.4.0b32.dist-info/licenses/LICENSE,sha256=iYEqWy0wjULzM9GAERaybP4LBiPeu7Z1NEliLUdJKSc,1072
|
|
452
|
+
flock_core-0.4.0b32.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|