zrb 1.6.9__py3-none-any.whl → 1.7.1__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/__main__.py +14 -19
- zrb/builtin/llm/chat_session.py +5 -2
- zrb/builtin/llm/llm_ask.py +35 -12
- zrb/callback/callback.py +17 -3
- zrb/config.py +4 -0
- zrb/llm_config.py +36 -2
- zrb/runner/cli.py +7 -1
- zrb/runner/web_app.py +1 -1
- zrb/task/llm/context_enrichment.py +5 -2
- zrb/task/llm/prompt.py +13 -1
- zrb/task/llm_task.py +10 -8
- zrb/util/init_path.py +18 -0
- {zrb-1.6.9.dist-info → zrb-1.7.1.dist-info}/METADATA +2 -2
- {zrb-1.6.9.dist-info → zrb-1.7.1.dist-info}/RECORD +16 -15
- {zrb-1.6.9.dist-info → zrb-1.7.1.dist-info}/WHEEL +0 -0
- {zrb-1.6.9.dist-info → zrb-1.7.1.dist-info}/entry_points.txt +0 -0
zrb/__main__.py
CHANGED
@@ -6,6 +6,7 @@ from zrb.config import CFG
|
|
6
6
|
from zrb.runner.cli import cli
|
7
7
|
from zrb.util.cli.style import stylize_error, stylize_faint, stylize_warning
|
8
8
|
from zrb.util.group import NodeNotFoundError
|
9
|
+
from zrb.util.init_path import get_init_path_list
|
9
10
|
from zrb.util.load import load_file, load_module
|
10
11
|
|
11
12
|
|
@@ -35,18 +36,27 @@ def serve_cli():
|
|
35
36
|
# load init modules
|
36
37
|
for init_module in CFG.INIT_MODULES:
|
37
38
|
CFG.LOGGER.info(f"Loading {init_module}")
|
38
|
-
|
39
|
-
|
39
|
+
try:
|
40
|
+
load_module(init_module)
|
41
|
+
except BaseException as e:
|
42
|
+
print(stylize_error(f"{e}"), file=sys.stderr)
|
43
|
+
zrb_init_path_list = get_init_path_list()
|
40
44
|
# load init scripts
|
41
45
|
for init_script in CFG.INIT_SCRIPTS:
|
42
46
|
abs_init_script = os.path.abspath(os.path.expanduser(init_script))
|
43
47
|
if abs_init_script not in zrb_init_path_list:
|
44
48
|
CFG.LOGGER.info(f"Loading {abs_init_script}")
|
45
|
-
|
49
|
+
try:
|
50
|
+
load_file(abs_init_script, -1)
|
51
|
+
except BaseException as e:
|
52
|
+
print(stylize_error(f"{e}"), file=sys.stderr)
|
46
53
|
# load zrb init
|
47
54
|
for zrb_init_path in zrb_init_path_list:
|
48
55
|
CFG.LOGGER.info(f"Loading {zrb_init_path}")
|
49
|
-
|
56
|
+
try:
|
57
|
+
load_file(zrb_init_path)
|
58
|
+
except BaseException as e:
|
59
|
+
print(stylize_error(f"{e}"), file=sys.stderr)
|
50
60
|
# run the CLI
|
51
61
|
cli.run(sys.argv[1:])
|
52
62
|
except KeyboardInterrupt:
|
@@ -59,18 +69,3 @@ def serve_cli():
|
|
59
69
|
except NodeNotFoundError as e:
|
60
70
|
print(stylize_error(f"{e}"), file=sys.stderr)
|
61
71
|
sys.exit(1)
|
62
|
-
|
63
|
-
|
64
|
-
def _get_zrb_init_path_list() -> list[str]:
|
65
|
-
current_path = os.path.abspath(os.getcwd())
|
66
|
-
dir_path_list = [current_path]
|
67
|
-
while current_path != os.path.dirname(current_path): # Stop at root
|
68
|
-
current_path = os.path.dirname(current_path)
|
69
|
-
dir_path_list.append(current_path)
|
70
|
-
zrb_init_path_list = []
|
71
|
-
for current_path in dir_path_list[::-1]:
|
72
|
-
zrb_init_path = os.path.join(current_path, CFG.INIT_FILE_NAME)
|
73
|
-
CFG.LOGGER.info(f"Finding {zrb_init_path}")
|
74
|
-
if os.path.isfile(zrb_init_path):
|
75
|
-
zrb_init_path_list.append(zrb_init_path)
|
76
|
-
return zrb_init_path_list
|
zrb/builtin/llm/chat_session.py
CHANGED
@@ -98,7 +98,7 @@ async def _trigger_ask_and_wait_for_result(
|
|
98
98
|
return None
|
99
99
|
await _trigger_ask(ctx, user_prompt, previous_session_name, start_new)
|
100
100
|
result = await _wait_ask_result(ctx)
|
101
|
-
ctx.print(stylize_faint(
|
101
|
+
ctx.print(f"{stylize_faint('🤖 >>')} {result}", plain=True)
|
102
102
|
return result
|
103
103
|
|
104
104
|
|
@@ -150,7 +150,7 @@ async def _trigger_ask(
|
|
150
150
|
)
|
151
151
|
|
152
152
|
|
153
|
-
async def _wait_ask_result(ctx: AnyContext) -> str:
|
153
|
+
async def _wait_ask_result(ctx: AnyContext) -> str | None:
|
154
154
|
"""
|
155
155
|
Waits for and retrieves the LLM task result from the 'ask_result' XCom queue.
|
156
156
|
|
@@ -162,6 +162,9 @@ async def _wait_ask_result(ctx: AnyContext) -> str:
|
|
162
162
|
"""
|
163
163
|
while "ask_result" not in ctx.xcom or len(ctx.xcom.ask_result) == 0:
|
164
164
|
await asyncio.sleep(0.1)
|
165
|
+
if "ask_error" in ctx.xcom and len(ctx.xcom.ask_error) > 0:
|
166
|
+
ctx.xcom.ask_error.pop()
|
167
|
+
return None
|
165
168
|
return ctx.xcom.ask_result.pop()
|
166
169
|
|
167
170
|
|
zrb/builtin/llm/llm_ask.py
CHANGED
@@ -11,6 +11,7 @@ from zrb.builtin.llm.tool.file import (
|
|
11
11
|
search_files,
|
12
12
|
write_to_file,
|
13
13
|
)
|
14
|
+
from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
|
14
15
|
from zrb.builtin.llm.tool.web import (
|
15
16
|
create_search_internet_tool,
|
16
17
|
open_web_page,
|
@@ -114,6 +115,7 @@ llm_group.add_task(
|
|
114
115
|
task=llm_ask,
|
115
116
|
input_mapping=get_llm_ask_input_mapping,
|
116
117
|
result_queue="ask_result",
|
118
|
+
error_queue="ask_error",
|
117
119
|
session_name_queue="ask_session_name",
|
118
120
|
),
|
119
121
|
retries=0,
|
@@ -123,20 +125,41 @@ llm_group.add_task(
|
|
123
125
|
)
|
124
126
|
|
125
127
|
if CFG.LLM_ALLOW_ACCESS_LOCAL_FILE:
|
126
|
-
llm_ask.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
128
|
+
llm_ask.append_tool(
|
129
|
+
list_files,
|
130
|
+
read_from_file,
|
131
|
+
write_to_file,
|
132
|
+
search_files,
|
133
|
+
apply_diff,
|
134
|
+
create_sub_agent_tool(
|
135
|
+
tool_name="analyze_file",
|
136
|
+
tool_description="\n".join(
|
137
|
+
[
|
138
|
+
"Analyze file using LLM capability.",
|
139
|
+
"This tool can do:",
|
140
|
+
"- summarization",
|
141
|
+
"- outline/structure extraction",
|
142
|
+
"- code review",
|
143
|
+
"- other tasks requiring deep understanding.",
|
144
|
+
"Always use this tool to get deep understanding of file content",
|
145
|
+
]
|
146
|
+
),
|
147
|
+
sub_agent_system_prompt="\n".join(
|
148
|
+
[
|
149
|
+
"You are a file analyzer assistant",
|
150
|
+
"Your goal is to help the main asisstant by reading file",
|
151
|
+
"and perform necessary indepth analysis required by the main assistant",
|
152
|
+
]
|
153
|
+
),
|
154
|
+
sub_agent_tools=[read_from_file, search_files],
|
155
|
+
),
|
156
|
+
)
|
131
157
|
|
132
158
|
if CFG.LLM_ALLOW_ACCESS_SHELL:
|
133
|
-
llm_ask.
|
159
|
+
llm_ask.append_tool(run_shell_command)
|
134
160
|
|
135
161
|
if CFG.LLM_ALLOW_ACCESS_INTERNET:
|
136
|
-
llm_ask.
|
137
|
-
llm_ask.add_tool(search_wikipedia)
|
138
|
-
llm_ask.add_tool(search_arxiv)
|
162
|
+
llm_ask.append_tool(open_web_page, search_wikipedia, search_arxiv)
|
139
163
|
if CFG.SERP_API_KEY != "":
|
140
|
-
llm_ask.
|
141
|
-
llm_ask.
|
142
|
-
llm_ask.add_tool(get_current_weather)
|
164
|
+
llm_ask.append_tool(create_search_internet_tool(CFG.SERP_API_KEY))
|
165
|
+
llm_ask.append_tool(get_current_location, get_current_weather)
|
zrb/callback/callback.py
CHANGED
@@ -23,6 +23,7 @@ class Callback(AnyCallback):
|
|
23
23
|
input_mapping: StrDictAttr,
|
24
24
|
render_input_mapping: bool = True,
|
25
25
|
result_queue: str | None = None,
|
26
|
+
error_queue: str | None = None,
|
26
27
|
session_name_queue: str | None = None,
|
27
28
|
):
|
28
29
|
"""
|
@@ -35,6 +36,8 @@ class Callback(AnyCallback):
|
|
35
36
|
f-string like syntax.
|
36
37
|
result_queue: The name of the XCom queue in the parent session
|
37
38
|
to publish the task result.
|
39
|
+
result_queue: The name of the Xcom queue in the parent session
|
40
|
+
to publish the task error.
|
38
41
|
session_name_queue: The name of the XCom queue in the parent
|
39
42
|
session to publish the session name.
|
40
43
|
"""
|
@@ -42,6 +45,7 @@ class Callback(AnyCallback):
|
|
42
45
|
self._input_mapping = input_mapping
|
43
46
|
self._render_input_mapping = render_input_mapping
|
44
47
|
self._result_queue = result_queue
|
48
|
+
self._error_queue = error_queue
|
45
49
|
self._session_name_queue = session_name_queue
|
46
50
|
|
47
51
|
async def async_run(self, parent_session: AnySession, session: AnySession) -> Any:
|
@@ -58,9 +62,12 @@ class Callback(AnyCallback):
|
|
58
62
|
session.shared_ctx.input[name] = value
|
59
63
|
session.shared_ctx.input[to_snake_case(name)] = value
|
60
64
|
# run task and get result
|
61
|
-
|
62
|
-
|
63
|
-
|
65
|
+
try:
|
66
|
+
result = await self._task.async_run(session)
|
67
|
+
self._maybe_publish_result_to_parent_session(parent_session, result)
|
68
|
+
return result
|
69
|
+
except BaseException as e:
|
70
|
+
self._maybe_publish_error_to_parent_session(parent_session, e)
|
64
71
|
|
65
72
|
def _maybe_publish_session_name_to_parent_session(
|
66
73
|
self, parent_session: AnySession, session: AnySession
|
@@ -71,6 +78,13 @@ class Callback(AnyCallback):
|
|
71
78
|
value=session.name,
|
72
79
|
)
|
73
80
|
|
81
|
+
def _maybe_publish_error_to_parent_session(
|
82
|
+
self, parent_session: AnySession, error: Any
|
83
|
+
):
|
84
|
+
self._maybe_publish_to_parent_session(
|
85
|
+
parent_session=parent_session, xcom_name=self._error_queue, value=error
|
86
|
+
)
|
87
|
+
|
74
88
|
def _maybe_publish_result_to_parent_session(
|
75
89
|
self, parent_session: AnySession, result: Any
|
76
90
|
):
|
zrb/config.py
CHANGED
@@ -199,6 +199,10 @@ class Config:
|
|
199
199
|
def LLM_PERSONA(self) -> str | None:
|
200
200
|
return os.getenv("ZRB_LLM_PERSONA", None)
|
201
201
|
|
202
|
+
@property
|
203
|
+
def LLM_CODE_REVIEW_INSTRUCTION_PROMPT(self) -> str | None:
|
204
|
+
return os.getenv("ZRB_LLM_CODE_REVIEW_INSTRUCTION_PROMPT", None)
|
205
|
+
|
202
206
|
@property
|
203
207
|
def LLM_SPECIAL_INSTRUCTION_PROMPT(self) -> str | None:
|
204
208
|
return os.getenv("ZRB_LLM_SPECIAL_INSTRUCTION_PROMPT", None)
|
zrb/llm_config.py
CHANGED
@@ -20,6 +20,8 @@ Do not ask for confirmation unless strictly necessary due to ambiguity or
|
|
20
20
|
missing critical information.
|
21
21
|
Apply relevant domain knowledge and best practices.
|
22
22
|
Respond directly and concisely upon task completion or when clarification is essential.
|
23
|
+
Make sure to always include all necessary information in your final answer.
|
24
|
+
Remember that you have limited set of context.
|
23
25
|
""".strip()
|
24
26
|
|
25
27
|
DEFAULT_PERSONA = """
|
@@ -41,15 +43,35 @@ Output *only* the updated summary text.
|
|
41
43
|
DEFAULT_CONTEXT_ENRICHMENT_PROMPT = """
|
42
44
|
You are an information extraction assistant.
|
43
45
|
Your goal is to help main assistant to continue the conversation by extracting
|
44
|
-
important informations.
|
46
|
+
important long-term/short-term informations.
|
45
47
|
Analyze the conversation history and current context to extract key facts like
|
46
|
-
user_name, user_roles,
|
48
|
+
user_name, user_roles, user_address, etc.
|
47
49
|
Return only a JSON object containing a single key "response", whose value is
|
48
50
|
another JSON object with these details (i.e., {"response": {"context_name": "value"}}).
|
49
51
|
If no context can be extracted, return {"response": {}}.
|
50
52
|
""".strip()
|
51
53
|
|
52
54
|
DEFAULT_SPECIAL_INSTRUCTION_PROMPT = "" # Default to empty
|
55
|
+
DEFAULT_CODE_REVIEW_INSTRUCTION_PROMPT = """
|
56
|
+
Your goal is to review code provided by the user for correctness, readability,
|
57
|
+
performance, security, and maintainability.
|
58
|
+
Follow these principles:
|
59
|
+
1. **Correctness** Check whether the code performs the intended logic,
|
60
|
+
handles edge cases, and avoids obvious bugs.
|
61
|
+
2. **Readability** Evaluate naming conventions, code structure, and clarity.
|
62
|
+
Suggest improvements where code could be more understandable.
|
63
|
+
3. **Performance** Identify inefficient patterns or unnecessary operations.
|
64
|
+
Recommend optimizations only when they provide meaningful benefit.
|
65
|
+
4. **Security** Spot unsafe code, potential vulnerabilities, or bad practices
|
66
|
+
that could lead to security issues.
|
67
|
+
5. **Consistency** Ensure the code adheres to common language idioms,
|
68
|
+
style guides, and project conventions.
|
69
|
+
Provide clear, concise, and actionable feedback.
|
70
|
+
Use inline code examples when helpful.
|
71
|
+
Do not restate the code unnecessarily.
|
72
|
+
Focus on meaningful insights that help the user improve the code quality.
|
73
|
+
Avoid excessive nitpicking unless requested.
|
74
|
+
""".strip()
|
53
75
|
|
54
76
|
|
55
77
|
class LLMConfig:
|
@@ -62,6 +84,7 @@ class LLMConfig:
|
|
62
84
|
default_persona: str | None = None,
|
63
85
|
default_system_prompt: str | None = None,
|
64
86
|
default_special_instruction_prompt: str | None = None,
|
87
|
+
default_code_review_instruction_prompt: str | None = None,
|
65
88
|
default_summarization_prompt: str | None = None,
|
66
89
|
default_context_enrichment_prompt: str | None = None,
|
67
90
|
default_summarize_history: bool | None = None,
|
@@ -78,6 +101,9 @@ class LLMConfig:
|
|
78
101
|
self._default_persona = default_persona
|
79
102
|
self._default_system_prompt = default_system_prompt
|
80
103
|
self._default_special_instruction_prompt = default_special_instruction_prompt
|
104
|
+
self._default_code_review_instruction_prompt = (
|
105
|
+
default_code_review_instruction_prompt
|
106
|
+
)
|
81
107
|
self._default_summarization_prompt = default_summarization_prompt
|
82
108
|
self._default_context_enrichment_prompt = default_context_enrichment_prompt
|
83
109
|
self._default_summarize_history = default_summarize_history
|
@@ -149,6 +175,14 @@ class LLMConfig:
|
|
149
175
|
return CFG.LLM_PERSONA
|
150
176
|
return DEFAULT_PERSONA
|
151
177
|
|
178
|
+
@property
|
179
|
+
def default_code_review_instruction_prompt(self) -> str:
|
180
|
+
if self._default_code_review_instruction_prompt is not None:
|
181
|
+
return self._default_code_review_instruction_prompt
|
182
|
+
if CFG.LLM_CODE_REVIEW_INSTRUCTION_PROMPT is not None:
|
183
|
+
return CFG.LLM_CODE_REVIEW_INSTRUCTION_PROMPT
|
184
|
+
return DEFAULT_CODE_REVIEW_INSTRUCTION_PROMPT
|
185
|
+
|
152
186
|
@property
|
153
187
|
def default_special_instruction_prompt(self) -> str:
|
154
188
|
if self._default_special_instruction_prompt is not None:
|
zrb/runner/cli.py
CHANGED
@@ -19,6 +19,7 @@ from zrb.util.cli.style import (
|
|
19
19
|
stylize_section_header,
|
20
20
|
)
|
21
21
|
from zrb.util.group import extract_node_from_args, get_non_empty_subgroups, get_subtasks
|
22
|
+
from zrb.util.init_path import get_init_path_list
|
22
23
|
from zrb.util.string.conversion import double_quote
|
23
24
|
|
24
25
|
|
@@ -189,6 +190,11 @@ async def start_server(_: AnyContext):
|
|
189
190
|
|
190
191
|
app = create_web_app(cli, web_config, session_state_logger)
|
191
192
|
server = Server(
|
192
|
-
Config(
|
193
|
+
Config(
|
194
|
+
app=app,
|
195
|
+
host="0.0.0.0",
|
196
|
+
port=CFG.WEB_HTTP_PORT,
|
197
|
+
loop="asyncio",
|
198
|
+
)
|
193
199
|
)
|
194
200
|
await server.serve()
|
zrb/runner/web_app.py
CHANGED
@@ -53,7 +53,10 @@ async def enrich_context(
|
|
53
53
|
# The user prompt will now contain the dynamic data
|
54
54
|
user_prompt_data = "\n".join(
|
55
55
|
[
|
56
|
-
"Extract context from the following conversation info",
|
56
|
+
"Extract context from the following conversation info.",
|
57
|
+
"Maintain the relevant context and remove the irrelevant ones.",
|
58
|
+
"Restructure the context in a helpful way",
|
59
|
+
"Keep the context small",
|
57
60
|
f"Existing Context: {context_json}",
|
58
61
|
f"Conversation History: {history_json}",
|
59
62
|
]
|
@@ -86,7 +89,7 @@ async def enrich_context(
|
|
86
89
|
usage = enrichment_run.result.usage()
|
87
90
|
ctx.print(stylize_faint(f"[Token Usage] {usage}"), plain=True)
|
88
91
|
if response:
|
89
|
-
conversation_context
|
92
|
+
conversation_context = response
|
90
93
|
ctx.log_info("Context enriched based on history.")
|
91
94
|
ctx.log_info(
|
92
95
|
f"Updated conversation context: {json.dumps(conversation_context)}"
|
zrb/task/llm/prompt.py
CHANGED
@@ -52,7 +52,19 @@ def get_special_instruction_prompt(
|
|
52
52
|
)
|
53
53
|
if special_instruction is not None:
|
54
54
|
return special_instruction
|
55
|
-
|
55
|
+
aggregated_special_instruction = ""
|
56
|
+
if llm_config.default_code_review_instruction_prompt:
|
57
|
+
aggregated_special_instruction += "\n".join(
|
58
|
+
[
|
59
|
+
"# Code review instruction",
|
60
|
+
llm_config.default_code_review_instruction_prompt,
|
61
|
+
]
|
62
|
+
)
|
63
|
+
if llm_config.default_special_instruction_prompt:
|
64
|
+
aggregated_special_instruction += "\n" + "\n".join(
|
65
|
+
["# Code review instruction", llm_config.default_special_instruction_prompt]
|
66
|
+
)
|
67
|
+
return aggregated_special_instruction or ""
|
56
68
|
|
57
69
|
|
58
70
|
def get_combined_system_prompt(
|
zrb/task/llm_task.py
CHANGED
@@ -192,17 +192,19 @@ class LLMTask(BaseTask):
|
|
192
192
|
self._max_call_iteration = max_call_iteration
|
193
193
|
self._conversation_context = conversation_context
|
194
194
|
|
195
|
-
def add_tool(self, tool: ToolOrCallable):
|
196
|
-
self.append_tool(tool)
|
195
|
+
def add_tool(self, *tool: ToolOrCallable):
|
196
|
+
self.append_tool(*tool)
|
197
197
|
|
198
|
-
def append_tool(self, tool: ToolOrCallable):
|
199
|
-
|
198
|
+
def append_tool(self, *tool: ToolOrCallable):
|
199
|
+
for single_tool in tool:
|
200
|
+
self._additional_tools.append(single_tool)
|
200
201
|
|
201
|
-
def add_mcp_server(self, mcp_server: MCPServer):
|
202
|
-
self.append_mcp_server(mcp_server)
|
202
|
+
def add_mcp_server(self, *mcp_server: MCPServer):
|
203
|
+
self.append_mcp_server(*mcp_server)
|
203
204
|
|
204
|
-
def append_mcp_server(self, mcp_server: MCPServer):
|
205
|
-
|
205
|
+
def append_mcp_server(self, *mcp_server: MCPServer):
|
206
|
+
for single_mcp_server in mcp_server:
|
207
|
+
self._additional_mcp_servers.append(single_mcp_server)
|
206
208
|
|
207
209
|
def set_should_enrich_context(self, enrich_context: bool):
|
208
210
|
self._should_enrich_context = enrich_context
|
zrb/util/init_path.py
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.config import CFG
|
4
|
+
|
5
|
+
|
6
|
+
def get_init_path_list() -> list[str]:
|
7
|
+
current_path = os.path.abspath(os.getcwd())
|
8
|
+
dir_path_list = [current_path]
|
9
|
+
while current_path != os.path.dirname(current_path): # Stop at root
|
10
|
+
current_path = os.path.dirname(current_path)
|
11
|
+
dir_path_list.append(current_path)
|
12
|
+
zrb_init_path_list = []
|
13
|
+
for current_path in dir_path_list[::-1]:
|
14
|
+
zrb_init_path = os.path.join(current_path, CFG.INIT_FILE_NAME)
|
15
|
+
CFG.LOGGER.info(f"Finding {zrb_init_path}")
|
16
|
+
if os.path.isfile(zrb_init_path):
|
17
|
+
zrb_init_path_list.append(zrb_init_path)
|
18
|
+
return zrb_init_path_list
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: zrb
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.7.1
|
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.76.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.
|
29
|
+
Requires-Dist: pydantic-ai (>=0.2.7,<0.3.0)
|
30
30
|
Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
|
31
31
|
Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
|
32
32
|
Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
zrb/__init__.py,sha256=JgYNwsKYVzYzpoFXRn_LwuNFreMffPEvoSehTZisp4M,3103
|
2
|
-
zrb/__main__.py,sha256=
|
2
|
+
zrb/__main__.py,sha256=Kr_AkgmwBEycQcPVkZmrNh4hp2g62G-7ZXeOhJg0Qis,2603
|
3
3
|
zrb/attr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
zrb/attr/type.py,sha256=4TV5gPYMMrKh5V-yB6iRYKCbsXAH_AvGXMsjxKLHcUs,568
|
5
5
|
zrb/builtin/__init__.py,sha256=N-h-BoXWv0jYOldixXwgk6ekiWtrGZsGv57iqonsYdc,2657
|
@@ -9,10 +9,10 @@ zrb/builtin/git_subtree.py,sha256=7BKwOkVTWDrR0DXXQ4iJyHqeR6sV5VYRt8y_rEB0EHg,35
|
|
9
9
|
zrb/builtin/group.py,sha256=t008xLM4_fgbjfZrPoi_fQAnSHIo6MOiQSCHBO4GDYU,2379
|
10
10
|
zrb/builtin/http.py,sha256=sLqEczuSxGYXWzyJR6frGOHkPTviu4BeyroUr3-ZuAI,4322
|
11
11
|
zrb/builtin/jwt.py,sha256=kjCf8qt7tkW9BpBDRAVTMJaEPQGzCbO1wo9xt5JoM8A,2836
|
12
|
-
zrb/builtin/llm/chat_session.py,sha256=
|
12
|
+
zrb/builtin/llm/chat_session.py,sha256=HqFwrE1DiSlJrR-S3LRYWQBHkVsD-sfAV8_IIbnmtqY,6631
|
13
13
|
zrb/builtin/llm/history.py,sha256=cnkOyO43uiMQ9cEvmqk-pPoCk1zCAH_fwAqSgBtsjzY,3079
|
14
14
|
zrb/builtin/llm/input.py,sha256=Nw-26uTWp2QhUgKJcP_IMHmtk-b542CCSQ_vCOjhvhM,877
|
15
|
-
zrb/builtin/llm/llm_ask.py,sha256=
|
15
|
+
zrb/builtin/llm/llm_ask.py,sha256=7Dx5XWf0QAbPwscGohloKOp_iqoI-JuaVojTaCJL3Jc,5332
|
16
16
|
zrb/builtin/llm/previous-session.js,sha256=xMKZvJoAbrwiyHS0OoPrWuaKxWYLoyR5sguePIoCjTY,816
|
17
17
|
zrb/builtin/llm/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
18
|
zrb/builtin/llm/tool/api.py,sha256=yR9I0ZsI96OeQl9pgwORMASVuXsAL0a89D_iPS4C8Dc,1699
|
@@ -212,11 +212,11 @@ zrb/builtin/todo.py,sha256=pDbDKp94VHy-JsOr1sFtY8K4nIpNr1v6siqs5ptypsg,11568
|
|
212
212
|
zrb/builtin/uuid.py,sha256=lIdhSGzPQ1rixRzMXxQDcgFgV7W-gUduHIudZXlzZzg,5393
|
213
213
|
zrb/callback/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
214
214
|
zrb/callback/any_callback.py,sha256=PqEJYX_RigXEmoPniSeZusZBZSLWEoVIHvHk8MZ0Mvg,253
|
215
|
-
zrb/callback/callback.py,sha256=
|
215
|
+
zrb/callback/callback.py,sha256=mk_RIHuWi-oP5b81jfhzU6fruhsIjhRtKpwh2yYmsiM,3876
|
216
216
|
zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
217
217
|
zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
|
218
218
|
zrb/cmd/cmd_val.py,sha256=7Doowyg6BK3ISSGBLt-PmlhzaEkBjWWm51cED6fAUOQ,1014
|
219
|
-
zrb/config.py,sha256=
|
219
|
+
zrb/config.py,sha256=ZQKSNZmMfCyxTq7_4eCVzn_XsbMd7SlErjxAdB3wwoA,8708
|
220
220
|
zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
221
221
|
zrb/content_transformer/any_content_transformer.py,sha256=v8ZUbcix1GGeDQwB6OKX_1TjpY__ksxWVeqibwa_iZA,850
|
222
222
|
zrb/content_transformer/content_transformer.py,sha256=STl77wW-I69QaGzCXjvkppngYFLufow8ybPLSyAvlHs,2404
|
@@ -245,11 +245,11 @@ zrb/input/option_input.py,sha256=TQB82ko5odgzkULEizBZi0e9TIHEbIgvdP0AR3RhA74,213
|
|
245
245
|
zrb/input/password_input.py,sha256=szBojWxSP9QJecgsgA87OIYwQrY2AQ3USIKdDZY6snU,1465
|
246
246
|
zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
|
247
247
|
zrb/input/text_input.py,sha256=6T3MngWdUs0u0ZVs5Dl11w5KS7nN1RkgrIR_zKumzPM,3695
|
248
|
-
zrb/llm_config.py,sha256=
|
248
|
+
zrb/llm_config.py,sha256=h3LyjoOunc-2FxOOyCwM6Xcll3iXDykvvbV6xob-iB8,12244
|
249
249
|
zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
250
|
-
zrb/runner/cli.py,sha256=
|
250
|
+
zrb/runner/cli.py,sha256=knWItZ0fm25gy4hjSgjliCtMSP2i3m2N8rNpS8B9csQ,7034
|
251
251
|
zrb/runner/common_util.py,sha256=JDMcwvQ8cxnv9kQrAoKVLA40Q1omfv-u5_d5MvvwHeE,1373
|
252
|
-
zrb/runner/web_app.py,sha256=
|
252
|
+
zrb/runner/web_app.py,sha256=y7lA9urDg1ImZHFzhzogjVMVa9K8E-uSbMK_aNXYstM,2620
|
253
253
|
zrb/runner/web_config/config.py,sha256=0wR58KreAmawGGfamm0GLZY344HaXs7qfDgHLavBDwo,3125
|
254
254
|
zrb/runner/web_config/config_factory.py,sha256=GIvAwQKY_jkAb_IVt179KvphqHPY7gfBiQrZmELVQdQ,636
|
255
255
|
zrb/runner/web_route/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -320,15 +320,15 @@ zrb/task/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
320
320
|
zrb/task/llm/agent.py,sha256=6wGSsw03GdY_fj12CsJh7wxB6BnE13N8RYXaWfbiUsk,5451
|
321
321
|
zrb/task/llm/config.py,sha256=oGxHYMdIvhASnKwNuMPwcdeJiFfS0tNskzGHakpfpQU,3458
|
322
322
|
zrb/task/llm/context.py,sha256=U9a8lxa2ikz6my0Sd5vpO763legHrMHyvBjbrqNmv0Y,3838
|
323
|
-
zrb/task/llm/context_enrichment.py,sha256=
|
323
|
+
zrb/task/llm/context_enrichment.py,sha256=kGFEwma06edLygtEvJ4331i39rmEwdDTSrXm-G1LolM,6624
|
324
324
|
zrb/task/llm/error.py,sha256=27DQXSG8SH1-XuvXFdZQKzP39wZDWmd_YnSTz6DJKKI,3690
|
325
325
|
zrb/task/llm/history.py,sha256=3WMXoi7RquxosXQf3iv2_BCeF8iKtY1f407pR71xERs,7745
|
326
326
|
zrb/task/llm/history_summarization.py,sha256=n3GbgwXlDIkgpJppMGfpqF_8Wpi9yAoZYh46O1pFQeU,6432
|
327
327
|
zrb/task/llm/print_node.py,sha256=bpISOUxSH_JBLR-4Nq6-iLrzNWFagrKFX6u8ogYYMw8,4395
|
328
|
-
zrb/task/llm/prompt.py,sha256=
|
328
|
+
zrb/task/llm/prompt.py,sha256=AUuyxjFgdK72yFNmNqsUDe55wjjxjK37vL7q7XPcgt8,4332
|
329
329
|
zrb/task/llm/tool_wrapper.py,sha256=Xygd4VCY3ykjVv63pqlTI16ZG41ySkp683_5VTnL-Zo,6481
|
330
330
|
zrb/task/llm/typing.py,sha256=c8VAuPBw_4A3DxfYdydkgedaP-LU61W9_wj3m3CAX1E,58
|
331
|
-
zrb/task/llm_task.py,sha256=
|
331
|
+
zrb/task/llm_task.py,sha256=Yav1pmV26Eh4h9xTh16dN-DbTvhfYINI0EDp_ptJHLg,15643
|
332
332
|
zrb/task/make_task.py,sha256=PD3b_aYazthS8LHeJsLAhwKDEgdurQZpymJDKeN60u0,2265
|
333
333
|
zrb/task/rsync_task.py,sha256=GSL9144bmp6F0EckT6m-2a1xG25AzrrWYzH4k3SVUKM,6370
|
334
334
|
zrb/task/scaffolder.py,sha256=rME18w1HJUHXgi9eTYXx_T2G4JdqDYzBoNOkdOOo5-o,6806
|
@@ -360,6 +360,7 @@ zrb/util/file.py,sha256=Y5pRJxkpshyELxsv8qw_gp1qM5OXgeDwYXqt7Y6Lqu8,2242
|
|
360
360
|
zrb/util/git.py,sha256=gS_Y9sQgJbY0PfgSQiowLvV3Nf0y9C8nT3j6z6oEsG8,8186
|
361
361
|
zrb/util/git_subtree.py,sha256=E_UB5OIgm8WkHL9beifRxpZ25_BB9p1H578OhLZTgRU,4611
|
362
362
|
zrb/util/group.py,sha256=T82yr3qg9I5k10VPXkMyrIRIqyfzadSH813bqzwKEPI,4718
|
363
|
+
zrb/util/init_path.py,sha256=n4BgLGeq3mPLS1la8VEqZpqJHx0vJRe2WRwTtbw-FjE,652
|
363
364
|
zrb/util/load.py,sha256=DK0KYSlu48HCoGPqnW1IxnE3pHrZSPCstfz8Fjyqqv8,2140
|
364
365
|
zrb/util/run.py,sha256=FPRCCvl5g6GuDvHTkaV95CFDlqxQ-5FZb2-F-Jz1fnI,485
|
365
366
|
zrb/util/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -369,7 +370,7 @@ zrb/util/string/name.py,sha256=SXEfxJ1-tDOzHqmSV8kvepRVyMqs2XdV_vyoh_9XUu0,1584
|
|
369
370
|
zrb/util/todo.py,sha256=VGISej2KQZERpornK-8X7bysp4JydMrMUTnG8B0-liI,20708
|
370
371
|
zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
371
372
|
zrb/xcom/xcom.py,sha256=o79rxR9wphnShrcIushA0Qt71d_p3ZTxjNf7x9hJB78,1571
|
372
|
-
zrb-1.
|
373
|
-
zrb-1.
|
374
|
-
zrb-1.
|
375
|
-
zrb-1.
|
373
|
+
zrb-1.7.1.dist-info/METADATA,sha256=N_pEPK58I8nQ5O7J-1yyl0Q6gxH1PPpLN82ldGB7rMo,8385
|
374
|
+
zrb-1.7.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
375
|
+
zrb-1.7.1.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
|
376
|
+
zrb-1.7.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|