flowcept 0.9.16__py3-none-any.whl → 0.9.18__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.
- flowcept/agents/agents_utils.py +42 -0
- flowcept/agents/flowcept_agent.py +4 -1
- flowcept/agents/flowcept_ctx_manager.py +99 -36
- flowcept/agents/gui/gui_utils.py +21 -3
- flowcept/agents/prompts/general_prompts.py +1 -1
- flowcept/agents/prompts/in_memory_query_prompts.py +158 -45
- flowcept/agents/tools/general_tools.py +20 -3
- flowcept/agents/tools/in_memory_queries/in_memory_queries_tools.py +14 -31
- flowcept/commons/daos/docdb_dao/lmdb_dao.py +48 -0
- flowcept/commons/daos/mq_dao/mq_dao_kafka.py +2 -2
- flowcept/commons/daos/mq_dao/mq_dao_redis.py +33 -2
- flowcept/commons/flowcept_dataclasses/task_object.py +4 -1
- flowcept/configs.py +4 -1
- flowcept/flowcept_api/flowcept_controller.py +5 -1
- flowcept/flowceptor/adapters/mlflow/interception_event_handler.py +36 -2
- flowcept/flowceptor/adapters/mlflow/mlflow_interceptor.py +22 -7
- flowcept/flowceptor/adapters/tensorboard/tensorboard_interceptor.py +7 -1
- flowcept/flowceptor/consumers/agent/base_agent_context_manager.py +7 -8
- flowcept/instrumentation/flowcept_task.py +147 -51
- flowcept/instrumentation/task_capture.py +10 -1
- flowcept/version.py +1 -1
- {flowcept-0.9.16.dist-info → flowcept-0.9.18.dist-info}/METADATA +10 -2
- {flowcept-0.9.16.dist-info → flowcept-0.9.18.dist-info}/RECORD +27 -27
- {flowcept-0.9.16.dist-info → flowcept-0.9.18.dist-info}/WHEEL +1 -1
- resources/sample_settings.yaml +2 -1
- {flowcept-0.9.16.dist-info → flowcept-0.9.18.dist-info}/entry_points.txt +0 -0
- {flowcept-0.9.16.dist-info → flowcept-0.9.18.dist-info}/licenses/LICENSE +0 -0
|
@@ -5,16 +5,22 @@ from time import time
|
|
|
5
5
|
import inspect
|
|
6
6
|
from functools import wraps
|
|
7
7
|
import argparse
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
)
|
|
8
|
+
|
|
9
|
+
from flowcept.commons.flowcept_dataclasses.task_object import TaskObject
|
|
11
10
|
from flowcept.commons.vocabulary import Status
|
|
12
11
|
from flowcept.commons.flowcept_logger import FlowceptLogger
|
|
13
12
|
|
|
14
13
|
from flowcept.commons.utils import replace_non_serializable
|
|
15
|
-
from flowcept.configs import
|
|
14
|
+
from flowcept.configs import (
|
|
15
|
+
REPLACE_NON_JSON_SERIALIZABLE,
|
|
16
|
+
INSTRUMENTATION_ENABLED,
|
|
17
|
+
HOSTNAME,
|
|
18
|
+
TELEMETRY_ENABLED,
|
|
19
|
+
)
|
|
16
20
|
from flowcept.flowcept_api.flowcept_controller import Flowcept
|
|
17
|
-
from flowcept.flowceptor.adapters.instrumentation_interceptor import
|
|
21
|
+
from flowcept.flowceptor.adapters.instrumentation_interceptor import (
|
|
22
|
+
InstrumentationInterceptor,
|
|
23
|
+
)
|
|
18
24
|
|
|
19
25
|
_thread_local = threading.local()
|
|
20
26
|
|
|
@@ -106,10 +112,19 @@ def lightweight_flowcept_task(func=None):
|
|
|
106
112
|
|
|
107
113
|
|
|
108
114
|
def flowcept_task(func=None, **decorator_kwargs):
|
|
109
|
-
"""
|
|
115
|
+
"""
|
|
116
|
+
Flowcept task decorator.
|
|
117
|
+
|
|
118
|
+
Now supports BOTH sync and async functions. For async functions, we await
|
|
119
|
+
the function before capturing outputs in `task_obj.generated`, so we no
|
|
120
|
+
longer store just the coroutine object.
|
|
121
|
+
"""
|
|
110
122
|
if INSTRUMENTATION_ENABLED:
|
|
111
123
|
interceptor = InstrumentationInterceptor.get_instance()
|
|
112
124
|
logger = FlowceptLogger()
|
|
125
|
+
else:
|
|
126
|
+
# still define logger so it's always available for exception logging in branches
|
|
127
|
+
logger = FlowceptLogger()
|
|
113
128
|
|
|
114
129
|
def decorator(func):
|
|
115
130
|
# Precompute once (perf)
|
|
@@ -120,21 +135,25 @@ def flowcept_task(func=None, **decorator_kwargs):
|
|
|
120
135
|
subtype = decorator_kwargs.get("subtype", None)
|
|
121
136
|
output_names = decorator_kwargs.get("output_names", None)
|
|
122
137
|
|
|
123
|
-
|
|
124
|
-
def wrapper(*args, **kwargs):
|
|
125
|
-
if not INSTRUMENTATION_ENABLED:
|
|
126
|
-
return func(*args, **kwargs)
|
|
138
|
+
# --- shared helpers for sync+async wrappers -------------------------
|
|
127
139
|
|
|
140
|
+
def _common_prep(*f_args, **f_kwargs):
|
|
141
|
+
"""
|
|
142
|
+
Build and populate the TaskObject before running the task.
|
|
143
|
+
Returns (task_obj, handled_args).
|
|
144
|
+
"""
|
|
128
145
|
# Bind inputs to parameter names
|
|
129
146
|
try:
|
|
130
|
-
bound_args = sig.bind(*
|
|
147
|
+
bound_args = sig.bind(*f_args, **f_kwargs)
|
|
131
148
|
bound_args.apply_defaults()
|
|
132
149
|
handled_args = args_handler(**dict(bound_args.arguments))
|
|
133
150
|
except Exception as e:
|
|
134
151
|
if isinstance(e, TypeError):
|
|
152
|
+
# signature mismatch is a real error -> raise
|
|
135
153
|
raise e
|
|
136
154
|
else:
|
|
137
|
-
|
|
155
|
+
# fallback to positional capture
|
|
156
|
+
handled_args = args_handler(*f_args, **f_kwargs)
|
|
138
157
|
|
|
139
158
|
task_obj = TaskObject()
|
|
140
159
|
task_obj.subtype = subtype
|
|
@@ -148,61 +167,138 @@ def flowcept_task(func=None, **decorator_kwargs):
|
|
|
148
167
|
task_obj.hostname = HOSTNAME
|
|
149
168
|
task_obj.task_id = str(task_obj.started_at)
|
|
150
169
|
_thread_local._flowcept_current_context_task_id = task_obj.task_id
|
|
170
|
+
|
|
151
171
|
if TELEMETRY_ENABLED:
|
|
172
|
+
# capture telemetry at start
|
|
152
173
|
task_obj.telemetry_at_start = interceptor.telemetry_capture.capture()
|
|
153
174
|
|
|
154
|
-
|
|
155
|
-
result = func(*args, **kwargs)
|
|
156
|
-
task_obj.status = Status.FINISHED
|
|
157
|
-
except Exception as e:
|
|
158
|
-
task_obj.status = Status.ERROR
|
|
159
|
-
result = None
|
|
160
|
-
logger.exception(e)
|
|
161
|
-
task_obj.stderr = str(e)
|
|
175
|
+
return task_obj
|
|
162
176
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
177
|
+
def _attach_outputs(task_obj, result):
|
|
178
|
+
"""
|
|
179
|
+
Populate task_obj.generated following the same logic you had before,
|
|
180
|
+
including output_names mapping and args_handler(), but only if we
|
|
181
|
+
actually got a result and we didn't error.
|
|
182
|
+
"""
|
|
183
|
+
if result is None:
|
|
184
|
+
return
|
|
166
185
|
|
|
167
|
-
# Output handling: only use output_names if provided
|
|
168
186
|
try:
|
|
169
|
-
|
|
170
|
-
named = None
|
|
187
|
+
named = None
|
|
171
188
|
|
|
172
|
-
|
|
173
|
-
|
|
189
|
+
if isinstance(result, dict):
|
|
190
|
+
# User already returned a mapping; pass it through sanitized
|
|
191
|
+
try:
|
|
192
|
+
task_obj.generated = args_handler(**result)
|
|
193
|
+
except Exception:
|
|
194
|
+
task_obj.generated = result
|
|
195
|
+
return
|
|
196
|
+
|
|
197
|
+
if output_names:
|
|
198
|
+
# map tuple/list/scalar to provided output_names
|
|
199
|
+
if isinstance(result, (tuple, list)):
|
|
200
|
+
if len(output_names) == len(result):
|
|
201
|
+
named = {k: v for k, v in zip(output_names, result)}
|
|
202
|
+
elif isinstance(output_names, str):
|
|
203
|
+
named = {output_names: result}
|
|
204
|
+
elif isinstance(output_names, (tuple, list)) and len(output_names) == 1:
|
|
205
|
+
named = {output_names[0]: result}
|
|
206
|
+
|
|
207
|
+
if isinstance(named, dict):
|
|
174
208
|
try:
|
|
175
|
-
task_obj.generated = args_handler(**
|
|
209
|
+
task_obj.generated = args_handler(**named)
|
|
176
210
|
except Exception:
|
|
177
|
-
task_obj.generated =
|
|
178
|
-
elif output_names:
|
|
179
|
-
# If output_names provided, map scalar or tuple/list to names
|
|
180
|
-
if isinstance(result, (tuple, list)):
|
|
181
|
-
if len(output_names) == len(result):
|
|
182
|
-
named = {k: v for k, v in zip(output_names, result)}
|
|
183
|
-
elif isinstance(output_names, str):
|
|
184
|
-
named = {output_names: result}
|
|
185
|
-
elif isinstance(output_names, (tuple, list)) and len(output_names) == 1:
|
|
186
|
-
named = {output_names[0]: result}
|
|
187
|
-
|
|
188
|
-
if isinstance(named, dict):
|
|
189
|
-
try:
|
|
190
|
-
task_obj.generated = args_handler(**named)
|
|
191
|
-
except Exception:
|
|
192
|
-
task_obj.generated = named
|
|
193
|
-
else:
|
|
194
|
-
# Mismatch or no mapping possible -> original behavior
|
|
195
|
-
task_obj.generated = args_handler(result)
|
|
211
|
+
task_obj.generated = named
|
|
196
212
|
else:
|
|
197
|
-
#
|
|
213
|
+
# fallback: positional capture
|
|
198
214
|
task_obj.generated = args_handler(result)
|
|
215
|
+
else:
|
|
216
|
+
# No output_names provided, fallback to positional capture
|
|
217
|
+
task_obj.generated = args_handler(result)
|
|
218
|
+
|
|
199
219
|
except Exception as e:
|
|
220
|
+
# Don't kill the flow if serialization fails
|
|
200
221
|
logger.exception(e)
|
|
201
222
|
|
|
223
|
+
def _common_post(task_obj, result, raised_exc):
|
|
224
|
+
"""
|
|
225
|
+
Finalize task_obj (status, telemetry_at_end, generated, stderr, etc.)
|
|
226
|
+
and ship it.
|
|
227
|
+
"""
|
|
228
|
+
if raised_exc is None:
|
|
229
|
+
task_obj.status = Status.FINISHED
|
|
230
|
+
else:
|
|
231
|
+
task_obj.status = Status.ERROR
|
|
232
|
+
task_obj.stderr = str(raised_exc)
|
|
233
|
+
|
|
234
|
+
task_obj.ended_at = time()
|
|
235
|
+
|
|
236
|
+
if TELEMETRY_ENABLED:
|
|
237
|
+
# capture telemetry at end
|
|
238
|
+
task_obj.telemetry_at_end = interceptor.telemetry_capture.capture()
|
|
239
|
+
|
|
240
|
+
# Only attach outputs if we actually finished successfully
|
|
241
|
+
if raised_exc is None:
|
|
242
|
+
_attach_outputs(task_obj, result)
|
|
243
|
+
|
|
244
|
+
# Send to interceptor
|
|
202
245
|
interceptor.intercept(task_obj.to_dict())
|
|
203
|
-
return result
|
|
204
246
|
|
|
205
|
-
|
|
247
|
+
# --- build either sync or async wrapper -----------------------------
|
|
248
|
+
|
|
249
|
+
if inspect.iscoroutinefunction(func):
|
|
250
|
+
|
|
251
|
+
@wraps(func)
|
|
252
|
+
async def async_wrapper(*args, **kwargs):
|
|
253
|
+
# Fast path: instrumentation disabled
|
|
254
|
+
if not INSTRUMENTATION_ENABLED:
|
|
255
|
+
return await func(*args, **kwargs)
|
|
256
|
+
|
|
257
|
+
task_obj = _common_prep(*args, **kwargs)
|
|
258
|
+
|
|
259
|
+
result = None
|
|
260
|
+
raised_exc = None
|
|
261
|
+
try:
|
|
262
|
+
result = await func(*args, **kwargs)
|
|
263
|
+
except Exception as exc:
|
|
264
|
+
raised_exc = exc
|
|
265
|
+
logger.exception(exc)
|
|
266
|
+
|
|
267
|
+
_common_post(task_obj, result, raised_exc)
|
|
268
|
+
|
|
269
|
+
if raised_exc is not None:
|
|
270
|
+
# propagate error to caller
|
|
271
|
+
raise raised_exc
|
|
272
|
+
return result
|
|
273
|
+
|
|
274
|
+
return async_wrapper
|
|
275
|
+
|
|
276
|
+
else:
|
|
277
|
+
|
|
278
|
+
@wraps(func)
|
|
279
|
+
def sync_wrapper(*args, **kwargs):
|
|
280
|
+
# Fast path: instrumentation disabled
|
|
281
|
+
if not INSTRUMENTATION_ENABLED:
|
|
282
|
+
return func(*args, **kwargs)
|
|
283
|
+
|
|
284
|
+
task_obj = _common_prep(*args, **kwargs)
|
|
285
|
+
|
|
286
|
+
result = None
|
|
287
|
+
raised_exc = None
|
|
288
|
+
try:
|
|
289
|
+
result = func(*args, **kwargs)
|
|
290
|
+
except Exception as exc:
|
|
291
|
+
raised_exc = exc
|
|
292
|
+
logger.exception(exc)
|
|
293
|
+
|
|
294
|
+
_common_post(task_obj, result, raised_exc)
|
|
295
|
+
|
|
296
|
+
if raised_exc is not None:
|
|
297
|
+
# propagate error to caller
|
|
298
|
+
raise raised_exc
|
|
299
|
+
return result
|
|
300
|
+
|
|
301
|
+
return sync_wrapper
|
|
206
302
|
|
|
207
303
|
if func is None:
|
|
208
304
|
return decorator
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from time import time
|
|
2
|
-
from typing import Dict, Any
|
|
2
|
+
from typing import Dict, Any, List
|
|
3
3
|
import os
|
|
4
4
|
import threading
|
|
5
5
|
import random
|
|
@@ -44,10 +44,13 @@ class FlowceptTask(object):
|
|
|
44
44
|
campaign_id: str = None,
|
|
45
45
|
activity_id: str = None,
|
|
46
46
|
agent_id: str = None,
|
|
47
|
+
source_agent_id: str = None,
|
|
47
48
|
parent_task_id: str = None,
|
|
48
49
|
used: Dict = None,
|
|
49
50
|
data: Any = None,
|
|
50
51
|
subtype: str = None,
|
|
52
|
+
tags: List[str] = None,
|
|
53
|
+
adapter_id: str = None,
|
|
51
54
|
custom_metadata: Dict = None,
|
|
52
55
|
generated: Dict = None,
|
|
53
56
|
started_at: float = None,
|
|
@@ -114,8 +117,11 @@ class FlowceptTask(object):
|
|
|
114
117
|
self._task.parent_task_id = parent_task_id
|
|
115
118
|
self._task.used = used
|
|
116
119
|
self._task.data = data
|
|
120
|
+
self._task.tags = tags
|
|
117
121
|
self._task.subtype = subtype
|
|
122
|
+
self._task.adapter_id = adapter_id
|
|
118
123
|
self._task.agent_id = agent_id
|
|
124
|
+
self._task.source_agent_id = source_agent_id
|
|
119
125
|
self._task.custom_metadata = custom_metadata
|
|
120
126
|
|
|
121
127
|
self._ended = False
|
|
@@ -215,3 +221,6 @@ class FlowceptTask(object):
|
|
|
215
221
|
self._task.ended_at = self._task.started_at # message sents are not going to be analyzed for task duration
|
|
216
222
|
self._interceptor.intercept(self._task.to_dict())
|
|
217
223
|
self._ended = True
|
|
224
|
+
|
|
225
|
+
def __str__(self):
|
|
226
|
+
return str(self._task)
|
flowcept/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowcept
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.18
|
|
4
4
|
Summary: Capture and query workflow provenance data using data observability
|
|
5
5
|
Author: Oak Ridge National Laboratory
|
|
6
6
|
License-Expression: MIT
|
|
@@ -9,7 +9,7 @@ Keywords: agentic-ai,agentic-workflows,ai,big-data,dask,data-analytics,data-inte
|
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
10
|
Classifier: Operating System :: OS Independent
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Requires-Python: >=3.
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
13
|
Requires-Dist: msgpack
|
|
14
14
|
Requires-Dist: numpy
|
|
15
15
|
Requires-Dist: omegaconf
|
|
@@ -41,6 +41,7 @@ Requires-Dist: pyarrow; extra == 'all'
|
|
|
41
41
|
Requires-Dist: pymongo; extra == 'all'
|
|
42
42
|
Requires-Dist: pymupdf; extra == 'all'
|
|
43
43
|
Requires-Dist: pytest; extra == 'all'
|
|
44
|
+
Requires-Dist: pytest-timeout; extra == 'all'
|
|
44
45
|
Requires-Dist: pyyaml; extra == 'all'
|
|
45
46
|
Requires-Dist: redis; extra == 'all'
|
|
46
47
|
Requires-Dist: requests; extra == 'all'
|
|
@@ -50,6 +51,7 @@ Requires-Dist: seaborn; extra == 'all'
|
|
|
50
51
|
Requires-Dist: sphinx; extra == 'all'
|
|
51
52
|
Requires-Dist: sqlalchemy; extra == 'all'
|
|
52
53
|
Requires-Dist: streamlit; extra == 'all'
|
|
54
|
+
Requires-Dist: tabulate; extra == 'all'
|
|
53
55
|
Requires-Dist: tbparse; extra == 'all'
|
|
54
56
|
Requires-Dist: tensorboard; extra == 'all'
|
|
55
57
|
Requires-Dist: tensorflow; extra == 'all'
|
|
@@ -69,6 +71,7 @@ Requires-Dist: jupyterlab; extra == 'dev'
|
|
|
69
71
|
Requires-Dist: nbmake; extra == 'dev'
|
|
70
72
|
Requires-Dist: pika; extra == 'dev'
|
|
71
73
|
Requires-Dist: pytest; extra == 'dev'
|
|
74
|
+
Requires-Dist: pytest-timeout; extra == 'dev'
|
|
72
75
|
Requires-Dist: pyyaml; extra == 'dev'
|
|
73
76
|
Requires-Dist: ruff; extra == 'dev'
|
|
74
77
|
Requires-Dist: sphinx; extra == 'dev'
|
|
@@ -94,6 +97,7 @@ Requires-Dist: matplotlib; extra == 'llm-agent'
|
|
|
94
97
|
Requires-Dist: mcp[cli]; extra == 'llm-agent'
|
|
95
98
|
Requires-Dist: pymupdf; extra == 'llm-agent'
|
|
96
99
|
Requires-Dist: streamlit; extra == 'llm-agent'
|
|
100
|
+
Requires-Dist: tabulate; extra == 'llm-agent'
|
|
97
101
|
Provides-Extra: llm-agent-audio
|
|
98
102
|
Requires-Dist: gtts; extra == 'llm-agent-audio'
|
|
99
103
|
Requires-Dist: langchain-community; extra == 'llm-agent-audio'
|
|
@@ -105,6 +109,7 @@ Requires-Dist: pymupdf; extra == 'llm-agent-audio'
|
|
|
105
109
|
Requires-Dist: speechrecognition; extra == 'llm-agent-audio'
|
|
106
110
|
Requires-Dist: streamlit; extra == 'llm-agent-audio'
|
|
107
111
|
Requires-Dist: streamlit-mic-recorder; extra == 'llm-agent-audio'
|
|
112
|
+
Requires-Dist: tabulate; extra == 'llm-agent-audio'
|
|
108
113
|
Provides-Extra: llm-google
|
|
109
114
|
Requires-Dist: google-genai; extra == 'llm-google'
|
|
110
115
|
Requires-Dist: langchain-community; extra == 'llm-google'
|
|
@@ -113,6 +118,7 @@ Requires-Dist: matplotlib; extra == 'llm-google'
|
|
|
113
118
|
Requires-Dist: mcp[cli]; extra == 'llm-google'
|
|
114
119
|
Requires-Dist: pymupdf; extra == 'llm-google'
|
|
115
120
|
Requires-Dist: streamlit; extra == 'llm-google'
|
|
121
|
+
Requires-Dist: tabulate; extra == 'llm-google'
|
|
116
122
|
Provides-Extra: lmdb
|
|
117
123
|
Requires-Dist: lmdb; extra == 'lmdb'
|
|
118
124
|
Provides-Extra: ml-dev
|
|
@@ -169,6 +175,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
169
175
|
|
|
170
176
|
|
|
171
177
|
[](https://flowcept.readthedocs.io/)
|
|
178
|
+
[](https://workflowscommunity.slack.com/archives/C06L5GYJKQS)
|
|
172
179
|
[](https://github.com/ORNL/flowcept/actions/workflows/create-release-n-publish.yml)
|
|
173
180
|
[](https://pypi.org/project/flowcept)
|
|
174
181
|
[](https://github.com/ORNL/flowcept/actions/workflows/run-tests.yml)
|
|
@@ -179,6 +186,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
179
186
|
|
|
180
187
|
|
|
181
188
|
<h4 align="center">
|
|
189
|
+
<a href="https://flowcept.org">Website</a> •
|
|
182
190
|
<a href="https://flowcept.readthedocs.io/">Documentation</a> •
|
|
183
191
|
<a href="./docs/publications">Publications</a>
|
|
184
192
|
</h4>
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
flowcept/__init__.py,sha256=tvVZKyymdqv3qOsgpAyDppBlUiBc0ag4QF21IcS-mVk,2449
|
|
2
2
|
flowcept/cli.py,sha256=d3hogRpuMwQFIqw_fsYD4y074o3AFslBjlkRvTthOVM,25702
|
|
3
|
-
flowcept/configs.py,sha256=
|
|
4
|
-
flowcept/version.py,sha256=
|
|
3
|
+
flowcept/configs.py,sha256=JN_YFuNFeFyYe1ieiPhSlEc8PVnU8OXoMcKgf7c46ko,9011
|
|
4
|
+
flowcept/version.py,sha256=FVbVkAZsGLJF4VKbw0v8G0N_UTTbGRqm1dWVoX3mjfk,307
|
|
5
5
|
flowcept/agents/__init__.py,sha256=8eeD2CiKBtHiDsWdrHK_UreIkKlTq4dUbhHDyzw372o,175
|
|
6
6
|
flowcept/agents/agent_client.py,sha256=UiBQkC9WE2weLZR2OTkEOEQt9-zqQOkPwRA17HfI-jk,2027
|
|
7
|
-
flowcept/agents/agents_utils.py,sha256=
|
|
7
|
+
flowcept/agents/agents_utils.py,sha256=aFJ_RVqE4XlXTG7e6SH6WPqfr7hjT4J3SjSgM6sgY60,8630
|
|
8
8
|
flowcept/agents/dynamic_schema_tracker.py,sha256=TsmXRRkyUkqB-0bEgmeqSms8xj1tMMJeYvjoaO2mtwI,6829
|
|
9
|
-
flowcept/agents/flowcept_agent.py,sha256
|
|
10
|
-
flowcept/agents/flowcept_ctx_manager.py,sha256
|
|
9
|
+
flowcept/agents/flowcept_agent.py,sha256=-PM7sGalZnUk-NVCekfHIY0I7oEZD9mnYGXMxFpo0EM,945
|
|
10
|
+
flowcept/agents/flowcept_ctx_manager.py,sha256=OiDzie1qp2ZlSphA-4b5kjUHlzP0yjJ4XcFSiNEGgiU,9717
|
|
11
11
|
flowcept/agents/gui/__init__.py,sha256=Qw9YKbAzgZqBjMQGnF7XWmfUo0fivtkDISQRK3LA3gU,113
|
|
12
12
|
flowcept/agents/gui/agent_gui.py,sha256=VpwhQamzFKBfrmibxOIc-8wXtZnd2Cq7tbKahZZOp7c,2995
|
|
13
13
|
flowcept/agents/gui/audio_utils.py,sha256=piA_dc36io1sYqLF6QArS4AMl-cfDa001jGhYz5LkB4,4279
|
|
14
|
-
flowcept/agents/gui/gui_utils.py,sha256=
|
|
14
|
+
flowcept/agents/gui/gui_utils.py,sha256=Z8_risHlf6Xde0wPXXEKuLZ8BXQDsWJvg1POvNJepVg,15678
|
|
15
15
|
flowcept/agents/llms/__init__.py,sha256=kzOaJic5VhMBnGvy_Fr5C6sRKVrRntH1ZnYz7f5_4-s,23
|
|
16
16
|
flowcept/agents/llms/claude_gcp.py,sha256=fzz7235DgzVueuFj5odsr93jWtYHpYlXkSGW1kmmJwU,4915
|
|
17
17
|
flowcept/agents/llms/gemini25.py,sha256=VARrjb3tITIh3_Wppmocp_ocSKVZNon0o0GeFEwTnTI,4229
|
|
18
18
|
flowcept/agents/prompts/__init__.py,sha256=7ICsNhLYzvPS1esG3Vg519s51b1c4yN0WegJUb6Qvww,26
|
|
19
|
-
flowcept/agents/prompts/general_prompts.py,sha256=
|
|
20
|
-
flowcept/agents/prompts/in_memory_query_prompts.py,sha256=
|
|
19
|
+
flowcept/agents/prompts/general_prompts.py,sha256=Mjv8yz8GtOZSbBKtKmvl157Op6Aq-VYEM69X9UaNbQU,3970
|
|
20
|
+
flowcept/agents/prompts/in_memory_query_prompts.py,sha256=UH3fVUf8D8bvblBmRfC5jb4-jm4Sh8BlCqoPm1c0fbs,24171
|
|
21
21
|
flowcept/agents/tools/__init__.py,sha256=Xqz2E4-LL_7DDcm1XYJFx2f5RdAsjeTpOJb_DPC7xyc,27
|
|
22
|
-
flowcept/agents/tools/general_tools.py,sha256=
|
|
22
|
+
flowcept/agents/tools/general_tools.py,sha256=hALMIETOPJGGobA5s22d3Mssa44RerygRySK-KUht4w,4853
|
|
23
23
|
flowcept/agents/tools/in_memory_queries/__init__.py,sha256=K8-JI_lXUgquKkgga8Nef8AntGg_logQtjjQjaEE7yI,39
|
|
24
|
-
flowcept/agents/tools/in_memory_queries/in_memory_queries_tools.py,sha256=
|
|
24
|
+
flowcept/agents/tools/in_memory_queries/in_memory_queries_tools.py,sha256=VWp409ZC1wDmb_OLjz0jgMJdYR7nk-zfMCANSbOeAWQ,25876
|
|
25
25
|
flowcept/agents/tools/in_memory_queries/pandas_agent_utils.py,sha256=xyrZupR86qoUptnnQ7PeF0LTzSOquEK2cjc0ghT1KBs,9018
|
|
26
26
|
flowcept/analytics/__init__.py,sha256=46q-7vsHq_ddPNrzNnDgEOiRgvlx-5Ggu2ocyROMV0w,641
|
|
27
27
|
flowcept/analytics/analytics_utils.py,sha256=FRJdBtQa7Hrk2oR_FFhmhmMf3X6YyZ4nbH5RIYh7KL4,8753
|
|
@@ -40,21 +40,21 @@ flowcept/commons/daos/keyvalue_dao.py,sha256=g7zgC9hVC1NTllwUAqGt44YqdqYUgAKgPlX
|
|
|
40
40
|
flowcept/commons/daos/redis_conn.py,sha256=gFyW-5yf6B8ExEYopCmbap8ki-iEwuIw-KH9f6o7UGQ,1495
|
|
41
41
|
flowcept/commons/daos/docdb_dao/__init__.py,sha256=qRvXREeUJ4mkhxdC9bzpOsVX6M2FB5hDyLFxhMxTGhs,30
|
|
42
42
|
flowcept/commons/daos/docdb_dao/docdb_dao_base.py,sha256=YbfSVJPwZGK2GBYkeapRC83HkmP0c6Msv5TriD88RcI,11812
|
|
43
|
-
flowcept/commons/daos/docdb_dao/lmdb_dao.py,sha256=
|
|
43
|
+
flowcept/commons/daos/docdb_dao/lmdb_dao.py,sha256=5FV11hjIpFUZTP4HJwPTswd4TT27EJ3it82TpY5Z2RI,12187
|
|
44
44
|
flowcept/commons/daos/docdb_dao/mongodb_dao.py,sha256=5x0un15uCDTcnuITOyOhvF9mKj_bUmF2du0AHQfjN9k,40055
|
|
45
45
|
flowcept/commons/daos/mq_dao/__init__.py,sha256=Xxm4FmbBUZDQ7XIAmSFbeKE_AdHsbgFmSuftvMWSykQ,21
|
|
46
46
|
flowcept/commons/daos/mq_dao/mq_dao_base.py,sha256=VXqXzesU01dCHE5i0urnYQppixUNGZbJMRmm4jSAcgM,9424
|
|
47
|
-
flowcept/commons/daos/mq_dao/mq_dao_kafka.py,sha256=
|
|
47
|
+
flowcept/commons/daos/mq_dao/mq_dao_kafka.py,sha256=mWoY9RvViHegzXXynuegU_jg-S55YSV5lfgNqaPuMlg,5085
|
|
48
48
|
flowcept/commons/daos/mq_dao/mq_dao_mofka.py,sha256=tRdMGYDzdeIJxad-B4-DE6u8Wzs61eTzOW4ojZrnTxs,4057
|
|
49
|
-
flowcept/commons/daos/mq_dao/mq_dao_redis.py,sha256=
|
|
49
|
+
flowcept/commons/daos/mq_dao/mq_dao_redis.py,sha256=be1ejbQofeJhf2qw7AWT9JF8z-a3kk-DbSCMU9wAwuI,6773
|
|
50
50
|
flowcept/commons/flowcept_dataclasses/__init__.py,sha256=8KkiJh0WSRAB50waVluxCSI8Tb9X1L9nup4c8RN3ulc,30
|
|
51
51
|
flowcept/commons/flowcept_dataclasses/base_settings_dataclasses.py,sha256=Cjw2PGYtZDfnwecz6G3S42Ncmxj7AIZVEBx05bsxRUo,399
|
|
52
|
-
flowcept/commons/flowcept_dataclasses/task_object.py,sha256=
|
|
52
|
+
flowcept/commons/flowcept_dataclasses/task_object.py,sha256=E2w6sZNAUIE4TjI2w4DFo2CaC4sBsNE9z45jvQAHbxw,8226
|
|
53
53
|
flowcept/commons/flowcept_dataclasses/telemetry.py,sha256=9_5ONCo-06r5nKHXmi5HfIhiZSuPgmTECiq_u9MlxXM,2822
|
|
54
54
|
flowcept/commons/flowcept_dataclasses/workflow_object.py,sha256=cauWtXHhBv9lHS-q6cb7yUsNiwQ6PkZPuSinR1TKcqU,6161
|
|
55
55
|
flowcept/flowcept_api/__init__.py,sha256=T1ty86YlocQ5Z18l5fUqHj_CC6Unq_iBv0lFyiI7Ao8,22
|
|
56
56
|
flowcept/flowcept_api/db_api.py,sha256=hKXep-n50rp9cAzV0ljk2QVEF8O64yxi3ujXv5_Ibac,9723
|
|
57
|
-
flowcept/flowcept_api/flowcept_controller.py,sha256=
|
|
57
|
+
flowcept/flowcept_api/flowcept_controller.py,sha256=fF9DuQ0A3hm9NIx_9xgt0IaD30PbCZIwEESNS1arQOY,20825
|
|
58
58
|
flowcept/flowcept_api/task_query_api.py,sha256=SrwB0OCVtbpvCPECkE2ySM10G_g8Wlk5PJ8h-0xEaNc,23821
|
|
59
59
|
flowcept/flowcept_webserver/__init__.py,sha256=8411GIXGddKTKoHUvbo_Rq6svosNG7tG8VzvUEBd7WI,28
|
|
60
60
|
flowcept/flowcept_webserver/app.py,sha256=VUV8_JZbIbx9u_1O7m7XtRdhZb_7uifUa-iNlPhmZws,658
|
|
@@ -74,29 +74,29 @@ flowcept/flowceptor/adapters/dask/dask_dataclasses.py,sha256=6LTG-kdcc6AUuVINvkq
|
|
|
74
74
|
flowcept/flowceptor/adapters/dask/dask_interceptor.py,sha256=uBQpLluYXzlT1gBDfTe4_WueC_fWBEs5Xr8ntpOmljE,5869
|
|
75
75
|
flowcept/flowceptor/adapters/dask/dask_plugins.py,sha256=s1ENAi9N61PC_6RiFvOYhJsgWzSm_lFWm3w87V-R1YY,2473
|
|
76
76
|
flowcept/flowceptor/adapters/mlflow/__init__.py,sha256=3mzHrvh1XQOy68qx1A3so9Nq27tIb0i2mSXfv3F6gZg,25
|
|
77
|
-
flowcept/flowceptor/adapters/mlflow/interception_event_handler.py,sha256
|
|
77
|
+
flowcept/flowceptor/adapters/mlflow/interception_event_handler.py,sha256=ajm62XfZNTsbEXI4ON_tfwyK1ujoCm9G573BfuXgHN0,1716
|
|
78
78
|
flowcept/flowceptor/adapters/mlflow/mlflow_dao.py,sha256=dPEgCduiw14_pzT5WCjuokwaN7p5Tu7UvWS2rtGh4qk,4589
|
|
79
79
|
flowcept/flowceptor/adapters/mlflow/mlflow_dataclasses.py,sha256=vbijpDW6npHdsA9-28otXw94O4a9R-PWtq3xlJapsyY,690
|
|
80
|
-
flowcept/flowceptor/adapters/mlflow/mlflow_interceptor.py,sha256=
|
|
80
|
+
flowcept/flowceptor/adapters/mlflow/mlflow_interceptor.py,sha256=4geLRHpGXo9PAGzDY8mxaQzb8aDCv30YEUlx816mOlU,4433
|
|
81
81
|
flowcept/flowceptor/adapters/tensorboard/__init__.py,sha256=LrcR4WCIlBwwHIUSteQ8k8JBdCJTFqLvvgAfnoLeREw,30
|
|
82
82
|
flowcept/flowceptor/adapters/tensorboard/tensorboard_dataclasses.py,sha256=lSfDd6TucVNzGxbm69BYyCVgMr2p9iUEQjnsS4jIfeI,554
|
|
83
|
-
flowcept/flowceptor/adapters/tensorboard/tensorboard_interceptor.py,sha256=
|
|
83
|
+
flowcept/flowceptor/adapters/tensorboard/tensorboard_interceptor.py,sha256=GcRiY93MjuEmdhh37PAyj4ZtwBovA7FPiEM2TjVxsPw,5123
|
|
84
84
|
flowcept/flowceptor/consumers/__init__.py,sha256=foxtVEb2ZEe9g1slfYIKM4tIFv-He1l7XS--SYs7nlQ,28
|
|
85
85
|
flowcept/flowceptor/consumers/base_consumer.py,sha256=hrZ3VFV7pJBMXZsvh7Q2Y36b_ifcnbJkgwe2MiuZL70,3324
|
|
86
86
|
flowcept/flowceptor/consumers/consumer_utils.py,sha256=E6R07zIKNXJTCxvL-OCrCKNYRpqtwRiXiZx0D2BKidk,5893
|
|
87
87
|
flowcept/flowceptor/consumers/document_inserter.py,sha256=IeVl6Y4Q1KlpYGvE7uDI0vKQf-MGf2pgnIpxCYtyzKE,13392
|
|
88
88
|
flowcept/flowceptor/consumers/agent/__init__.py,sha256=R1uvjBPeTLw9SpYgyUc6Qmo16pE84PFHcELTTFvyTWU,56
|
|
89
|
-
flowcept/flowceptor/consumers/agent/base_agent_context_manager.py,sha256=
|
|
89
|
+
flowcept/flowceptor/consumers/agent/base_agent_context_manager.py,sha256=sAoMtbfB63Ys7AxUiARlTm9z1QX9HcVNYE-mpjyYo58,4116
|
|
90
90
|
flowcept/instrumentation/__init__.py,sha256=M5bTmg80E4QyN91gUX3qfw_nbtJSXwGWcKxdZP3vJz0,34
|
|
91
91
|
flowcept/instrumentation/flowcept_agent_task.py,sha256=XN9JU4LODca0SgojUm4F5iU_V8tuWkOt1fAKcoOAG34,10757
|
|
92
92
|
flowcept/instrumentation/flowcept_decorator.py,sha256=X4Lp_FSsoL08K8ZhRM4mC0OjKupbQtbMQR8zxy3ezDY,1350
|
|
93
93
|
flowcept/instrumentation/flowcept_loop.py,sha256=nF7Sov-DCDapyYvS8zx-1ZFrnjc3CPg2VsjDaxFs0Cc,15667
|
|
94
|
-
flowcept/instrumentation/flowcept_task.py,sha256=
|
|
94
|
+
flowcept/instrumentation/flowcept_task.py,sha256=_G1e5SOMQ1y8RhO_rVexe7icQbgFF4TpaHlpW_MxERc,11135
|
|
95
95
|
flowcept/instrumentation/flowcept_torch.py,sha256=kkZQRYq6cDBpdBU6J39_4oKRVkhyF3ODlz8ydV5WGKw,23455
|
|
96
|
-
flowcept/instrumentation/task_capture.py,sha256=
|
|
97
|
-
resources/sample_settings.yaml,sha256=
|
|
98
|
-
flowcept-0.9.
|
|
99
|
-
flowcept-0.9.
|
|
100
|
-
flowcept-0.9.
|
|
101
|
-
flowcept-0.9.
|
|
102
|
-
flowcept-0.9.
|
|
96
|
+
flowcept/instrumentation/task_capture.py,sha256=p_Cj9_cHVMhgzqDXhKqdpk01-88VAAVhbgk5IDa-7sk,8576
|
|
97
|
+
resources/sample_settings.yaml,sha256=AYFqPC0im0ia5TiR2Ri_d5C11gLSDaqXX5j5fa79D6Q,6895
|
|
98
|
+
flowcept-0.9.18.dist-info/METADATA,sha256=jBMMehf112ABa6qRQhSBU3q-2Aho9KvD02tx5aPEYRU,33386
|
|
99
|
+
flowcept-0.9.18.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
100
|
+
flowcept-0.9.18.dist-info/entry_points.txt,sha256=i8q67WE0201rVxYI2lyBtS52shvgl93x2Szp4q8zMlw,47
|
|
101
|
+
flowcept-0.9.18.dist-info/licenses/LICENSE,sha256=r5-2P6tFTuRGWT5TiX32s1y0tnp4cIqBEC1QjTaXe2k,1086
|
|
102
|
+
flowcept-0.9.18.dist-info/RECORD,,
|
resources/sample_settings.yaml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
flowcept_version: 0.9.
|
|
1
|
+
flowcept_version: 0.9.18 # Version of the Flowcept package. This setting file is compatible with this version.
|
|
2
2
|
|
|
3
3
|
project:
|
|
4
4
|
debug: true # Toggle debug mode. This will add a property `debug: true` to all saved data, making it easier to retrieve/delete them later.
|
|
@@ -94,6 +94,7 @@ agent:
|
|
|
94
94
|
service_provider: '?'
|
|
95
95
|
model_kwargs: {}
|
|
96
96
|
audio_enabled: false
|
|
97
|
+
debug: true
|
|
97
98
|
|
|
98
99
|
databases:
|
|
99
100
|
|
|
File without changes
|
|
File without changes
|