lite-agent 0.4.0__py3-none-any.whl → 0.4.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.
Potentially problematic release.
This version of lite-agent might be problematic. Click here for more details.
- lite_agent/agent.py +5 -3
- lite_agent/runner.py +126 -126
- lite_agent/stream_handlers/litellm.py +16 -7
- {lite_agent-0.4.0.dist-info → lite_agent-0.4.1.dist-info}/METADATA +1 -1
- {lite_agent-0.4.0.dist-info → lite_agent-0.4.1.dist-info}/RECORD +6 -6
- {lite_agent-0.4.0.dist-info → lite_agent-0.4.1.dist-info}/WHEEL +0 -0
lite_agent/agent.py
CHANGED
|
@@ -174,9 +174,11 @@ class Agent:
|
|
|
174
174
|
if self.completion_condition == "call":
|
|
175
175
|
instructions = WAIT_FOR_USER_INSTRUCTIONS_TEMPLATE.render(extra_instructions=None) + "\n\n" + instructions
|
|
176
176
|
return [
|
|
177
|
-
system_message_to_llm_dict(
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
system_message_to_llm_dict(
|
|
178
|
+
NewSystemMessage(
|
|
179
|
+
content=f"You are {self.name}. {instructions}",
|
|
180
|
+
),
|
|
181
|
+
),
|
|
180
182
|
*converted_messages,
|
|
181
183
|
]
|
|
182
184
|
|
lite_agent/runner.py
CHANGED
|
@@ -30,6 +30,7 @@ from lite_agent.types import (
|
|
|
30
30
|
UserMessageContent,
|
|
31
31
|
UserTextContent,
|
|
32
32
|
)
|
|
33
|
+
from lite_agent.types.events import AssistantMessageEvent
|
|
33
34
|
|
|
34
35
|
DEFAULT_INCLUDES: tuple[AgentChunkType, ...] = (
|
|
35
36
|
"completion_raw",
|
|
@@ -56,38 +57,31 @@ class Runner:
|
|
|
56
57
|
|
|
57
58
|
def _start_assistant_message(self, content: str = "", meta: AssistantMessageMeta | None = None) -> None:
|
|
58
59
|
"""Start a new assistant message."""
|
|
59
|
-
if meta is None:
|
|
60
|
-
meta = AssistantMessageMeta()
|
|
61
|
-
|
|
62
|
-
# Always add text content, even if empty (we can update it later)
|
|
63
|
-
assistant_content_items: list[AssistantMessageContent] = [AssistantTextContent(text=content)]
|
|
64
60
|
self._current_assistant_message = NewAssistantMessage(
|
|
65
|
-
content=
|
|
66
|
-
meta=meta,
|
|
61
|
+
content=[AssistantTextContent(text=content)],
|
|
62
|
+
meta=meta or AssistantMessageMeta(),
|
|
67
63
|
)
|
|
68
64
|
|
|
69
|
-
def
|
|
70
|
-
"""
|
|
65
|
+
def _ensure_current_assistant_message(self) -> NewAssistantMessage:
|
|
66
|
+
"""Ensure current assistant message exists and return it."""
|
|
71
67
|
if self._current_assistant_message is None:
|
|
72
68
|
self._start_assistant_message()
|
|
69
|
+
return self._current_assistant_message # type: ignore[return-value]
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
def _add_to_current_assistant_message(self, content_item: AssistantTextContent | AssistantToolCall | AssistantToolCallResult) -> None:
|
|
72
|
+
"""Add content to the current assistant message."""
|
|
73
|
+
self._ensure_current_assistant_message().content.append(content_item)
|
|
76
74
|
|
|
77
75
|
def _add_text_content_to_current_assistant_message(self, delta: str) -> None:
|
|
78
76
|
"""Add text delta to the current assistant message's text content."""
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return
|
|
88
|
-
# If no text content found, add new text content
|
|
89
|
-
new_content = AssistantTextContent(text=delta)
|
|
90
|
-
self._current_assistant_message.content.append(new_content)
|
|
77
|
+
message = self._ensure_current_assistant_message()
|
|
78
|
+
# Find the first text content item and append the delta
|
|
79
|
+
for content_item in message.content:
|
|
80
|
+
if content_item.type == "text":
|
|
81
|
+
content_item.text += delta
|
|
82
|
+
return
|
|
83
|
+
# If no text content found, add new text content
|
|
84
|
+
message.content.append(AssistantTextContent(text=delta))
|
|
91
85
|
|
|
92
86
|
def _finalize_assistant_message(self) -> None:
|
|
93
87
|
"""Finalize the current assistant message and add it to messages."""
|
|
@@ -131,7 +125,7 @@ class Runner:
|
|
|
131
125
|
for i, tool_call in enumerate(transfer_calls):
|
|
132
126
|
if i == 0:
|
|
133
127
|
# Execute the first transfer
|
|
134
|
-
await self._handle_agent_transfer(tool_call
|
|
128
|
+
await self._handle_agent_transfer(tool_call)
|
|
135
129
|
else:
|
|
136
130
|
# Add response for additional transfer calls without executing them
|
|
137
131
|
self._add_tool_call_result(
|
|
@@ -146,7 +140,7 @@ class Runner:
|
|
|
146
140
|
for i, tool_call in enumerate(return_parent_calls):
|
|
147
141
|
if i == 0:
|
|
148
142
|
# Execute the first transfer
|
|
149
|
-
await self._handle_parent_transfer(tool_call
|
|
143
|
+
await self._handle_parent_transfer(tool_call)
|
|
150
144
|
else:
|
|
151
145
|
# Add response for additional transfer calls without executing them
|
|
152
146
|
self._add_tool_call_result(
|
|
@@ -184,17 +178,16 @@ class Runner:
|
|
|
184
178
|
) -> AsyncGenerator[AgentChunk, None]:
|
|
185
179
|
"""Run the agent and return a RunResponse object that can be asynchronously iterated for each chunk."""
|
|
186
180
|
includes = self._normalize_includes(includes)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
self.append_message(user_input) # type: ignore[arg-type]
|
|
181
|
+
match user_input:
|
|
182
|
+
case str():
|
|
183
|
+
self.messages.append(NewUserMessage(content=[UserTextContent(text=user_input)]))
|
|
184
|
+
case list() | tuple():
|
|
185
|
+
# Handle sequence of messages
|
|
186
|
+
for message in user_input:
|
|
187
|
+
self.append_message(message)
|
|
188
|
+
case _:
|
|
189
|
+
# Handle single message (BaseModel, TypedDict, or dict)
|
|
190
|
+
self.append_message(user_input) # type: ignore[arg-type]
|
|
198
191
|
return self._run(max_steps, includes, self._normalize_record_path(record_to), context=context)
|
|
199
192
|
|
|
200
193
|
async def _run(self, max_steps: int, includes: Sequence[AgentChunkType], record_to: Path | None = None, context: Any | None = None) -> AsyncGenerator[AgentChunk, None]: # noqa: ANN401
|
|
@@ -229,62 +222,79 @@ class Runner:
|
|
|
229
222
|
msg = f"Unknown API type: {self.api}"
|
|
230
223
|
raise ValueError(msg)
|
|
231
224
|
async for chunk in resp:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
#
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
current_message.meta.
|
|
287
|
-
|
|
225
|
+
match chunk.type:
|
|
226
|
+
case "assistant_message":
|
|
227
|
+
# Start or update assistant message in new format
|
|
228
|
+
meta = AssistantMessageMeta(
|
|
229
|
+
sent_at=chunk.message.meta.sent_at,
|
|
230
|
+
latency_ms=getattr(chunk.message.meta, "latency_ms", None),
|
|
231
|
+
total_time_ms=getattr(chunk.message.meta, "output_time_ms", None),
|
|
232
|
+
)
|
|
233
|
+
# If we already have a current assistant message, just update its metadata
|
|
234
|
+
if self._current_assistant_message is not None:
|
|
235
|
+
self._current_assistant_message.meta = meta
|
|
236
|
+
else:
|
|
237
|
+
# Extract text content from the new message format
|
|
238
|
+
text_content = ""
|
|
239
|
+
if chunk.message.content:
|
|
240
|
+
for item in chunk.message.content:
|
|
241
|
+
if hasattr(item, "type") and item.type == "text":
|
|
242
|
+
text_content = item.text
|
|
243
|
+
break
|
|
244
|
+
self._start_assistant_message(text_content, meta)
|
|
245
|
+
# Only yield assistant_message chunk if it's in includes and has content
|
|
246
|
+
if chunk.type in includes and self._current_assistant_message is not None:
|
|
247
|
+
# Create a new chunk with the current assistant message content
|
|
248
|
+
updated_chunk = AssistantMessageEvent(
|
|
249
|
+
message=self._current_assistant_message,
|
|
250
|
+
)
|
|
251
|
+
yield updated_chunk
|
|
252
|
+
case "content_delta":
|
|
253
|
+
# Accumulate text content to current assistant message
|
|
254
|
+
self._add_text_content_to_current_assistant_message(chunk.delta)
|
|
255
|
+
# Always yield content_delta chunk if it's in includes
|
|
256
|
+
if chunk.type in includes:
|
|
257
|
+
yield chunk
|
|
258
|
+
case "function_call":
|
|
259
|
+
# Add tool call to current assistant message
|
|
260
|
+
# Keep arguments as string for compatibility with funcall library
|
|
261
|
+
tool_call = AssistantToolCall(
|
|
262
|
+
call_id=chunk.call_id,
|
|
263
|
+
name=chunk.name,
|
|
264
|
+
arguments=chunk.arguments or "{}",
|
|
265
|
+
)
|
|
266
|
+
self._add_to_current_assistant_message(tool_call)
|
|
267
|
+
# Always yield function_call chunk if it's in includes
|
|
268
|
+
if chunk.type in includes:
|
|
269
|
+
yield chunk
|
|
270
|
+
case "usage":
|
|
271
|
+
# Update the last assistant message with usage data and output_time_ms
|
|
272
|
+
usage_time = datetime.now(timezone.utc)
|
|
273
|
+
for i in range(len(self.messages) - 1, -1, -1):
|
|
274
|
+
current_message = self.messages[i]
|
|
275
|
+
if isinstance(current_message, NewAssistantMessage):
|
|
276
|
+
# Update usage information
|
|
277
|
+
if current_message.meta.usage is None:
|
|
278
|
+
current_message.meta.usage = MessageUsage()
|
|
279
|
+
current_message.meta.usage.input_tokens = chunk.usage.input_tokens
|
|
280
|
+
current_message.meta.usage.output_tokens = chunk.usage.output_tokens
|
|
281
|
+
current_message.meta.usage.total_tokens = (chunk.usage.input_tokens or 0) + (chunk.usage.output_tokens or 0)
|
|
282
|
+
|
|
283
|
+
# Calculate output_time_ms if latency_ms is available
|
|
284
|
+
if current_message.meta.latency_ms is not None:
|
|
285
|
+
# We need to calculate from first output to usage time
|
|
286
|
+
# We'll calculate: usage_time - (sent_at - latency_ms)
|
|
287
|
+
# This gives us the time from first output to usage completion
|
|
288
|
+
# sent_at is when the message was completed, so sent_at - latency_ms approximates first output time
|
|
289
|
+
first_output_time_approx = current_message.meta.sent_at - timedelta(milliseconds=current_message.meta.latency_ms)
|
|
290
|
+
output_time_ms = int((usage_time - first_output_time_approx).total_seconds() * 1000)
|
|
291
|
+
current_message.meta.total_time_ms = max(0, output_time_ms)
|
|
292
|
+
break
|
|
293
|
+
# Always yield usage chunk if it's in includes
|
|
294
|
+
if chunk.type in includes:
|
|
295
|
+
yield chunk
|
|
296
|
+
case _ if chunk.type in includes:
|
|
297
|
+
yield chunk
|
|
288
298
|
|
|
289
299
|
# Finalize assistant message so it can be found in pending function calls
|
|
290
300
|
self._finalize_assistant_message()
|
|
@@ -377,58 +387,50 @@ class Runner:
|
|
|
377
387
|
resp = self.run(user_input, max_steps, includes, record_to=record_to)
|
|
378
388
|
return await self._collect_all_chunks(resp)
|
|
379
389
|
|
|
380
|
-
def
|
|
381
|
-
"""
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
# Look at the last assistant message for pending tool calls
|
|
386
|
-
if not self.messages:
|
|
387
|
-
return pending_calls
|
|
388
|
-
|
|
389
|
-
last_message = self.messages[-1]
|
|
390
|
-
if not isinstance(last_message, NewAssistantMessage):
|
|
391
|
-
return pending_calls
|
|
390
|
+
def _analyze_last_assistant_message(self) -> tuple[list[AssistantToolCall], dict[str, str]]:
|
|
391
|
+
"""Analyze the last assistant message and return pending tool calls and tool call map."""
|
|
392
|
+
if not self.messages or not isinstance(self.messages[-1], NewAssistantMessage):
|
|
393
|
+
return [], {}
|
|
392
394
|
|
|
393
|
-
# Collect tool calls and results from the last assistant message
|
|
394
395
|
tool_calls = {}
|
|
395
396
|
tool_results = set()
|
|
397
|
+
tool_call_names = {}
|
|
396
398
|
|
|
397
|
-
for content_item in
|
|
399
|
+
for content_item in self.messages[-1].content:
|
|
398
400
|
if content_item.type == "tool_call":
|
|
399
401
|
tool_calls[content_item.call_id] = content_item
|
|
402
|
+
tool_call_names[content_item.call_id] = content_item.name
|
|
400
403
|
elif content_item.type == "tool_call_result":
|
|
401
404
|
tool_results.add(content_item.call_id)
|
|
402
405
|
|
|
403
|
-
# Return tool calls
|
|
404
|
-
|
|
406
|
+
# Return pending tool calls and tool call names map
|
|
407
|
+
pending_calls = [call for call_id, call in tool_calls.items() if call_id not in tool_results]
|
|
408
|
+
return pending_calls, tool_call_names
|
|
409
|
+
|
|
410
|
+
def _find_pending_tool_calls(self) -> list[AssistantToolCall]:
|
|
411
|
+
"""Find tool calls that don't have corresponding results yet."""
|
|
412
|
+
pending_calls, _ = self._analyze_last_assistant_message()
|
|
413
|
+
return pending_calls
|
|
405
414
|
|
|
406
415
|
def _get_tool_call_name_by_id(self, call_id: str) -> str | None:
|
|
407
416
|
"""Get the tool name for a given call_id from the last assistant message."""
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
for content_item in self.messages[-1].content:
|
|
412
|
-
if content_item.type == "tool_call" and content_item.call_id == call_id:
|
|
413
|
-
return content_item.name
|
|
414
|
-
return None
|
|
417
|
+
_, tool_call_names = self._analyze_last_assistant_message()
|
|
418
|
+
return tool_call_names.get(call_id)
|
|
415
419
|
|
|
416
420
|
def _convert_tool_calls_to_tool_calls(self, tool_calls: list[AssistantToolCall]) -> list[ToolCall]:
|
|
417
421
|
"""Convert AssistantToolCall objects to ToolCall objects for compatibility."""
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
for tc in tool_calls:
|
|
421
|
-
tool_call = ToolCall(
|
|
422
|
+
return [
|
|
423
|
+
ToolCall(
|
|
422
424
|
id=tc.call_id,
|
|
423
425
|
type="function",
|
|
424
426
|
function=ToolCallFunction(
|
|
425
427
|
name=tc.name,
|
|
426
428
|
arguments=tc.arguments if isinstance(tc.arguments, str) else str(tc.arguments),
|
|
427
429
|
),
|
|
428
|
-
index=
|
|
430
|
+
index=i,
|
|
429
431
|
)
|
|
430
|
-
|
|
431
|
-
|
|
432
|
+
for i, tc in enumerate(tool_calls)
|
|
433
|
+
]
|
|
432
434
|
|
|
433
435
|
def set_chat_history(self, messages: Sequence[FlexibleRunnerMessage], root_agent: Agent | None = None) -> None:
|
|
434
436
|
"""Set the entire chat history and track the current agent based on function calls.
|
|
@@ -691,12 +693,11 @@ class Runner:
|
|
|
691
693
|
msg = f"Unsupported message type: {type(message)}"
|
|
692
694
|
raise TypeError(msg)
|
|
693
695
|
|
|
694
|
-
async def _handle_agent_transfer(self, tool_call: ToolCall
|
|
696
|
+
async def _handle_agent_transfer(self, tool_call: ToolCall) -> None:
|
|
695
697
|
"""Handle agent transfer when transfer_to_agent tool is called.
|
|
696
698
|
|
|
697
699
|
Args:
|
|
698
700
|
tool_call: The transfer_to_agent tool call
|
|
699
|
-
_includes: The types of chunks to include in output (unused)
|
|
700
701
|
"""
|
|
701
702
|
|
|
702
703
|
# Parse the arguments to get the target agent name
|
|
@@ -771,12 +772,11 @@ class Runner:
|
|
|
771
772
|
output=f"Transfer failed: {e!s}",
|
|
772
773
|
)
|
|
773
774
|
|
|
774
|
-
async def _handle_parent_transfer(self, tool_call: ToolCall
|
|
775
|
+
async def _handle_parent_transfer(self, tool_call: ToolCall) -> None:
|
|
775
776
|
"""Handle parent transfer when transfer_to_parent tool is called.
|
|
776
777
|
|
|
777
778
|
Args:
|
|
778
779
|
tool_call: The transfer_to_parent tool call
|
|
779
|
-
_includes: The types of chunks to include in output (unused)
|
|
780
780
|
"""
|
|
781
781
|
|
|
782
782
|
# Check if current agent has a parent
|
|
@@ -16,18 +16,27 @@ if TYPE_CHECKING:
|
|
|
16
16
|
from aiofiles.threadpool.text import AsyncTextIOWrapper
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def ensure_record_file(record_to: Path | None) -> Path | None:
|
|
19
|
+
def ensure_record_file(record_to: Path | str | None) -> Path | None:
|
|
20
20
|
if not record_to:
|
|
21
21
|
return None
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
|
|
23
|
+
path = Path(record_to) if isinstance(record_to, str) else record_to
|
|
24
|
+
|
|
25
|
+
# If the path is a directory, generate a filename
|
|
26
|
+
if path.is_dir():
|
|
27
|
+
path = path / "conversation.jsonl"
|
|
28
|
+
|
|
29
|
+
# Ensure parent directory exists
|
|
30
|
+
if not path.parent.exists():
|
|
31
|
+
logger.warning('Record directory "%s" does not exist, creating it.', path.parent)
|
|
32
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
33
|
+
|
|
34
|
+
return path
|
|
26
35
|
|
|
27
36
|
|
|
28
37
|
async def litellm_completion_stream_handler(
|
|
29
38
|
resp: litellm.CustomStreamWrapper,
|
|
30
|
-
record_to: Path | None = None,
|
|
39
|
+
record_to: Path | str | None = None,
|
|
31
40
|
) -> AsyncGenerator[AgentChunk, None]:
|
|
32
41
|
"""
|
|
33
42
|
Optimized chunk handler
|
|
@@ -52,7 +61,7 @@ async def litellm_completion_stream_handler(
|
|
|
52
61
|
|
|
53
62
|
async def litellm_response_stream_handler(
|
|
54
63
|
resp: AsyncGenerator[ResponsesAPIStreamingResponse, None],
|
|
55
|
-
record_to: Path | None = None,
|
|
64
|
+
record_to: Path | str | None = None,
|
|
56
65
|
) -> AsyncGenerator[AgentChunk, None]:
|
|
57
66
|
"""
|
|
58
67
|
Response API stream handler for processing ResponsesAPIStreamingResponse chunks
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
lite_agent/__init__.py,sha256=Swuefee0etSiaDnn30K2hBNV9UI3hIValW3A-pRE7e0,338
|
|
2
|
-
lite_agent/agent.py,sha256=
|
|
2
|
+
lite_agent/agent.py,sha256=t4AYlw3aF2DCPXf2W3s7aow0ql1ON5O2Q8VVuyoN6UI,22936
|
|
3
3
|
lite_agent/chat_display.py,sha256=b0sUH3fkutc4e_KAKH7AtPu2msyLloNIAiWqCNavdds,30533
|
|
4
4
|
lite_agent/client.py,sha256=m2jfBPIsleMZ1QCczjyHND-PIF17kQh4RTuf5FaipGM,2571
|
|
5
5
|
lite_agent/loggers.py,sha256=XkNkdqwD_nQGfhQJ-bBWT7koci_mMkNw3aBpyMhOICw,57
|
|
6
6
|
lite_agent/message_transfers.py,sha256=9qucjc-uSIXvVfhcmVRC_0lp0Q8sWp99dV4ReCh6ZlI,4428
|
|
7
7
|
lite_agent/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
lite_agent/runner.py,sha256=
|
|
8
|
+
lite_agent/runner.py,sha256=ACZuFJ2dNpdg4Tzeg-bl4Th1X14uhHJdELcBWe5E_Us,40155
|
|
9
9
|
lite_agent/processors/__init__.py,sha256=ybpAzpMBIE9v5I24wIBZRXeaOaPNTmoKH13aofgNI6Q,234
|
|
10
10
|
lite_agent/processors/completion_event_processor.py,sha256=8fQYRofgBd8t0V3oUakTOmZdv5Q9tCuzADGCGvVgy0k,13442
|
|
11
11
|
lite_agent/processors/response_event_processor.py,sha256=CElJMUzLs8mklVqJtoLiVu-NTq0Dz2NNd9YdAKpjgE0,8088
|
|
12
12
|
lite_agent/stream_handlers/__init__.py,sha256=a5s1GZr42uvndtcQqEhK2cnjGkK8ZFTAZCj3J61Bb5E,209
|
|
13
|
-
lite_agent/stream_handlers/litellm.py,sha256=
|
|
13
|
+
lite_agent/stream_handlers/litellm.py,sha256=3D0u7R2ADA8kDwpFImZlw20o-CsmFXVLvq4nvwwD0Rk,2922
|
|
14
14
|
lite_agent/templates/handoffs_source_instructions.xml.j2,sha256=2XsXQlBzk38qbxGrfyt8y2b0KlZmsV_1xavLufcdkHc,428
|
|
15
15
|
lite_agent/templates/handoffs_target_instructions.xml.j2,sha256=gSbWVYYcovPKbGpFc0kqGSJ5Y5UC3fOHyUmZfcrDgSE,356
|
|
16
16
|
lite_agent/templates/wait_for_user_instructions.xml.j2,sha256=wXbcYD5Q1FaCGVBm3Hz_Cp7nnoK7KzloP0ao-jYMwPk,231
|
|
@@ -18,6 +18,6 @@ lite_agent/types/__init__.py,sha256=QKuhjFWRcpAlsBK9JYgoCABpoQExwhuyGudJoiiqQfs,
|
|
|
18
18
|
lite_agent/types/events.py,sha256=mFMqV55WWJbPDyb_P61nd3qMLpEnwZgVY6NTKFkINkg,2389
|
|
19
19
|
lite_agent/types/messages.py,sha256=c7nTIWqXNo562het_vaWcZvsoy-adkARwAYn4JNqm0c,9897
|
|
20
20
|
lite_agent/types/tool_calls.py,sha256=Xnut8-2-Ld9vgA2GKJY6BbFlBaAv_n4W7vo7Jx21A-E,260
|
|
21
|
-
lite_agent-0.4.
|
|
22
|
-
lite_agent-0.4.
|
|
23
|
-
lite_agent-0.4.
|
|
21
|
+
lite_agent-0.4.1.dist-info/METADATA,sha256=iQIr1OAdiVK5Ad6Uho65OpqS1u4YC9sOaoxKZ1FssOs,3456
|
|
22
|
+
lite_agent-0.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
23
|
+
lite_agent-0.4.1.dist-info/RECORD,,
|
|
File without changes
|