zrb 1.5.8__py3-none-any.whl → 1.5.10__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.
zrb/task/llm/prompt.py CHANGED
@@ -9,12 +9,29 @@ from zrb.task.llm.context import get_default_context # Updated import
9
9
  from zrb.util.attr import get_attr, get_str_attr
10
10
 
11
11
 
12
- def get_system_prompt(
12
+ def get_persona(
13
+ ctx: AnyContext,
14
+ persona_attr: StrAttr | None,
15
+ render_persona: bool,
16
+ ) -> str:
17
+ """Gets the persona, prioritizing task-specific, then default."""
18
+ persona = get_attr(
19
+ ctx,
20
+ persona_attr,
21
+ None,
22
+ auto_render=render_persona,
23
+ )
24
+ if persona is not None:
25
+ return persona
26
+ return default_llm_config.get_default_persona() or ""
27
+
28
+
29
+ def get_base_system_prompt(
13
30
  ctx: AnyContext,
14
31
  system_prompt_attr: StrAttr | None,
15
32
  render_system_prompt: bool,
16
33
  ) -> str:
17
- """Gets the system prompt, rendering if configured and handling defaults."""
34
+ """Gets the base system prompt, prioritizing task-specific, then default."""
18
35
  system_prompt = get_attr(
19
36
  ctx,
20
37
  system_prompt_attr,
@@ -23,7 +40,51 @@ def get_system_prompt(
23
40
  )
24
41
  if system_prompt is not None:
25
42
  return system_prompt
26
- return default_llm_config.get_default_system_prompt()
43
+ return default_llm_config.get_default_system_prompt() or ""
44
+
45
+
46
+ def get_special_instruction_prompt(
47
+ ctx: AnyContext,
48
+ special_instruction_prompt_attr: StrAttr | None,
49
+ render_special_instruction_prompt: bool,
50
+ ) -> str:
51
+ """Gets the special instruction prompt, prioritizing task-specific, then default."""
52
+ special_instruction = get_attr(
53
+ ctx,
54
+ special_instruction_prompt_attr,
55
+ None,
56
+ auto_render=render_special_instruction_prompt,
57
+ )
58
+ if special_instruction is not None:
59
+ return special_instruction
60
+ return default_llm_config.get_default_special_instruction_prompt() or ""
61
+
62
+
63
+ def get_combined_system_prompt(
64
+ ctx: AnyContext,
65
+ persona_attr: StrAttr | None,
66
+ render_persona: bool,
67
+ system_prompt_attr: StrAttr | None,
68
+ render_system_prompt: bool,
69
+ special_instruction_prompt_attr: StrAttr | None,
70
+ render_special_instruction_prompt: bool,
71
+ ) -> str:
72
+ """Combines persona, base system prompt, and special instructions."""
73
+ persona = get_persona(ctx, persona_attr, render_persona)
74
+ base_system_prompt = get_base_system_prompt(
75
+ ctx, system_prompt_attr, render_system_prompt
76
+ )
77
+ special_instruction = get_special_instruction_prompt(
78
+ ctx, special_instruction_prompt_attr, render_special_instruction_prompt
79
+ )
80
+ parts = []
81
+ if persona:
82
+ parts.append(persona)
83
+ if base_system_prompt:
84
+ parts.append(base_system_prompt)
85
+ if special_instruction:
86
+ parts.append(special_instruction)
87
+ return "\n\n".join(parts).strip()
27
88
 
28
89
 
29
90
  def get_user_message(
zrb/task/llm_task.py CHANGED
@@ -15,6 +15,8 @@ from zrb.input.any_input import AnyInput
15
15
  from zrb.task.any_task import AnyTask
16
16
  from zrb.task.base_task import BaseTask
17
17
  from zrb.task.llm.agent import get_agent, run_agent_iteration
18
+
19
+ # No longer need llm_config here
18
20
  from zrb.task.llm.config import (
19
21
  get_model,
20
22
  get_model_settings,
@@ -30,9 +32,9 @@ from zrb.task.llm.history import (
30
32
  from zrb.task.llm.history_summarization import maybe_summarize_history
31
33
  from zrb.task.llm.prompt import (
32
34
  build_user_prompt,
35
+ get_combined_system_prompt,
33
36
  get_context_enrichment_prompt,
34
37
  get_summarization_prompt,
35
- get_system_prompt,
36
38
  )
37
39
  from zrb.util.cli.style import stylize_faint
38
40
  from zrb.xcom.xcom import Xcom
@@ -62,12 +64,16 @@ class LLMTask(BaseTask):
62
64
  ModelSettings | Callable[[AnySharedContext], ModelSettings] | None
63
65
  ) = None,
64
66
  agent: Agent | Callable[[AnySharedContext], Agent] | None = None,
67
+ persona: StrAttr | None = None,
68
+ render_persona: bool = True,
65
69
  system_prompt: StrAttr | None = None,
66
70
  render_system_prompt: bool = True,
71
+ special_instruction_prompt: StrAttr | None = None,
72
+ render_special_instruction_prompt: bool = True,
67
73
  message: StrAttr | None = None,
68
74
  summarization_prompt: StrAttr | None = None,
69
75
  render_summarization_prompt: bool = True,
70
- enrich_context: BoolAttr = False,
76
+ enrich_context: BoolAttr | None = None,
71
77
  render_enrich_context: bool = True,
72
78
  context_enrichment_prompt: StrAttr | None = None,
73
79
  render_context_enrichment_prompt: bool = True,
@@ -78,28 +84,23 @@ class LLMTask(BaseTask):
78
84
  list[MCPServer] | Callable[[AnySharedContext], list[MCPServer]]
79
85
  ) = [],
80
86
  conversation_history: (
81
- ConversationHistoryData # Use the new BaseModel
82
- | Callable[
83
- [AnySharedContext], ConversationHistoryData | dict | list
84
- ] # Allow returning raw dict/list too
85
- | dict # Allow raw dict
86
- | list # Allow raw list (old format)
87
- ) = ConversationHistoryData(), # Default to an empty model instance
87
+ ConversationHistoryData
88
+ | Callable[[AnySharedContext], ConversationHistoryData | dict | list]
89
+ | dict
90
+ | list
91
+ ) = ConversationHistoryData(),
88
92
  conversation_history_reader: (
89
93
  Callable[[AnySharedContext], ConversationHistoryData | dict | list | None]
90
94
  | None
91
- # Allow returning raw dict/list or None
92
95
  ) = None,
93
96
  conversation_history_writer: (
94
- Callable[[AnySharedContext, ConversationHistoryData], None]
95
- | None
96
- # Writer expects the model instance
97
+ Callable[[AnySharedContext, ConversationHistoryData], None] | None
97
98
  ) = None,
98
99
  conversation_history_file: StrAttr | None = None,
99
100
  render_history_file: bool = True,
100
- summarize_history: BoolAttr = True,
101
+ summarize_history: BoolAttr | None = None,
101
102
  render_summarize_history: bool = True,
102
- history_summarization_threshold: IntAttr = 5, # -1 means no summarization trigger
103
+ history_summarization_threshold: IntAttr | None = None,
103
104
  render_history_summarization_threshold: bool = True,
104
105
  execute_condition: bool | str | Callable[[AnySharedContext], bool] = True,
105
106
  retries: int = 2,
@@ -147,8 +148,12 @@ class LLMTask(BaseTask):
147
148
  self._render_model_api_key = render_model_api_key
148
149
  self._model_settings = model_settings
149
150
  self._agent = agent
151
+ self._persona = persona
152
+ self._render_persona = render_persona
150
153
  self._system_prompt = system_prompt
151
154
  self._render_system_prompt = render_system_prompt
155
+ self._special_instruction_prompt = special_instruction_prompt
156
+ self._render_special_instruction_prompt = render_special_instruction_prompt
152
157
  self._message = message
153
158
  self._summarization_prompt = summarization_prompt
154
159
  self._render_summarization_prompt = render_summarization_prompt
@@ -211,10 +216,15 @@ class LLMTask(BaseTask):
211
216
  summarization_prompt_attr=self._summarization_prompt,
212
217
  render_summarization_prompt=self._render_summarization_prompt,
213
218
  )
214
- system_prompt = get_system_prompt(
219
+ # Get the combined system prompt using the new getter
220
+ system_prompt = get_combined_system_prompt(
215
221
  ctx=ctx,
222
+ persona_attr=self._persona,
223
+ render_persona=self._render_persona,
216
224
  system_prompt_attr=self._system_prompt,
217
225
  render_system_prompt=self._render_system_prompt,
226
+ special_instruction_prompt_attr=self._special_instruction_prompt,
227
+ render_special_instruction_prompt=self._render_special_instruction_prompt,
218
228
  )
219
229
  # 1. Prepare initial state (read history, get initial context)
220
230
  history_list, conversation_context = await prepare_initial_state(
zrb/task/scheduler.py CHANGED
@@ -12,7 +12,6 @@ from zrb.task.any_task import AnyTask
12
12
  from zrb.task.base_trigger import BaseTrigger
13
13
  from zrb.util.attr import get_str_attr
14
14
  from zrb.util.cron import match_cron
15
- from zrb.xcom.xcom import Xcom
16
15
 
17
16
 
18
17
  class Scheduler(BaseTrigger):
@@ -77,6 +76,6 @@ class Scheduler(BaseTrigger):
77
76
  ctx.print(f"Current time: {now}")
78
77
  if match_cron(cron_pattern, now):
79
78
  ctx.print(f"Matching {now} with pattern: {cron_pattern}")
80
- xcom: Xcom = ctx.xcom[self.queue_name]
79
+ xcom = self.get_exchange_xcom(ctx.session)
81
80
  xcom.push(now)
82
81
  await asyncio.sleep(60)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.5.8
3
+ Version: 1.5.10
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -26,7 +26,7 @@ Requires-Dist: openai (>=1.70.0,<2.0.0) ; extra == "rag" or extra == "all"
26
26
  Requires-Dist: pdfplumber (>=0.11.6,<0.12.0) ; extra == "rag" or extra == "all"
27
27
  Requires-Dist: playwright (>=1.51.0,<2.0.0) ; extra == "playwright" or extra == "all"
28
28
  Requires-Dist: psutil (>=7.0.0,<8.0.0)
29
- Requires-Dist: pydantic-ai (>=0.0.52,<0.0.53)
29
+ Requires-Dist: pydantic-ai (>=0.1.2,<0.2.0)
30
30
  Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
31
31
  Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
32
32
  Requires-Dist: requests (>=2.32.3,<3.0.0)
@@ -13,7 +13,7 @@ zrb/builtin/llm/llm_chat.py,sha256=XL5HK_o1EejkYS0fJIBI39vApuqYYsGHFSigvXfS7CI,4
13
13
  zrb/builtin/llm/previous-session.js,sha256=xMKZvJoAbrwiyHS0OoPrWuaKxWYLoyR5sguePIoCjTY,816
14
14
  zrb/builtin/llm/tool/api.py,sha256=yR9I0ZsI96OeQl9pgwORMASVuXsAL0a89D_iPS4C8Dc,1699
15
15
  zrb/builtin/llm/tool/cli.py,sha256=_CNEmEc6K2Z0i9ppYeM7jGpqaEdT3uxaWQatmxP3jKE,858
16
- zrb/builtin/llm/tool/file.py,sha256=ecFBmbMaqCIfqNGTmvd-Yt3vLtKuQ15KbjXlnIMWdho,19269
16
+ zrb/builtin/llm/tool/file.py,sha256=e2-Mh9AeltCJGZrvhuMFMzmgQgsQbaxvSpAzcruIB9o,19222
17
17
  zrb/builtin/llm/tool/rag.py,sha256=45t0o88l7F62oq2P61NnC1hsZJ4h72dZsVQfcsOIUc8,7521
18
18
  zrb/builtin/llm/tool/web.py,sha256=4qzom9xX-JxztIaTWneNfyTRlgweHIxzC1uSEAxJ00A,5507
19
19
  zrb/builtin/md5.py,sha256=0pNlrfZA0wlZlHvFHLgyqN0JZJWGKQIF5oXxO44_OJk,949
@@ -239,7 +239,7 @@ zrb/input/option_input.py,sha256=TQB82ko5odgzkULEizBZi0e9TIHEbIgvdP0AR3RhA74,213
239
239
  zrb/input/password_input.py,sha256=szBojWxSP9QJecgsgA87OIYwQrY2AQ3USIKdDZY6snU,1465
240
240
  zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
241
241
  zrb/input/text_input.py,sha256=shvVbc2U8Is36h23M5lcW8IEwKc9FR-4uEPZZroj3rU,3377
242
- zrb/llm_config.py,sha256=88EboqaAercNY6kgU9Sl4ua361K6x-qTsAeDlbP9eEE,7514
242
+ zrb/llm_config.py,sha256=sf2cMjD-eSTvOywT1qKVeSftRmxLQ92K3mzho6yP2S8,8952
243
243
  zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
244
  zrb/runner/cli.py,sha256=0mT0oO_yEhc8N4nYCJNujhgLjVykZ0B-kAOFXyAvAqM,6672
245
245
  zrb/runner/common_util.py,sha256=0zhZn1Jdmr194_nsL5_L-Kn9-_NDpMTI2z6_LXUQJ-U,1369
@@ -297,8 +297,15 @@ zrb/session_state_logger/any_session_state_logger.py,sha256=OEP7RQD6sPSJP0OY8oDK
297
297
  zrb/session_state_logger/file_session_state_logger.py,sha256=1ue7-Bcwg4wlLn2G_7ARR4Rij2zUISj_Y56VBQsCaMQ,3666
298
298
  zrb/session_state_logger/session_state_logger_factory.py,sha256=wXf2DVmeRmx399MFYYty6uNcPZMcf7iayHBYCLGlhfc,189
299
299
  zrb/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
300
- zrb/task/any_task.py,sha256=9rCdKe-Sayr34Han9AsbhRxFpkbk6Rteg1DOyETulwQ,4917
301
- zrb/task/base_task.py,sha256=H1D2KyJ9qK0GIPJ4kYyvfRe7fseJibmLVGjj8iRuLs4,21320
300
+ zrb/task/any_task.py,sha256=zklUjkLRQ62TEvfnOUUYfXChj8Zk4igee3w8V3_rN08,5846
301
+ zrb/task/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
302
+ zrb/task/base/context.py,sha256=73k3fKwup0AJwTTLpay0f_-axJextaxgbTem4w4Bmas,3670
303
+ zrb/task/base/dependencies.py,sha256=Kcxhn7z4OU9Fc_y-cD1Sc96wgNXs0VDoi8r5cJMu0oY,1952
304
+ zrb/task/base/execution.py,sha256=lB6cfivk-EM6sZSaPjYs_ufb7jb-A2jLJNhBupwBFgI,11101
305
+ zrb/task/base/lifecycle.py,sha256=YIugyqRmEKMnc9MTCDEZr9jVhie3Kwt7LTMtAVAN9Ks,7278
306
+ zrb/task/base/monitoring.py,sha256=UAOEcPiYNtZR4FFxzWCosuOEFE_P3c4GT5vAhQmohqI,5663
307
+ zrb/task/base/operators.py,sha256=uAMFqpZJsPnCrojgOl1FUDXTS15mtOa_IqiAXltyYRU,1576
308
+ zrb/task/base_task.py,sha256=3MLPYDzNgjIJiQTxSyKLmvG_FspOl61htuRZG7l34QA,8915
302
309
  zrb/task/base_trigger.py,sha256=jC722rDvodaBLeNaFghkTyv1u0QXrK6BLZUUqcmBJ7Q,4581
303
310
  zrb/task/cmd_task.py,sha256=f1OWajOBmdtx2QcXBr_8s6o82Fp4UTLqCXJqp2gxwzU,10750
304
311
  zrb/task/http_check.py,sha256=Gf5rOB2Se2EdizuN9rp65HpGmfZkGc-clIAlHmPVehs,2565
@@ -306,19 +313,19 @@ zrb/task/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
306
313
  zrb/task/llm/agent.py,sha256=2u1zlX41oBzMKozXWXD3gDEOzOsHNsFpedRcJXbUNHI,5105
307
314
  zrb/task/llm/config.py,sha256=fXasnGb_DVTJIeY--HZ8bf1jd7iCUNttfUDJB5PvHRk,3071
308
315
  zrb/task/llm/context.py,sha256=JAI1DqqiXlDkyL4aEXVyeutU8K5YfdSsWMbzx1rxMZU,3281
309
- zrb/task/llm/context_enrichment.py,sha256=nnALfQ_jnRpQZJad0pgOY8JkOb9Au4LoH_NNhw4rTMQ,4442
316
+ zrb/task/llm/context_enrichment.py,sha256=zz2hmJZgXRa6354eTz8fAz3NclGgwD5VciWzD_mFTEM,4641
310
317
  zrb/task/llm/error.py,sha256=YOwnEdFMtqOlaiA83tDHpC6uh2_9r5NeS-inrlb5a8E,3622
311
318
  zrb/task/llm/history.py,sha256=LnrJdXLyo2qz-bNCwLorhoqGmgSiPTUU0bzY63w67-E,9257
312
- zrb/task/llm/history_summarization.py,sha256=MW9wg6m0y2Vjcdyvh-NCOCyYWUZeqamlL3z3LCkn1J0,5996
319
+ zrb/task/llm/history_summarization.py,sha256=UaeepcIVMTxJTwqy3V22rpeBXXN04KLvEzOsFtWmyDM,6259
313
320
  zrb/task/llm/print_node.py,sha256=Dkb0xFyEXpNRKFRCM4Md0lfg6K3nI0t8yH3Abh20PjE,4430
314
- zrb/task/llm/prompt.py,sha256=PmzeSeUBoqZqqHox1Kq8FkikvmB2lNA3hus-pybXAQg,2719
321
+ zrb/task/llm/prompt.py,sha256=Xql45nZfkB9BXbVVxfKiawtnAVCao2QhaowVdL7qTLg,4627
315
322
  zrb/task/llm/tool_wrapper.py,sha256=gZgoxcuOCgAVDPnLqfJ3ps57ZCVQi7q68z_KnS5Mx1U,3350
316
323
  zrb/task/llm/typing.py,sha256=c8VAuPBw_4A3DxfYdydkgedaP-LU61W9_wj3m3CAX1E,58
317
- zrb/task/llm_task.py,sha256=mrv7AVZd2LEz_z6CqC2gN6iqg27riUyrpTH99HdqpX0,13731
324
+ zrb/task/llm_task.py,sha256=uLptMfoRawCCPo8_DSneKd8Uag9WDCXkU0oOvO5Lh0M,14218
318
325
  zrb/task/make_task.py,sha256=PD3b_aYazthS8LHeJsLAhwKDEgdurQZpymJDKeN60u0,2265
319
326
  zrb/task/rsync_task.py,sha256=GSL9144bmp6F0EckT6m-2a1xG25AzrrWYzH4k3SVUKM,6370
320
327
  zrb/task/scaffolder.py,sha256=rME18w1HJUHXgi9eTYXx_T2G4JdqDYzBoNOkdOOo5-o,6806
321
- zrb/task/scheduler.py,sha256=aSDF_WtDbmwrYXaVo3BesCG8w21UNV8XLtn-5x9GWzY,3137
328
+ zrb/task/scheduler.py,sha256=5xoet0bMjVq0JKwSwwivD1Jo84wwwA2PrL5WaKwJAGA,3110
322
329
  zrb/task/task.py,sha256=KCrCaWYOQQvv1RJsYtHDeo9RBFmlXQ28oKyEFU4Q7pA,73
323
330
  zrb/task/tcp_check.py,sha256=P_QgGqwd5dXDaud3oQRxe_WuxyxG4s7CTY2wDk9Qcu0,2511
324
331
  zrb/task_status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -355,7 +362,7 @@ zrb/util/string/name.py,sha256=8picJfUBXNpdh64GNaHv3om23QHhUZux7DguFLrXHp8,1163
355
362
  zrb/util/todo.py,sha256=1nDdwPc22oFoK_1ZTXyf3638Bg6sqE2yp_U4_-frHoc,16015
356
363
  zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
357
364
  zrb/xcom/xcom.py,sha256=o79rxR9wphnShrcIushA0Qt71d_p3ZTxjNf7x9hJB78,1571
358
- zrb-1.5.8.dist-info/METADATA,sha256=Av7ZK7PbcYfMR6KUZ0IjN39HKabpxoWNUdAxP7yli_E,8470
359
- zrb-1.5.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
360
- zrb-1.5.8.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
361
- zrb-1.5.8.dist-info/RECORD,,
365
+ zrb-1.5.10.dist-info/METADATA,sha256=ukEcYJvB_RA35-S1X5JPJT8v3qq5oN2Y2L2sYp4hiic,8469
366
+ zrb-1.5.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
367
+ zrb-1.5.10.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
368
+ zrb-1.5.10.dist-info/RECORD,,
File without changes