zrb 1.8.7__py3-none-any.whl → 1.8.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.
- zrb/builtin/llm/llm_ask.py +2 -2
- zrb/builtin/llm/tool/code.py +29 -14
- zrb/builtin/llm/tool/file.py +25 -16
- zrb/config.py +2 -2
- zrb/llm_config.py +186 -62
- {zrb-1.8.7.dist-info → zrb-1.8.9.dist-info}/METADATA +1 -1
- {zrb-1.8.7.dist-info → zrb-1.8.9.dist-info}/RECORD +9 -9
- {zrb-1.8.7.dist-info → zrb-1.8.9.dist-info}/WHEEL +0 -0
- {zrb-1.8.7.dist-info → zrb-1.8.9.dist-info}/entry_points.txt +0 -0
zrb/builtin/llm/llm_ask.py
CHANGED
@@ -141,6 +141,6 @@ if CFG.LLM_ALLOW_ACCESS_SHELL:
|
|
141
141
|
|
142
142
|
if CFG.LLM_ALLOW_ACCESS_INTERNET:
|
143
143
|
llm_ask.append_tool(open_web_page, search_wikipedia, search_arxiv)
|
144
|
-
if CFG.
|
145
|
-
llm_ask.append_tool(create_search_internet_tool(CFG.
|
144
|
+
if CFG.SERPAPI_KEY != "":
|
145
|
+
llm_ask.append_tool(create_search_internet_tool(CFG.SERPAPI_KEY))
|
146
146
|
llm_ask.append_tool(get_current_location, get_current_weather)
|
zrb/builtin/llm/tool/code.py
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
+
import json
|
1
2
|
import os
|
2
3
|
|
3
4
|
from zrb.builtin.llm.tool.file import DEFAULT_EXCLUDED_PATTERNS, is_excluded
|
4
5
|
from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
|
5
6
|
from zrb.context.any_context import AnyContext
|
6
7
|
|
7
|
-
|
8
|
+
_EXTRACT_INFO_FROM_REPO_SYSTEM_PROMPT = """
|
8
9
|
You are an extraction info agent.
|
9
|
-
Your goal is to help to extract relevant information to help the main
|
10
|
+
Your goal is to help to extract relevant information to help the main assistant.
|
10
11
|
You write your output is in markdown format containing path and relevant information.
|
11
|
-
Extract only information that relevant to main
|
12
|
+
Extract only information that relevant to main assistant's goal.
|
12
13
|
|
13
14
|
Extracted Information format (Use this as reference, extract relevant information only):
|
14
15
|
# <file-name>
|
@@ -30,9 +31,9 @@ Extracted Information format (Use this as reference, extract relevant informatio
|
|
30
31
|
|
31
32
|
_SUMMARIZE_INFO_SYSTEM_PROMPT = """
|
32
33
|
You are an information summarization agent.
|
33
|
-
Your goal is to summarize information to help the main
|
34
|
+
Your goal is to summarize information to help the main assistant.
|
34
35
|
The summarization result should contains all necessary details
|
35
|
-
to help main
|
36
|
+
to help main assistant achieve the goal.
|
36
37
|
"""
|
37
38
|
|
38
39
|
_DEFAULT_EXTENSIONS = [
|
@@ -169,22 +170,26 @@ async def _extract_info(
|
|
169
170
|
extract = create_sub_agent_tool(
|
170
171
|
tool_name="extract",
|
171
172
|
tool_description="extract",
|
172
|
-
system_prompt=
|
173
|
+
system_prompt=_EXTRACT_INFO_FROM_REPO_SYSTEM_PROMPT,
|
173
174
|
)
|
174
175
|
extracted_infos = []
|
175
|
-
content_buffer =
|
176
|
+
content_buffer = []
|
177
|
+
current_char_count = 0
|
176
178
|
for metadata in file_metadatas:
|
177
179
|
path = metadata.get("path", "")
|
178
180
|
content = metadata.get("content", "")
|
179
|
-
|
180
|
-
|
181
|
+
file_obj = {"path": path, "content": content}
|
182
|
+
file_str = json.dumps(file_obj)
|
183
|
+
if current_char_count + len(file_str) > char_limit:
|
181
184
|
if content_buffer:
|
182
185
|
prompt = _create_extract_info_prompt(goal, content_buffer)
|
183
186
|
extracted_info = await extract(ctx, prompt)
|
184
187
|
extracted_infos.append(extracted_info)
|
185
|
-
content_buffer =
|
188
|
+
content_buffer = [file_obj]
|
189
|
+
current_char_count = len(file_str)
|
186
190
|
else:
|
187
|
-
content_buffer
|
191
|
+
content_buffer.append(file_obj)
|
192
|
+
current_char_count += len(file_str)
|
188
193
|
|
189
194
|
# Process any remaining content in the buffer
|
190
195
|
if content_buffer:
|
@@ -194,8 +199,13 @@ async def _extract_info(
|
|
194
199
|
return extracted_infos
|
195
200
|
|
196
201
|
|
197
|
-
def _create_extract_info_prompt(goal: str, content_buffer:
|
198
|
-
return
|
202
|
+
def _create_extract_info_prompt(goal: str, content_buffer: list[dict]) -> str:
|
203
|
+
return json.dumps(
|
204
|
+
{
|
205
|
+
"main_assistant_goal": goal,
|
206
|
+
"files": content_buffer,
|
207
|
+
}
|
208
|
+
)
|
199
209
|
|
200
210
|
|
201
211
|
async def _summarize_info(
|
@@ -230,4 +240,9 @@ async def _summarize_info(
|
|
230
240
|
|
231
241
|
|
232
242
|
def _create_summarize_info_prompt(goal: str, content_buffer: str) -> str:
|
233
|
-
return
|
243
|
+
return json.dumps(
|
244
|
+
{
|
245
|
+
"main_assistant_goal": goal,
|
246
|
+
"extracted_info": content_buffer,
|
247
|
+
}
|
248
|
+
)
|
zrb/builtin/llm/tool/file.py
CHANGED
@@ -8,6 +8,28 @@ from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
|
|
8
8
|
from zrb.context.any_context import AnyContext
|
9
9
|
from zrb.util.file import read_file, read_file_with_line_numbers, write_file
|
10
10
|
|
11
|
+
_EXTRACT_INFO_FROM_FILE_SYSTEM_PROMPT = """
|
12
|
+
You are an extraction info agent.
|
13
|
+
Your goal is to help to extract relevant information to help the main assistant.
|
14
|
+
You write your output is in markdown format containing path and relevant information.
|
15
|
+
Extract only information that relevant to main assistant's goal.
|
16
|
+
|
17
|
+
Extracted Information format (Use this as reference, extract relevant information only):
|
18
|
+
# imports
|
19
|
+
- <imported-package>
|
20
|
+
- ...
|
21
|
+
# variables
|
22
|
+
- <variable-type> <variable-name>: <the-purpose-of-the-variable>
|
23
|
+
- ...
|
24
|
+
# functions
|
25
|
+
- <function-name>:
|
26
|
+
- parameters: <parameters>
|
27
|
+
- logic/description: <what-the-function-do-and-how-it-works>
|
28
|
+
...
|
29
|
+
...
|
30
|
+
""".strip()
|
31
|
+
|
32
|
+
|
11
33
|
DEFAULT_EXCLUDED_PATTERNS = [
|
12
34
|
# Common Python artifacts
|
13
35
|
"__pycache__",
|
@@ -464,25 +486,12 @@ async def analyze_file(ctx: AnyContext, path: str, query: str) -> str:
|
|
464
486
|
_analyze_file = create_sub_agent_tool(
|
465
487
|
tool_name="analyze_file",
|
466
488
|
tool_description="analyze file with LLM capability",
|
467
|
-
system_prompt=
|
468
|
-
[
|
469
|
-
"You are a file analyzer assistant",
|
470
|
-
"Your goal is to help the main asisstant by reading file",
|
471
|
-
"and perform necessary indepth analysis required by the main assistant",
|
472
|
-
]
|
473
|
-
),
|
489
|
+
system_prompt=_EXTRACT_INFO_FROM_FILE_SYSTEM_PROMPT,
|
474
490
|
tools=[read_from_file, search_files],
|
475
491
|
)
|
476
492
|
return await _analyze_file(
|
477
493
|
ctx,
|
478
|
-
|
479
|
-
|
480
|
-
file_content,
|
481
|
-
"# Instruction",
|
482
|
-
query,
|
483
|
-
"# File path",
|
484
|
-
abs_path,
|
485
|
-
"# File content",
|
486
|
-
]
|
494
|
+
json.dumps(
|
495
|
+
{"instruction": query, "file_path": abs_path, "file_content": file_content}
|
487
496
|
),
|
488
497
|
)
|
zrb/config.py
CHANGED
@@ -321,8 +321,8 @@ class Config:
|
|
321
321
|
return int(os.getenv("ZRB_RAG_MAX_RESULT_COUNT", "5"))
|
322
322
|
|
323
323
|
@property
|
324
|
-
def
|
325
|
-
return os.getenv("
|
324
|
+
def SERPAPI_KEY(self) -> str:
|
325
|
+
return os.getenv("SERPAPI_KEY", "")
|
326
326
|
|
327
327
|
@property
|
328
328
|
def BANNER(self) -> str:
|
zrb/llm_config.py
CHANGED
@@ -11,68 +11,192 @@ else:
|
|
11
11
|
|
12
12
|
from zrb.config import CFG
|
13
13
|
|
14
|
-
|
15
|
-
You
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
""
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
""
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
to
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
""
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
""
|
14
|
+
DEFAULT_PERSONA = (
|
15
|
+
"You are a helpful and precise expert assistant. Your goal is to follow "
|
16
|
+
"instructions carefully to provide accurate and efficient help. Get "
|
17
|
+
"straight to the point."
|
18
|
+
).strip()
|
19
|
+
|
20
|
+
DEFAULT_SYSTEM_PROMPT = (
|
21
|
+
"You have access to tools and two forms of memory:\n"
|
22
|
+
"1. A structured summary of the immediate task (including a payload) AND "
|
23
|
+
"the raw text of the last few turns.\n"
|
24
|
+
"2. A structured JSON object of long-term facts (user profile, project "
|
25
|
+
"details).\n\n"
|
26
|
+
"Your goal is to complete the user's task by following a strict workflow."
|
27
|
+
"\n\n"
|
28
|
+
"**YOUR CORE WORKFLOW**\n"
|
29
|
+
"You MUST follow these steps in order for every task:\n\n"
|
30
|
+
"1. **Synthesize and Verify:**\n"
|
31
|
+
" - Review all parts of your memory: the long-term facts, the recent "
|
32
|
+
"conversation history, and the summary of the next action.\n"
|
33
|
+
" - Compare this with the user's absolute LATEST message.\n"
|
34
|
+
" - **If your memory seems out of date or contradicts the user's new "
|
35
|
+
"request, you MUST ask for clarification before doing anything else.**\n"
|
36
|
+
" - Example: If memory says 'ready to build the app' but the user "
|
37
|
+
"asks to 'add a new file', ask: 'My notes say we were about to build. "
|
38
|
+
"Are you sure you want to add a new file first? Please confirm.'\n\n"
|
39
|
+
"2. **Plan:**\n"
|
40
|
+
" - Use the `Action Payload` from your memory if it exists.\n"
|
41
|
+
" - State your plan in simple, numbered steps.\n\n"
|
42
|
+
"3. **Execute:**\n"
|
43
|
+
" - Follow your plan and use your tools to complete the task.\n\n"
|
44
|
+
"**CRITICAL RULES**\n"
|
45
|
+
"- **TRUST YOUR MEMORY (AFTER VERIFICATION):** Once you confirm your "
|
46
|
+
"memory is correct, do NOT re-gather information. Use the `Action "
|
47
|
+
"Payload` directly.\n"
|
48
|
+
"- **ASK IF UNSURE:** If a required parameter (like a filename) is not in "
|
49
|
+
"your memory or the user's last message, you MUST ask for it. Do not "
|
50
|
+
"guess."
|
51
|
+
).strip()
|
52
|
+
|
53
|
+
DEFAULT_SPECIAL_INSTRUCTION_PROMPT = (
|
54
|
+
"## Technical Task Protocol\n"
|
55
|
+
"When performing technical tasks, strictly follow this protocol.\n\n"
|
56
|
+
"**1. Guiding Principles**\n"
|
57
|
+
"Your work must be **Correct, Secure, and Readable**.\n\n"
|
58
|
+
"**2. Code Modification: Surgical Precision**\n"
|
59
|
+
"- Your primary goal is to preserve the user's work.\n"
|
60
|
+
"- Find the **exact start and end lines** you need to change.\n"
|
61
|
+
"- **ADD or MODIFY only those specific lines.** Do not touch any other "
|
62
|
+
"part of the file.\n"
|
63
|
+
"- Do not REPLACE a whole file unless the user explicitly tells you "
|
64
|
+
"to.\n\n"
|
65
|
+
"**3. Git Workflow: A Safe, Step-by-Step Process**\n"
|
66
|
+
"Whenever you work in a git repository, you MUST follow these steps "
|
67
|
+
"exactly:\n"
|
68
|
+
"1. **Check Status:** Run `git status` to ensure the working directory "
|
69
|
+
"is clean.\n"
|
70
|
+
"2. **Halt if Dirty:** If the directory is not clean, STOP. Inform the "
|
71
|
+
"user and wait for their instructions.\n"
|
72
|
+
"3. **Propose and Confirm Branch:**\n"
|
73
|
+
" - Tell the user you need to create a new branch and propose a "
|
74
|
+
"name.\n"
|
75
|
+
" - Example: 'I will create a branch named `feature/add-user-login`. "
|
76
|
+
"Is this okay?'\n"
|
77
|
+
" - **Wait for the user to say 'yes' or approve.**\n"
|
78
|
+
"4. **Execute on Branch:** Once the user confirms, create the branch and "
|
79
|
+
"perform all your work and commits there.\n\n"
|
80
|
+
"**4. Debugging Protocol**\n"
|
81
|
+
"1. **Hypothesize:** State the most likely cause of the bug in one "
|
82
|
+
"sentence.\n"
|
83
|
+
"2. **Solve:** Provide the targeted code fix and explain simply *why* "
|
84
|
+
"it works.\n"
|
85
|
+
"3. **Verify:** Tell the user what command to run or what to check to "
|
86
|
+
"confirm the fix works."
|
87
|
+
).strip()
|
88
|
+
|
89
|
+
DEFAULT_SUMMARIZATION_PROMPT = (
|
90
|
+
"You are a summarization assistant. Your job is to create a two-part "
|
91
|
+
"summary to give the main assistant perfect context for its next "
|
92
|
+
"action.\n\n"
|
93
|
+
"**PART 1: RECENT CONVERSATION HISTORY**\n"
|
94
|
+
"- Copy the last 3-4 turns of the conversation verbatim.\n"
|
95
|
+
"- Use the format `user:` and `assistant:`.\n\n"
|
96
|
+
"**PART 2: ANALYSIS OF CURRENT STATE**\n"
|
97
|
+
"- Fill in the template to analyze the immediate task.\n"
|
98
|
+
"- **CRITICAL RULE:** If the next action requires specific data (like "
|
99
|
+
"text for a file or a command), you MUST include that exact data in the "
|
100
|
+
"`Action Payload` field.\n\n"
|
101
|
+
"---\n"
|
102
|
+
"**TEMPLATE FOR YOUR ENTIRE OUTPUT**\n\n"
|
103
|
+
"## Part 1: Recent Conversation History\n"
|
104
|
+
"user: [The user's second-to-last message]\n"
|
105
|
+
"assistant: [The assistant's last message]\n"
|
106
|
+
"user: [The user's most recent message]\n\n"
|
107
|
+
"---\n"
|
108
|
+
"## Part 2: Analysis of Current State\n\n"
|
109
|
+
"**User's Main Goal:**\n"
|
110
|
+
"[Describe the user's overall objective in one simple sentence.]\n\n"
|
111
|
+
"**Next Action for Assistant:**\n"
|
112
|
+
"[Describe the immediate next step. Example: 'Write new content to the "
|
113
|
+
"README.md file.']\n\n"
|
114
|
+
"**Action Payload:**\n"
|
115
|
+
"[IMPORTANT: Provide the exact content, code, or command for the "
|
116
|
+
"action. If no data is needed, write 'None'.]\n\n"
|
117
|
+
"---\n"
|
118
|
+
"**EXAMPLE SCENARIO & CORRECT OUTPUT**\n\n"
|
119
|
+
"*PREVIOUS CONVERSATION:*\n"
|
120
|
+
"user: Can you help me update my project's documentation?\n"
|
121
|
+
"assistant: Of course. I have drafted the new content: '# Project "
|
122
|
+
"Apollo\\nThis is the new documentation for the project.' Do you "
|
123
|
+
"approve?\n"
|
124
|
+
"user: Yes, that looks great. Please proceed.\n\n"
|
125
|
+
"*YOUR CORRECT OUTPUT:*\n\n"
|
126
|
+
"## Part 1: Recent Conversation History\n"
|
127
|
+
"user: Can you help me update my project's documentation?\n"
|
128
|
+
"assistant: Of course. I have drafted the new content: '# Project "
|
129
|
+
"Apollo\\nThis is the new documentation for the project.' Do you "
|
130
|
+
"approve?\n"
|
131
|
+
"user: Yes, that looks great. Please proceed.\n\n"
|
132
|
+
"---\n"
|
133
|
+
"## Part 2: Analysis of Current State\n\n"
|
134
|
+
"**User's Main Goal:**\n"
|
135
|
+
"Update the project documentation.\n\n"
|
136
|
+
"**Next Action for Assistant:**\n"
|
137
|
+
"Write new content to the README.md file.\n\n"
|
138
|
+
"**Action Payload:**\n"
|
139
|
+
"# Project Apollo\n"
|
140
|
+
"This is the new documentation for the project.\n"
|
141
|
+
"---"
|
142
|
+
).strip()
|
143
|
+
|
144
|
+
DEFAULT_CONTEXT_ENRICHMENT_PROMPT = (
|
145
|
+
"You are an information extraction robot. Your sole purpose is to "
|
146
|
+
"extract long-term, stable facts from the conversation and update a "
|
147
|
+
"JSON object.\n\n"
|
148
|
+
"**DEFINITIONS:**\n"
|
149
|
+
"- **Stable Facts:** Information that does not change often. Examples: "
|
150
|
+
"user's name, project name, preferred programming language.\n"
|
151
|
+
"- **Volatile Facts (IGNORE THESE):** Information about the current, "
|
152
|
+
"immediate task. Examples: the user's last request, the next action to "
|
153
|
+
"take.\n\n"
|
154
|
+
"**CRITICAL RULES:**\n"
|
155
|
+
"1. Your ENTIRE response MUST be a single, valid JSON object. The root "
|
156
|
+
"object must contain a single key named 'response'.\n"
|
157
|
+
"2. DO NOT add any text, explanations, or markdown formatting before or "
|
158
|
+
"after the JSON object.\n"
|
159
|
+
"3. Your job is to update the JSON. If a value already exists, only "
|
160
|
+
"change it if the user provides new information.\n"
|
161
|
+
'4. If you cannot find a value for a key, use an empty string `""`. DO '
|
162
|
+
"NOT GUESS.\n\n"
|
163
|
+
"---\n"
|
164
|
+
"**JSON TEMPLATE TO FILL:**\n\n"
|
165
|
+
"Copy this exact structure. Only fill in values for stable facts you "
|
166
|
+
"find.\n\n"
|
167
|
+
"{\n"
|
168
|
+
' "response": {\n'
|
169
|
+
' "user_profile": {\n'
|
170
|
+
' "user_name": "",\n'
|
171
|
+
' "language_preference": ""\n'
|
172
|
+
" },\n"
|
173
|
+
' "project_details": {\n'
|
174
|
+
' "project_name": "",\n'
|
175
|
+
' "primary_file_path": ""\n'
|
176
|
+
" }\n"
|
177
|
+
" }\n"
|
178
|
+
"}\n\n"
|
179
|
+
"---\n"
|
180
|
+
"**EXAMPLE SCENARIO**\n\n"
|
181
|
+
"*CONVERSATION CONTEXT:*\n"
|
182
|
+
"User: Hi, I'm Sarah, and I'm working on the 'Apollo' project. Let's fix "
|
183
|
+
"a bug in `src/auth.js`.\n"
|
184
|
+
"Assistant: Okay Sarah, let's look at `src/auth.js` from the 'Apollo' "
|
185
|
+
"project.\n\n"
|
186
|
+
"*CORRECT JSON OUTPUT:*\n\n"
|
187
|
+
"{\n"
|
188
|
+
' "response": {\n'
|
189
|
+
' "user_profile": {\n'
|
190
|
+
' "user_name": "Sarah",\n'
|
191
|
+
' "language_preference": "javascript"\n'
|
192
|
+
" },\n"
|
193
|
+
' "project_details": {\n'
|
194
|
+
' "project_name": "Apollo",\n'
|
195
|
+
' "primary_file_path": "src/auth.js"\n'
|
196
|
+
" }\n"
|
197
|
+
" }\n"
|
198
|
+
"}"
|
199
|
+
).strip()
|
76
200
|
|
77
201
|
|
78
202
|
class LLMConfig:
|
@@ -12,13 +12,13 @@ zrb/builtin/jwt.py,sha256=3M5uaQhJZbKQLjTUft1OwPz_JxtmK-xtkjxWjciOQho,2859
|
|
12
12
|
zrb/builtin/llm/chat_session.py,sha256=ot2ss6yA4qIINg0nl3KJYnLag8H0eB9ggAgRGEUkZdE,6639
|
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=ltQlPEItcLW8pSZifUS5Ec9k8OvUo3__8W2MAG9J3IA,4438
|
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
|
19
19
|
zrb/builtin/llm/tool/cli.py,sha256=_CNEmEc6K2Z0i9ppYeM7jGpqaEdT3uxaWQatmxP3jKE,858
|
20
|
-
zrb/builtin/llm/tool/code.py,sha256=
|
21
|
-
zrb/builtin/llm/tool/file.py,sha256
|
20
|
+
zrb/builtin/llm/tool/code.py,sha256=k-IaJCnr8sgfcGJXLF4CGKpUD64GyzN8QpnkLaIrda8,7703
|
21
|
+
zrb/builtin/llm/tool/file.py,sha256=nPSl086ZwURfzysy8pA76zhlpABn4X9bR_NDW9eUwoM,18259
|
22
22
|
zrb/builtin/llm/tool/rag.py,sha256=yqx7vXXyrOCJjhQJl4s0TnLL-2uQUTuKRnkWlSQBW0M,7883
|
23
23
|
zrb/builtin/llm/tool/sub_agent.py,sha256=_ItDE5MV_RZtnY_-IUsSMmm6mYaDY3YRINT0hVNsGkA,4702
|
24
24
|
zrb/builtin/llm/tool/web.py,sha256=pXRLhcB_Y6z-2w4C4WezH8n-pg3PSMgt_bwn3aaqi6g,5479
|
@@ -217,7 +217,7 @@ zrb/callback/callback.py,sha256=PFhCqzfxdk6IAthmXcZ13DokT62xtBzJr_ciLw6I8Zg,4030
|
|
217
217
|
zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
218
218
|
zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
|
219
219
|
zrb/cmd/cmd_val.py,sha256=7Doowyg6BK3ISSGBLt-PmlhzaEkBjWWm51cED6fAUOQ,1014
|
220
|
-
zrb/config.py,sha256=
|
220
|
+
zrb/config.py,sha256=XJCJl3u6fo9OlL8V1HNLn5iKcSJjIICQk87CkBrA7IU,10222
|
221
221
|
zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
222
222
|
zrb/content_transformer/any_content_transformer.py,sha256=v8ZUbcix1GGeDQwB6OKX_1TjpY__ksxWVeqibwa_iZA,850
|
223
223
|
zrb/content_transformer/content_transformer.py,sha256=STl77wW-I69QaGzCXjvkppngYFLufow8ybPLSyAvlHs,2404
|
@@ -246,7 +246,7 @@ zrb/input/option_input.py,sha256=TQB82ko5odgzkULEizBZi0e9TIHEbIgvdP0AR3RhA74,213
|
|
246
246
|
zrb/input/password_input.py,sha256=szBojWxSP9QJecgsgA87OIYwQrY2AQ3USIKdDZY6snU,1465
|
247
247
|
zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
|
248
248
|
zrb/input/text_input.py,sha256=6T3MngWdUs0u0ZVs5Dl11w5KS7nN1RkgrIR_zKumzPM,3695
|
249
|
-
zrb/llm_config.py,sha256=
|
249
|
+
zrb/llm_config.py,sha256=7xp4mhre3ULSzfyuqinXXMigNOYNcemVEgPIiWTNdMk,16875
|
250
250
|
zrb/llm_rate_limitter.py,sha256=RXdtPreMcmoYSE2Ab2StyHH95F0bD2pGmyySXs4gRio,3725
|
251
251
|
zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
252
252
|
zrb/runner/cli.py,sha256=AbLTNqFy5FuyGQOWOjHZGaBC8e2yuE_Dx1sBdnisR18,6984
|
@@ -390,7 +390,7 @@ zrb/util/string/name.py,sha256=SXEfxJ1-tDOzHqmSV8kvepRVyMqs2XdV_vyoh_9XUu0,1584
|
|
390
390
|
zrb/util/todo.py,sha256=VGISej2KQZERpornK-8X7bysp4JydMrMUTnG8B0-liI,20708
|
391
391
|
zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
392
392
|
zrb/xcom/xcom.py,sha256=o79rxR9wphnShrcIushA0Qt71d_p3ZTxjNf7x9hJB78,1571
|
393
|
-
zrb-1.8.
|
394
|
-
zrb-1.8.
|
395
|
-
zrb-1.8.
|
396
|
-
zrb-1.8.
|
393
|
+
zrb-1.8.9.dist-info/METADATA,sha256=G_-feyacEpMw7vswtr-alUn8Jgo4BD09fzbpyXZbsqU,9761
|
394
|
+
zrb-1.8.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
395
|
+
zrb-1.8.9.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
|
396
|
+
zrb-1.8.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|