lite-agent 0.8.0__tar.gz → 0.9.0__tar.gz
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-0.8.0 → lite_agent-0.9.0}/CHANGELOG.md +18 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/PKG-INFO +2 -2
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/basic.py +1 -1
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/basic_agent.py +4 -4
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/cancel_and_transfer_demo.py +21 -19
- lite_agent-0.9.0/examples/knowledge/main.py +67 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/non_streaming.py +2 -3
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/response_api_example.py +2 -2
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/simple_debug.py +1 -2
- lite_agent-0.9.0/htmlcov/.gitignore +2 -0
- lite_agent-0.9.0/htmlcov/class_index.html +771 -0
- lite_agent-0.9.0/htmlcov/coverage_html_cb_6fb7b396.js +733 -0
- lite_agent-0.9.0/htmlcov/favicon_32_cb_58284776.png +0 -0
- lite_agent-0.9.0/htmlcov/function_index.html +1475 -0
- lite_agent-0.9.0/htmlcov/index.html +272 -0
- lite_agent-0.9.0/htmlcov/keybd_closed_cb_ce680311.png +0 -0
- lite_agent-0.9.0/htmlcov/status.json +1 -0
- lite_agent-0.9.0/htmlcov/style_cb_6b508a39.css +377 -0
- lite_agent-0.9.0/htmlcov/z_02adcf90d0f2eeb1___init___py.html +228 -0
- lite_agent-0.9.0/htmlcov/z_02adcf90d0f2eeb1_events_py.html +216 -0
- lite_agent-0.9.0/htmlcov/z_02adcf90d0f2eeb1_messages_py.html +441 -0
- lite_agent-0.9.0/htmlcov/z_02adcf90d0f2eeb1_tool_calls_py.html +112 -0
- lite_agent-0.9.0/htmlcov/z_1d32cdd6b7b66bed___init___py.html +97 -0
- lite_agent-0.9.0/htmlcov/z_1d32cdd6b7b66bed_message_builder_py.html +308 -0
- lite_agent-0.9.0/htmlcov/z_1d32cdd6b7b66bed_metrics_py.html +147 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e___init___py.html +105 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_agent_py.html +777 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_chat_display_py.html +884 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_client_py.html +337 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_constants_py.html +127 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_loggers_py.html +100 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_message_transfers_py.html +216 -0
- lite_agent-0.9.0/htmlcov/z_40b804173f68aa9e_runner_py.html +993 -0
- lite_agent-0.9.0/htmlcov/z_71ac9935daa08879___init___py.html +108 -0
- lite_agent-0.9.0/htmlcov/z_71ac9935daa08879_base_py.html +151 -0
- lite_agent-0.9.0/htmlcov/z_71ac9935daa08879_completion_py.html +175 -0
- lite_agent-0.9.0/htmlcov/z_71ac9935daa08879_responses_py.html +173 -0
- lite_agent-0.9.0/htmlcov/z_c8357a9ef7e20b45___init___py.html +103 -0
- lite_agent-0.9.0/htmlcov/z_c8357a9ef7e20b45_litellm_py.html +181 -0
- lite_agent-0.9.0/htmlcov/z_f01690d2832086e5___init___py.html +101 -0
- lite_agent-0.9.0/htmlcov/z_f01690d2832086e5_completion_event_processor_py.html +397 -0
- lite_agent-0.9.0/htmlcov/z_f01690d2832086e5_response_event_processor_py.html +310 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/pyproject.toml +7 -2
- lite_agent-0.9.0/pyrightconfig.json +12 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/agent.py +94 -43
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/chat_display.py +298 -41
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/message_transfers.py +21 -2
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/processors/response_event_processor.py +4 -2
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/runner.py +39 -8
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/utils/message_builder.py +3 -1
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_agent_additional.py +6 -12
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_cancel_pending_tools.py +1 -1
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_chat_display_additional.py +2 -3
- lite_agent-0.9.0/tests/unit/test_chat_display_simple.py +155 -0
- lite_agent-0.9.0/tests/unit/test_client.py +326 -0
- lite_agent-0.9.0/tests/unit/test_message_builder.py +422 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_message_transfers.py +27 -20
- lite_agent-0.9.0/tests/unit/test_response_handlers.py +270 -0
- lite_agent-0.9.0/tests/unit/test_utils_extended.py +97 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/uv.lock +273 -273
- {lite_agent-0.8.0 → lite_agent-0.9.0}/.claude/settings.local.json +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/.github/workflows/ci.yml +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/.gitignore +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/.python-version +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/.vscode/launch.json +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/CLAUDE.md +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/README.md +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/basic_model.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/channels/rich_channel.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/chat_display_demo.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/confirm_and_continue.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/consolidate_history.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/context.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/debug_non_streaming.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/debug_with_logging.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/handoffs.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/image.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/llm_config_demo.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/message_transfer_example.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/message_transfer_example_new.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/new_message_structure_demo.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/reasoning_example.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/responses.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/set_chat_history_example.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/simple_debug2.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/stop_before_functions.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/stop_with_tool_call.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/streaming_demo.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/terminal.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/translate/main.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/translate/prompts/translation_system.md.j2 +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/translate.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/examples/type_system_example.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/scripts/record_chat_messages.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/client.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/constants.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/loggers.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/processors/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/processors/completion_event_processor.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/py.typed +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/response_handlers/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/response_handlers/base.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/response_handlers/completion.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/response_handlers/responses.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/stream_handlers/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/stream_handlers/litellm.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/templates/handoffs_source_instructions.xml.j2 +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/templates/handoffs_target_instructions.xml.j2 +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/templates/wait_for_user_instructions.xml.j2 +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/types/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/types/events.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/types/messages.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/types/tool_calls.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/utils/__init__.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/src/lite_agent/utils/metrics.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/temp/main.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/integration/test_agent_with_mocks.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/integration/test_basic.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/integration/test_mock_litellm.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/mocks/basic/1.jsonl +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/mocks/confirm_and_continue/1.jsonl +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/mocks/confirm_and_continue/2.jsonl +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/mocks/context/1.jsonl +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/mocks/handoffs/1.jsonl +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/performance/test_set_chat_history_performance.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/test_new_messages.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_agent.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_agent_handoffs.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_append_message.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_chat_display.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_completion_condition.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_file_recording.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_litellm_stream_handler.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_message_transfer.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_message_transfers_additional.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_response_api_format.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_response_event_processor.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_runner.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_set_chat_history.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_simple_stream_handlers.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_stream_chunk_processor.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_stream_handlers_additional.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/unit/test_streaming_config.py +0 -0
- {lite_agent-0.8.0 → lite_agent-0.9.0}/tests/utils/mock_litellm.py +0 -0
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## v0.9.0
|
|
2
|
+
|
|
3
|
+
[v0.8.0...v0.9.0](https://github.com/Jannchie/lite-agent/compare/v0.8.0...v0.9.0)
|
|
4
|
+
|
|
5
|
+
### :sparkles: Features
|
|
6
|
+
|
|
7
|
+
- **agent**: improve assistant message tool_call handling - By [Jannchie](mailto:jannchie@gmail.com) in [45e6de8](https://github.com/Jannchie/lite-agent/commit/45e6de8)
|
|
8
|
+
- **chat-display**: add column-style message display and show model info - By [Jannchie](mailto:jannchie@gmail.com) in [3559137](https://github.com/Jannchie/lite-agent/commit/3559137)
|
|
9
|
+
- **tests**: add tests for client message_builder and response handlers - By [Jannchie](mailto:jannchie@gmail.com) in [ceec7d7](https://github.com/Jannchie/lite-agent/commit/ceec7d7)
|
|
10
|
+
|
|
11
|
+
### :art: Refactors
|
|
12
|
+
|
|
13
|
+
- **examples**: update examples to use new message and content types - By [Jannchie](mailto:jannchie@gmail.com) in [59b4618](https://github.com/Jannchie/lite-agent/commit/59b4618)
|
|
14
|
+
|
|
15
|
+
### :wrench: Chores
|
|
16
|
+
|
|
17
|
+
- **deps**: bump funcall to 0.11.0 - By [Jannchie](mailto:jannchie@gmail.com) in [eb5e7ae](https://github.com/Jannchie/lite-agent/commit/eb5e7ae)
|
|
18
|
+
|
|
1
19
|
## v0.8.0
|
|
2
20
|
|
|
3
21
|
[v0.7.0...v0.8.0](https://github.com/Jannchie/lite-agent/compare/v0.7.0...v0.8.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lite-agent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: A lightweight, extensible framework for building AI agent.
|
|
5
5
|
Author-email: Jianqi Pan <jannchie@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,7 +18,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
19
|
Requires-Python: >=3.10
|
|
20
20
|
Requires-Dist: aiofiles>=24.1.0
|
|
21
|
-
Requires-Dist: funcall>=0.
|
|
21
|
+
Requires-Dist: funcall>=0.11.0
|
|
22
22
|
Requires-Dist: openai<=1.99.5
|
|
23
23
|
Requires-Dist: prompt-toolkit>=3.0.51
|
|
24
24
|
Requires-Dist: rich>=14.0.0
|
|
@@ -31,7 +31,7 @@ agent = Agent(
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
async def main():
|
|
34
|
-
runner = Runner(agent, streaming=
|
|
34
|
+
runner = Runner(agent, streaming=True, api="responses")
|
|
35
35
|
resp = await runner.run_until_complete(
|
|
36
36
|
"What is the temperature in New York?",
|
|
37
37
|
includes=["usage", "assistant_message", "function_call", "function_call_output", "timing"],
|
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from rich.logging import RichHandler
|
|
5
5
|
|
|
6
6
|
from lite_agent.agent import Agent
|
|
7
|
+
from lite_agent.types import NewUserMessage, UserTextContent
|
|
7
8
|
|
|
8
9
|
logging.basicConfig(
|
|
9
10
|
level=logging.WARNING,
|
|
@@ -39,10 +40,9 @@ agent = Agent(
|
|
|
39
40
|
async def main():
|
|
40
41
|
resp = await agent.completion(
|
|
41
42
|
[
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
},
|
|
43
|
+
NewUserMessage(
|
|
44
|
+
content=[UserTextContent(text="What is the temperature and whether in New York?")],
|
|
45
|
+
),
|
|
46
46
|
],
|
|
47
47
|
)
|
|
48
48
|
async for chunk in resp:
|
|
@@ -6,6 +6,7 @@ Demo showing two new features:
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import asyncio
|
|
9
|
+
import json
|
|
9
10
|
import logging
|
|
10
11
|
|
|
11
12
|
from funcall.decorators import tool
|
|
@@ -13,7 +14,8 @@ from rich.logging import RichHandler
|
|
|
13
14
|
|
|
14
15
|
from lite_agent.agent import Agent
|
|
15
16
|
from lite_agent.runner import Runner
|
|
16
|
-
from lite_agent.types import AssistantTextContent, AssistantToolCall, NewAssistantMessage
|
|
17
|
+
from lite_agent.types import AssistantTextContent, AssistantToolCall, AssistantToolCallResult, NewAssistantMessage, ToolCall, ToolCallFunction
|
|
18
|
+
from lite_agent.types.events import FunctionCallOutputEvent
|
|
17
19
|
|
|
18
20
|
logging.basicConfig(
|
|
19
21
|
level=logging.WARNING,
|
|
@@ -106,9 +108,9 @@ async def demo_1_cancel_pending_tools():
|
|
|
106
108
|
chunks.append(chunk)
|
|
107
109
|
if len(chunks) >= 3: # Stop after getting cancellation events
|
|
108
110
|
break
|
|
109
|
-
except Exception:
|
|
111
|
+
except Exception as e:
|
|
110
112
|
# Expected - no real LLM configured
|
|
111
|
-
|
|
113
|
+
logger.debug("Expected exception in demo: %s", e)
|
|
112
114
|
|
|
113
115
|
print(f"Events from run() method: {len(chunks)}")
|
|
114
116
|
for i, chunk in enumerate(chunks):
|
|
@@ -156,7 +158,7 @@ async def demo_1_cancel_pending_tools():
|
|
|
156
158
|
print(f"Content items in assistant message: {len(assistant_msg.content)}")
|
|
157
159
|
|
|
158
160
|
# Show the cancellation results
|
|
159
|
-
cancellation_results = [item for item in assistant_msg.content if item
|
|
161
|
+
cancellation_results = [item for item in assistant_msg.content if isinstance(item, AssistantToolCallResult)]
|
|
160
162
|
print(f"Cancellation results added: {len(cancellation_results)}")
|
|
161
163
|
for result in cancellation_results:
|
|
162
164
|
print(f" - {result.call_id}: {result.output}")
|
|
@@ -194,9 +196,6 @@ async def demo_2_transfer_events():
|
|
|
194
196
|
print(f"Current agent: {runner.agent.name}")
|
|
195
197
|
|
|
196
198
|
# Simulate transfer_to_agent call
|
|
197
|
-
import json
|
|
198
|
-
|
|
199
|
-
from lite_agent.types import ToolCall, ToolCallFunction
|
|
200
199
|
|
|
201
200
|
transfer_call = ToolCall(
|
|
202
201
|
type="function",
|
|
@@ -209,13 +208,14 @@ async def demo_2_transfer_events():
|
|
|
209
208
|
)
|
|
210
209
|
|
|
211
210
|
# Handle transfer and collect events
|
|
212
|
-
chunks = []
|
|
213
|
-
async for chunk in runner._handle_tool_calls([transfer_call], ["function_call_output"]):
|
|
214
|
-
chunks.append(chunk)
|
|
211
|
+
chunks = [chunk async for chunk in runner._handle_tool_calls([transfer_call], ["function_call_output"])]
|
|
215
212
|
|
|
216
213
|
print(f"Events generated: {len(chunks)}")
|
|
217
214
|
for i, chunk in enumerate(chunks):
|
|
218
|
-
|
|
215
|
+
if isinstance(chunk, FunctionCallOutputEvent):
|
|
216
|
+
print(f" Event {i + 1}: {chunk.type} - {chunk.content}")
|
|
217
|
+
else:
|
|
218
|
+
print(f" Event {i + 1}: {chunk.type}")
|
|
219
219
|
|
|
220
220
|
print(f"Agent after transfer: {runner.agent.name}")
|
|
221
221
|
|
|
@@ -232,13 +232,14 @@ async def demo_2_transfer_events():
|
|
|
232
232
|
)
|
|
233
233
|
|
|
234
234
|
# Handle parent transfer and collect events
|
|
235
|
-
chunks = []
|
|
236
|
-
async for chunk in runner._handle_tool_calls([parent_transfer_call], ["function_call_output"]):
|
|
237
|
-
chunks.append(chunk)
|
|
235
|
+
chunks = [chunk async for chunk in runner._handle_tool_calls([parent_transfer_call], ["function_call_output"])]
|
|
238
236
|
|
|
239
237
|
print(f"Events generated: {len(chunks)}")
|
|
240
238
|
for i, chunk in enumerate(chunks):
|
|
241
|
-
|
|
239
|
+
if isinstance(chunk, FunctionCallOutputEvent):
|
|
240
|
+
print(f" Event {i + 1}: {chunk.type} - {chunk.content}")
|
|
241
|
+
else:
|
|
242
|
+
print(f" Event {i + 1}: {chunk.type}")
|
|
242
243
|
|
|
243
244
|
print(f"Agent after parent transfer: {runner.agent.name}")
|
|
244
245
|
|
|
@@ -265,13 +266,14 @@ async def demo_2_transfer_events():
|
|
|
265
266
|
index=1,
|
|
266
267
|
)
|
|
267
268
|
|
|
268
|
-
chunks = []
|
|
269
|
-
async for chunk in runner._handle_tool_calls([transfer_call_1, transfer_call_2], ["function_call_output"]):
|
|
270
|
-
chunks.append(chunk)
|
|
269
|
+
chunks = [chunk async for chunk in runner._handle_tool_calls([transfer_call_1, transfer_call_2], ["function_call_output"])]
|
|
271
270
|
|
|
272
271
|
print(f"Events generated: {len(chunks)}")
|
|
273
272
|
for i, chunk in enumerate(chunks):
|
|
274
|
-
|
|
273
|
+
if isinstance(chunk, FunctionCallOutputEvent):
|
|
274
|
+
print(f" Event {i + 1}: {chunk.content}")
|
|
275
|
+
else:
|
|
276
|
+
print(f" Event {i + 1}: {chunk.type}")
|
|
275
277
|
|
|
276
278
|
print(f"Final agent: {runner.agent.name}")
|
|
277
279
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from rich.logging import RichHandler
|
|
5
|
+
|
|
6
|
+
from lite_agent.agent import Agent
|
|
7
|
+
from lite_agent.chat_display import display_messages
|
|
8
|
+
from lite_agent.runner import Runner
|
|
9
|
+
|
|
10
|
+
logging.basicConfig(
|
|
11
|
+
level=logging.WARNING,
|
|
12
|
+
format="%(message)s",
|
|
13
|
+
datefmt="[%X]",
|
|
14
|
+
handlers=[RichHandler(rich_tracebacks=True)],
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger("lite_agent")
|
|
18
|
+
logger.setLevel(logging.DEBUG)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def list_knowledges() -> list[str]:
|
|
22
|
+
"""
|
|
23
|
+
列出系统中存在的知识,返回的是知识的标题
|
|
24
|
+
"""
|
|
25
|
+
return ["苹果的价格的计算方法", "香蕉的价格", "茄子的价格", "芒果的价格", "其他水果蔬菜的价格"]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def read_knowledge(knowledge: str) -> str:
|
|
29
|
+
"""
|
|
30
|
+
通过知识的标题获取其内容
|
|
31
|
+
"""
|
|
32
|
+
match knowledge:
|
|
33
|
+
case "苹果的价格的计算方法":
|
|
34
|
+
return "苹果的价格是两倍的香蕉的价格减去茄子的价格"
|
|
35
|
+
case "香蕉的价格":
|
|
36
|
+
return "香蕉的价格为3元"
|
|
37
|
+
case "其他水果蔬菜的价格":
|
|
38
|
+
return "茄子的价格为5元"
|
|
39
|
+
case "茄子的价格":
|
|
40
|
+
return "茄子的价格请参阅其他知识库"
|
|
41
|
+
case "芒果的价格":
|
|
42
|
+
return "芒果的价格为7元"
|
|
43
|
+
case _:
|
|
44
|
+
return "不存在的知识"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
agent = Agent(
|
|
48
|
+
model="gpt-5-mini",
|
|
49
|
+
name="Assistant",
|
|
50
|
+
instructions="你是一个有帮助的助手。",
|
|
51
|
+
tools=[list_knowledges, read_knowledge],
|
|
52
|
+
reasoning={"effort": "minimal"},
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def main():
|
|
57
|
+
runner = Runner(agent, streaming=True)
|
|
58
|
+
await runner.run_until_complete(
|
|
59
|
+
"苹果的价格是多少?查询知识库告诉我答案。",
|
|
60
|
+
includes=["usage", "assistant_message", "function_call", "function_call_output", "timing"],
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
display_messages(runner.messages)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if __name__ == "__main__":
|
|
67
|
+
asyncio.run(main())
|
|
@@ -3,6 +3,7 @@ Simple example demonstrating non-streaming mode in LiteAgent.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
from datetime import datetime, timezone
|
|
6
7
|
|
|
7
8
|
from lite_agent import Agent, Runner
|
|
8
9
|
|
|
@@ -33,9 +34,7 @@ async def main():
|
|
|
33
34
|
# Example with a simple tool
|
|
34
35
|
def get_time() -> str:
|
|
35
36
|
"""Get the current time."""
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return f"Current time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
|
|
37
|
+
return f"Current time: {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S')}"
|
|
39
38
|
|
|
40
39
|
agent_with_tools = Agent(
|
|
41
40
|
name="TimeAgent",
|
|
@@ -86,7 +86,7 @@ async def main():
|
|
|
86
86
|
)
|
|
87
87
|
|
|
88
88
|
# This will raise an error when trying to convert
|
|
89
|
-
converted_messages = agent._convert_responses_to_completions_format(runner.messages)
|
|
89
|
+
converted_messages = agent._convert_responses_to_completions_format(runner.messages)
|
|
90
90
|
print("❌ This should not be reached!")
|
|
91
91
|
|
|
92
92
|
except ValueError as e:
|
|
@@ -108,7 +108,7 @@ async def main():
|
|
|
108
108
|
print("\n=== Converted messages for LLM API ===")
|
|
109
109
|
# Note: In a real application, this conversion happens automatically
|
|
110
110
|
# We're accessing the private method here just for demonstration
|
|
111
|
-
converted_messages = agent._convert_responses_to_completions_format(runner.messages)
|
|
111
|
+
converted_messages = agent._convert_responses_to_completions_format(runner.messages)
|
|
112
112
|
for i, message in enumerate(converted_messages):
|
|
113
113
|
print(f"Converted Message {i + 1}:")
|
|
114
114
|
print(f" {message}")
|
|
@@ -3,6 +3,7 @@ Simple debug to check non-streaming response.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import traceback
|
|
6
7
|
|
|
7
8
|
from lite_agent import Agent, Runner
|
|
8
9
|
|
|
@@ -29,8 +30,6 @@ async def main():
|
|
|
29
30
|
print(f"First chunk: {chunks[0]}")
|
|
30
31
|
except Exception as e:
|
|
31
32
|
print(f"Error: {e}")
|
|
32
|
-
import traceback
|
|
33
|
-
|
|
34
33
|
traceback.print_exc()
|
|
35
34
|
|
|
36
35
|
|