flowcept 0.9.7__py3-none-any.whl → 0.9.9__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.
@@ -37,9 +37,11 @@ display_ai_msg(GREETING)
37
37
  def main():
38
38
  """Main Agent GUI function."""
39
39
  st.caption(
40
- "💡 Tip: Ask about workflow metrics, generate plots, or summarize data. "
41
- "Inputs are mapped to `used` and outputs to `generated` fields. "
42
- "Use @record <your query guidance> if you have custom guidance."
40
+ "💡 Quick help\n"
41
+ "Ask about workflow metrics, plots, or summaries.\n\n"
42
+ "Inputs used, outputs generated.\n"
43
+ "Commands: @record <note> add • @show records list • reset context clear • save context save.\n"
44
+ "Tip: set result = df to run ad-hoc Python on the in-memory DataFrame."
43
45
  )
44
46
 
45
47
  user_input = st.chat_input("Send a message")
@@ -23,9 +23,9 @@ ROUTING_PROMPT = (
23
23
  "You are a routing assistant for a provenance AI agent. "
24
24
  "Given the following user message, classify it into one of the following routes:\n"
25
25
  "- small_talk: if it's casual conversation or some random word (e.g., 'hausdn', 'a', hello, how are you, what can you do, what's your name)\n"
26
+ "- in_context_query: if the user is querying the provenance data questions about tasks or data in running workflow (or a workflow that ran recently) or if the user mentions the in-memory 'df' or a dataframe. I expect that most of the interactions will fall in this category.\n"
26
27
  "- plot: if user is requesting plots (e.g., plot, chart, visualize)\n"
27
28
  # "- in_context_query: if the user asks questions about tasks or data in running workflow (or a workflow that ran recently) or if the user mentions the in-memory 'df' or a dataframe.\n"
28
- "- in_context_query: if the user is querying the provenance data questions about tasks or data in running workflow (or a workflow that ran recently) or if the user mentions the in-memory 'df' or a dataframe.\n"
29
29
  # "- historical_prov_query: if the user wants to query historical provenance data\n"
30
30
  "- in_chat_query: if the user appears to be asking about something that has said recently in this chat.\n"
31
31
  "- unknown: if you don't know.\n"
@@ -176,9 +176,12 @@ QUERY_GUIDELINES = """
176
176
  -To select the first (or earliest) N workflow executions, use or adapt the following: `df.groupby('workflow_id', as_index=False).agg({{"started_at": 'min'}}).sort_values(by='started_at', ascending=True).head(N)['workflow_id']` - utilize `started_at` to sort!
177
177
  -To select the last (or latest or most recent) N workflow executions, use or adapt the following: `df.groupby('workflow_id', as_index=False).agg({{"ended_at": 'max'}}).sort_values(by='ended_at', ascending=False).head(N)['workflow_id']` - utilize `ended_at` to sort!
178
178
 
179
+ -If the user does not ask for a specific workflow run, do not use `workflow_id` in your query.
179
180
  -To select the first or earliest or initial tasks, use or adapt the following: `df.sort_values(by='started_at', ascending=True)`
180
181
  -To select the last or final or most recent tasks, use or adapt the following: `df.sort_values(by='ended_at', ascending=False)`
181
182
 
183
+ -If user explicitly asks to display or show all columns or fields, do not project on any particular field or column. Just show all of them.
184
+
182
185
  -WHEN the user requests a "summary" of activities, you must incorporate relevant summary statistics such as min, max, and mean, into the code you generate.
183
186
  -Do NOT use df[0] or df[integer value] or df[df[<field name>].idxmax()] or df[df[<field name>].idxmin()] because these are obviously not valid Pandas Code!
184
187
  -**Do NOT use any of those: df[df['started_at'].idxmax()], df[df['started_at'].idxmin()], df[df['ended_at'].idxmin()], df[df['ended_at'].idxmax()]. Those are not valid Pandas Code.**
@@ -73,6 +73,57 @@ def record_guidance(message: str) -> ToolResult:
73
73
  return ToolResult(code=201, result=f"Ok. I recorded in my memory: {message}")
74
74
 
75
75
 
76
+ @mcp_flowcept.tool()
77
+ def show_records() -> ToolResult:
78
+ """
79
+ Lists all recorded user guidance.
80
+ """
81
+ try:
82
+ ctx = mcp_flowcept.get_context()
83
+ custom_guidance: List = ctx.request_context.lifespan_context.custom_guidance
84
+ if not custom_guidance:
85
+ message = "There is no recorded user guidance."
86
+ else:
87
+ message = "This is the list of custom guidance I have in my memory:\n"
88
+ message += "\n".join(f" - {msg}" for msg in custom_guidance)
89
+
90
+ return ToolResult(code=201, result=message)
91
+ except Exception as e:
92
+ return ToolResult(code=499, result=str(e))
93
+
94
+
95
+ @mcp_flowcept.tool()
96
+ def reset_records() -> ToolResult:
97
+ """
98
+ Resets all recorded user guidance.
99
+ """
100
+ try:
101
+ ctx = mcp_flowcept.get_context()
102
+ ctx.request_context.lifespan_context.custom_guidance = []
103
+ return ToolResult(code=201, result="Custom guidance reset.")
104
+ except Exception as e:
105
+ return ToolResult(code=499, result=str(e))
106
+
107
+ @mcp_flowcept.tool()
108
+ def show_records() -> ToolResult:
109
+ """
110
+ Lists all recorded user guidance.
111
+ """
112
+ try:
113
+ ctx = mcp_flowcept.get_context()
114
+ custom_guidance: List = ctx.request_context.lifespan_context.custom_guidance
115
+ if not custom_guidance:
116
+ message = "There is no recorded user guidance."
117
+ else:
118
+ message = "This is the list of custom guidance I have in my memory:"
119
+ message += "\n".join(f"- {msg}" for msg in custom_guidance)
120
+
121
+ return ToolResult(code=201, result=message)
122
+ except Exception as e:
123
+ return ToolResult(code=499, result=str(e))
124
+
125
+
126
+
76
127
  @mcp_flowcept.tool()
77
128
  def prompt_handler(message: str) -> ToolResult:
78
129
  """
@@ -95,6 +146,10 @@ def prompt_handler(message: str) -> ToolResult:
95
146
 
96
147
  if "@record" in message:
97
148
  return record_guidance(message)
149
+ if "@show records" in message:
150
+ return show_records()
151
+ if "@reset records" in message:
152
+ return reset_records(message)
98
153
 
99
154
  llm = build_llm_model()
100
155
 
@@ -105,12 +160,12 @@ def prompt_handler(message: str) -> ToolResult:
105
160
  prompt = SMALL_TALK_PROMPT + message
106
161
  response = llm.invoke(prompt)
107
162
  return ToolResult(code=201, result=response)
163
+ elif route == "in_context_query":
164
+ return run_df_query(llm, message, plot=False)
108
165
  elif route == "plot":
109
166
  return run_df_query(llm, message, plot=True)
110
167
  elif route == "historical_prov_query":
111
168
  return ToolResult(code=201, result="We need to query the Provenance Database. Feature coming soon.")
112
- elif route == "in_context_query":
113
- return run_df_query(llm, message, plot=False)
114
169
  elif route == "in_chat_query":
115
170
  prompt = SMALL_TALK_PROMPT + message
116
171
  response = llm.invoke(prompt)
@@ -70,6 +70,7 @@ class MQDaoRedis(MQDao):
70
70
  except Exception as e:
71
71
  self.logger.error(f"Failed to process message {message}")
72
72
  self.logger.exception(e)
73
+ continue
73
74
 
74
75
  current_trials = 0
75
76
  except (redis.exceptions.ConnectionError, redis.exceptions.TimeoutError) as e:
@@ -78,7 +79,7 @@ class MQDaoRedis(MQDao):
78
79
  sleep(3)
79
80
  except Exception as e:
80
81
  self.logger.exception(e)
81
- break
82
+ continue
82
83
 
83
84
  def send_message(self, message: dict, channel=MQ_CHANNEL, serializer=msgpack.dumps):
84
85
  """Send the message."""
@@ -1,7 +1,6 @@
1
1
  """Controller module."""
2
2
 
3
- import os.path
4
- from typing import List, Dict
3
+ from typing import List, Dict, Any
5
4
  from uuid import uuid4
6
5
 
7
6
  from flowcept.commons.autoflush_buffer import AutoflushBuffer
@@ -175,25 +174,31 @@ class Flowcept(object):
175
174
  self._interceptor_instances[0]._mq_dao.bulk_publish(self.buffer)
176
175
 
177
176
  @staticmethod
178
- def read_messages_file(file_path: str = None) -> List[Dict]:
177
+ def read_messages_file(file_path: str | None = None, return_df: bool = False):
179
178
  """
180
179
  Read a JSON Lines (JSONL) file containing captured Flowcept messages.
181
180
 
182
181
  This function loads a file where each line is a serialized JSON object.
183
182
  It joins the lines into a single JSON array and parses them efficiently
184
- with ``orjson``.
183
+ with ``orjson``. If ``return_df`` is True, it returns a pandas DataFrame
184
+ created via ``pandas.json_normalize(..., sep='.')`` so nested fields become
185
+ dot-separated columns (for example, ``generated.attention``).
185
186
 
186
187
  Parameters
187
188
  ----------
188
189
  file_path : str, optional
189
- Path to the messages file. If not provided, defaults to the
190
- value of ``DUMP_BUFFER_PATH`` from the configuration.
191
- If neither is provided, an assertion error is raised.
190
+ Path to the messages file. If not provided, defaults to the value of
191
+ ``DUMP_BUFFER_PATH`` from the configuration. If neither is provided,
192
+ an assertion error is raised.
193
+ return_df : bool, default False
194
+ If True, return a normalized pandas DataFrame. If False, return the
195
+ parsed list of dictionaries.
192
196
 
193
197
  Returns
194
198
  -------
195
- List[dict]
196
- A list of message objects (dictionaries) parsed from the file.
199
+ list of dict or pandas.DataFrame
200
+ A list of message objects when ``return_df`` is False,
201
+ otherwise a normalized DataFrame with dot-separated columns.
197
202
 
198
203
  Raises
199
204
  ------
@@ -203,35 +208,45 @@ class Flowcept(object):
203
208
  If the specified file does not exist.
204
209
  orjson.JSONDecodeError
205
210
  If the file contents cannot be parsed as valid JSON.
211
+ ModuleNotFoundError
212
+ If ``return_df`` is True but pandas is not installed.
206
213
 
207
214
  Examples
208
215
  --------
209
- Read messages from a file explicitly:
216
+ Read messages as a list:
210
217
 
211
218
  >>> msgs = read_messages_file("offline_buffer.jsonl")
212
- >>> print(len(msgs))
213
- 128
219
+ >>> len(msgs) > 0
220
+ True
214
221
 
215
- Use the default dump buffer path from config:
222
+ Read messages as a normalized DataFrame:
216
223
 
217
- >>> msgs = read_messages_file()
218
- >>> for m in msgs[:2]:
219
- ... print(m["type"], m.get("workflow_id"))
220
- task_start wf_123
221
- task_end wf_123
224
+ >>> df = read_messages_file("offline_buffer.jsonl", return_df=True)
225
+ >>> "generated.attention" in df.columns
226
+ True
222
227
  """
228
+ import os
223
229
  import orjson
224
230
 
225
- _buffer = []
226
231
  if file_path is None:
227
232
  file_path = DUMP_BUFFER_PATH
228
233
  assert file_path is not None, "Please indicate file_path either in the argument or in the config file."
229
234
  if not os.path.exists(file_path):
230
- raise f"File {file_path} has not been created. It will only be created if you run in fully offline mode."
235
+ raise FileNotFoundError(f"File '{file_path}' was not found. It is created only in fully offline mode.")
236
+
231
237
  with open(file_path, "rb") as f:
232
238
  lines = [ln for ln in f.read().splitlines() if ln]
233
- _buffer = orjson.loads(b"[" + b",".join(lines) + b"]")
234
- return _buffer
239
+
240
+ buffer: List[Dict[str, Any]] = orjson.loads(b"[" + b",".join(lines) + b"]")
241
+
242
+ if return_df:
243
+ try:
244
+ import pandas as pd
245
+ except ModuleNotFoundError as e:
246
+ raise ModuleNotFoundError("pandas is required when return_df=True. Please install pandas.") from e
247
+ return pd.json_normalize(buffer, sep=".")
248
+
249
+ return buffer
235
250
 
236
251
  def save_workflow(self, interceptor: str, interceptor_instance: BaseInterceptor):
237
252
  """
flowcept/version.py CHANGED
@@ -4,4 +4,4 @@
4
4
  # The expected format is: <Major>.<Minor>.<Patch>
5
5
  # This file is supposed to be automatically modified by the CI Bot.
6
6
  # See .github/workflows/version_bumper.py
7
- __version__ = "0.9.7"
7
+ __version__ = "0.9.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowcept
3
- Version: 0.9.7
3
+ Version: 0.9.9
4
4
  Summary: Capture and query workflow provenance data using data observability
5
5
  Author: Oak Ridge National Laboratory
6
6
  License-Expression: MIT
@@ -27,6 +27,7 @@ Requires-Dist: jupyterlab; extra == 'all'
27
27
  Requires-Dist: langchain-community; extra == 'all'
28
28
  Requires-Dist: langchain-openai; extra == 'all'
29
29
  Requires-Dist: lmdb; extra == 'all'
30
+ Requires-Dist: matplotlib; extra == 'all'
30
31
  Requires-Dist: mcp[cli]; extra == 'all'
31
32
  Requires-Dist: mlflow-skinny; extra == 'all'
32
33
  Requires-Dist: nbmake; extra == 'all'
@@ -88,6 +89,7 @@ Requires-Dist: confluent-kafka<=2.8.0; extra == 'kafka'
88
89
  Provides-Extra: llm-agent
89
90
  Requires-Dist: langchain-community; extra == 'llm-agent'
90
91
  Requires-Dist: langchain-openai; extra == 'llm-agent'
92
+ Requires-Dist: matplotlib; extra == 'llm-agent'
91
93
  Requires-Dist: mcp[cli]; extra == 'llm-agent'
92
94
  Requires-Dist: pymupdf; extra == 'llm-agent'
93
95
  Requires-Dist: streamlit; extra == 'llm-agent'
@@ -95,6 +97,7 @@ Provides-Extra: llm-agent-audio
95
97
  Requires-Dist: gtts; extra == 'llm-agent-audio'
96
98
  Requires-Dist: langchain-community; extra == 'llm-agent-audio'
97
99
  Requires-Dist: langchain-openai; extra == 'llm-agent-audio'
100
+ Requires-Dist: matplotlib; extra == 'llm-agent-audio'
98
101
  Requires-Dist: mcp[cli]; extra == 'llm-agent-audio'
99
102
  Requires-Dist: pydub; extra == 'llm-agent-audio'
100
103
  Requires-Dist: pymupdf; extra == 'llm-agent-audio'
@@ -105,6 +108,7 @@ Provides-Extra: llm-google
105
108
  Requires-Dist: google-genai; extra == 'llm-google'
106
109
  Requires-Dist: langchain-community; extra == 'llm-google'
107
110
  Requires-Dist: langchain-openai; extra == 'llm-google'
111
+ Requires-Dist: matplotlib; extra == 'llm-google'
108
112
  Requires-Dist: mcp[cli]; extra == 'llm-google'
109
113
  Requires-Dist: pymupdf; extra == 'llm-google'
110
114
  Requires-Dist: streamlit; extra == 'llm-google'
@@ -1,7 +1,7 @@
1
1
  flowcept/__init__.py,sha256=urpwIEJeikV0P6ORXKsM5Lq4o6wCwhySS9A487BYGy4,2241
2
2
  flowcept/cli.py,sha256=eVnUrmZtVhZ1ldRMGB1QsqBzNC1Pf2CX33efnlaZ4gs,22842
3
3
  flowcept/configs.py,sha256=aXgBkBpTs4_4MpvAe76aQ5lXl1gTmgk92bFiNqMQXPM,8382
4
- flowcept/version.py,sha256=82O8Nb-xrNpDOjABeIhhxyF9hYDKXZ1hFjdTCo4zE2Y,306
4
+ flowcept/version.py,sha256=ueMAMza92zxBIjD4eZdTMYArVaKDr6QL5eZ23IZjyd4,306
5
5
  flowcept/agents/__init__.py,sha256=8eeD2CiKBtHiDsWdrHK_UreIkKlTq4dUbhHDyzw372o,175
6
6
  flowcept/agents/agent_client.py,sha256=UiBQkC9WE2weLZR2OTkEOEQt9-zqQOkPwRA17HfI-jk,2027
7
7
  flowcept/agents/agents_utils.py,sha256=Az5lvWTsBHs_3sWWwy7jSdDjNn-PvZ7KmYd79wxvdyU,6666
@@ -9,17 +9,17 @@ flowcept/agents/dynamic_schema_tracker.py,sha256=TsmXRRkyUkqB-0bEgmeqSms8xj1tMMJ
9
9
  flowcept/agents/flowcept_agent.py,sha256=1sidjnNMdG0S6lUKBvml7ZfIb6o3u7zc6HNogsJbl9g,871
10
10
  flowcept/agents/flowcept_ctx_manager.py,sha256=-WmkddzzFY2dnU9LbZaoY4-5RcSAQH4FziEJgcC5LEI,7083
11
11
  flowcept/agents/gui/__init__.py,sha256=Qw9YKbAzgZqBjMQGnF7XWmfUo0fivtkDISQRK3LA3gU,113
12
- flowcept/agents/gui/agent_gui.py,sha256=jsKPxJbXL2C2tXyNKpJnuVhSFktc0IpXyccW158rSWU,2752
12
+ flowcept/agents/gui/agent_gui.py,sha256=44G6AXM9zJbVcJUziZcU5aA6mVDwtvgO8H58nTCFC0M,2855
13
13
  flowcept/agents/gui/audio_utils.py,sha256=piA_dc36io1sYqLF6QArS4AMl-cfDa001jGhYz5LkB4,4279
14
14
  flowcept/agents/gui/gui_utils.py,sha256=cQVhOgnfxJNUVZyXyO8f40nB1yaKAKVtBrwQmJjL0B0,14933
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=Mj6dMdrnJfq-bibi1XQVNZ8zx5MZUwxTvYY_qijPfoI,3894
20
- flowcept/agents/prompts/in_memory_query_prompts.py,sha256=j5lZLuQdGzKFRiYaNrNThMwHslPUWwDARdufmFxMoTQ,19562
19
+ flowcept/agents/prompts/general_prompts.py,sha256=b0QhnF-ytIE1_WWrgpamC4VybjS8KuS051DgVVt8r2U,3961
20
+ flowcept/agents/prompts/in_memory_query_prompts.py,sha256=iRaGySybNxZf5vuQ3n9cb14VNk6bMQ0z3tn2mVVke0E,19817
21
21
  flowcept/agents/tools/__init__.py,sha256=Xqz2E4-LL_7DDcm1XYJFx2f5RdAsjeTpOJb_DPC7xyc,27
22
- flowcept/agents/tools/general_tools.py,sha256=KS7ZTf1UbTxg0yQ6zCxh1g3NzcliYKWdurMArhPowxs,3248
22
+ flowcept/agents/tools/general_tools.py,sha256=yOxNb7ZgrP93Ky85cdjiZkCZSH_1biB0pA2K1e9bzFQ,5038
23
23
  flowcept/agents/tools/in_memory_queries/__init__.py,sha256=K8-JI_lXUgquKkgga8Nef8AntGg_logQtjjQjaEE7yI,39
24
24
  flowcept/agents/tools/in_memory_queries/in_memory_queries_tools.py,sha256=GcfAiUBhQ1DU3QKk0kAy9TSq8XmZw691Xs0beZoO76A,25984
25
25
  flowcept/agents/tools/in_memory_queries/pandas_agent_utils.py,sha256=xyrZupR86qoUptnnQ7PeF0LTzSOquEK2cjc0ghT1KBs,9018
@@ -46,7 +46,7 @@ flowcept/commons/daos/mq_dao/__init__.py,sha256=Xxm4FmbBUZDQ7XIAmSFbeKE_AdHsbgFm
46
46
  flowcept/commons/daos/mq_dao/mq_dao_base.py,sha256=EL8eQedvNLsVLMz4oHemBAsR1S6xFZiezM8dIqKmmCA,9696
47
47
  flowcept/commons/daos/mq_dao/mq_dao_kafka.py,sha256=kjZqPLIu5PaNeM4IDvOxkDRVGTd5UWwq3zhDvVirqW8,5067
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=WKPoMPBSce4shqbBkgsnuqJAJoZZ4U_hdebhyFqtejQ,5535
49
+ flowcept/commons/daos/mq_dao/mq_dao_redis.py,sha256=ejBMxImA-h2KuMEAk3l7aU0chCcObCbUXEOXM6L4Zhc,5571
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
52
  flowcept/commons/flowcept_dataclasses/task_object.py,sha256=XLFD8YTWsyDLSRcgZc5qK2a9yk97XnqZoUAL4T6HNPE,8110
@@ -54,7 +54,7 @@ flowcept/commons/flowcept_dataclasses/telemetry.py,sha256=9_5ONCo-06r5nKHXmi5HfI
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=JcUQXJfEjmg-KQsolIN5Ul7vbSxZUg8QTWaGAahZKTE,15251
57
+ flowcept/flowcept_api/flowcept_controller.py,sha256=jfssXUvG55RVXJBziq-lXekt7Dog3mAalo5Zsp_7_to,16060
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
@@ -94,9 +94,9 @@ flowcept/instrumentation/flowcept_loop.py,sha256=jea_hYPuXg5_nOWf-nNb4vx8A__OBM4
94
94
  flowcept/instrumentation/flowcept_task.py,sha256=EmKODpjl8usNklKSVmsKYyCa6gC_QMqKhAr3DKaw44s,8199
95
95
  flowcept/instrumentation/flowcept_torch.py,sha256=kkZQRYq6cDBpdBU6J39_4oKRVkhyF3ODlz8ydV5WGKw,23455
96
96
  flowcept/instrumentation/task_capture.py,sha256=1g9EtLdqsTB0RHsF-eRmA2Xh9l_YqTd953d4v89IC24,8287
97
- resources/sample_settings.yaml,sha256=bOyHdzQe-CJ7nmpqstlDfk9fuQMHerS95Oy2BGdMLds,6779
98
- flowcept-0.9.7.dist-info/METADATA,sha256=gy3Ul7p8x8MSFq17wOuUtuLMzZay4no0-yFmfEl_Ni0,32246
99
- flowcept-0.9.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
- flowcept-0.9.7.dist-info/entry_points.txt,sha256=i8q67WE0201rVxYI2lyBtS52shvgl93x2Szp4q8zMlw,47
101
- flowcept-0.9.7.dist-info/licenses/LICENSE,sha256=r5-2P6tFTuRGWT5TiX32s1y0tnp4cIqBEC1QjTaXe2k,1086
102
- flowcept-0.9.7.dist-info/RECORD,,
97
+ resources/sample_settings.yaml,sha256=2IxbkbpFEymoUk-qcR70wsdXX2Y2cVP31cVWDVy0BNg,6779
98
+ flowcept-0.9.9.dist-info/METADATA,sha256=NoHey7ehIO4kN0PrOCbz4z-TQ1Susn_yFOTsbd464uk,32439
99
+ flowcept-0.9.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
+ flowcept-0.9.9.dist-info/entry_points.txt,sha256=i8q67WE0201rVxYI2lyBtS52shvgl93x2Szp4q8zMlw,47
101
+ flowcept-0.9.9.dist-info/licenses/LICENSE,sha256=r5-2P6tFTuRGWT5TiX32s1y0tnp4cIqBEC1QjTaXe2k,1086
102
+ flowcept-0.9.9.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
- flowcept_version: 0.9.7 # Version of the Flowcept package. This setting file is compatible with this version.
1
+ flowcept_version: 0.9.9 # 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.