Skip to content

Commit 532bbcf

Browse files
raychen911weimch
authored andcommitted
feature: 修改会话总结实现
- 保留历史对话,将总结后的数据设置为模型不可见 - 总结支持后端线程执行,不影响前端线程的对话执行 - 支持多用户的skill 操作
1 parent 7554bf8 commit 532bbcf

77 files changed

Lines changed: 702 additions & 231 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/fastapi_server/_app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ async def chat(req: ChatRequest) -> ChatResponse: # pylint: disable=unused-vari
137137
))
138138

139139
except Exception as exc:
140-
logger.exception("Error during agent run (session=%s)", session_id)
140+
logger.error("Error during agent run (session=%s): %s", session_id, exc)
141141
raise HTTPException(status_code=500, detail=str(exc)) from exc
142142

143143
return ChatResponse(
@@ -214,7 +214,7 @@ async def _event_generator() -> AsyncGenerator[str, None]:
214214
yield _sse(StreamChunk(type="done", session_id=session_id))
215215

216216
except Exception as exc:
217-
logger.exception("Error during streaming run (session=%s)", session_id)
217+
logger.error("Error during streaming run (session=%s): %s", session_id, exc)
218218
yield _sse(StreamChunk(type="error", data=str(exc), session_id=session_id))
219219

220220
return StreamingResponse(

lint_flake8.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
# Usage:
6+
# bash lint_flake8.sh # check current project
7+
# bash lint_flake8.sh path/to/check # check a specific path
8+
9+
TARGET_PATH="${1:-.}"
10+
11+
if ! command -v flake8 >/dev/null 2>&1; then
12+
echo "flake8 is not installed. Install it first:"
13+
echo " python3 -m pip install flake8"
14+
exit 1
15+
fi
16+
17+
echo "Running flake8 on: ${TARGET_PATH}"
18+
19+
flake8 "${TARGET_PATH}" \
20+
--max-line-length=120 \
21+
--extend-exclude=".git,__pycache__,.pytest_cache,.mypy_cache,.ruff_cache,venv,.venv,build,dist,node_modules"

tests/evaluation/test_eval_session_service.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ def _make_session():
1818
"""Create a mock session with required attributes."""
1919
session = MagicMock()
2020
session.events = []
21+
def _insert_events(events, idx=None):
22+
insert_idx = 0 if idx is None else idx
23+
session.events[insert_idx:insert_idx] = list(events)
24+
session.insert_events = MagicMock(side_effect=_insert_events)
2125
return session
2226

2327

tests/events/test_event.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ def test_default_fields(self):
4242
assert event.tag is None
4343
assert event.filter_key is None
4444
assert event.object is None
45+
assert event.model_flags > 0
46+
assert event.is_model_visible() is True
47+
assert event.is_summary_event() is False
4548

4649
def test_auto_generated_id_is_valid_uuid(self):
4750
event = Event(invocation_id="inv-1", author="a")
@@ -308,6 +311,33 @@ def test_error_message_without_code_not_error(self):
308311
assert event.is_error() is False
309312

310313

314+
# ---------------------------------------------------------------------------
315+
# Event model visibility / summary flags
316+
# ---------------------------------------------------------------------------
317+
318+
319+
class TestEventModelFlags:
320+
def test_set_model_visible_false(self):
321+
event = Event(invocation_id="inv-1", author="a")
322+
event.set_model_visible(False)
323+
assert event.is_model_visible() is False
324+
325+
def test_visible_field_does_not_control_model_visibility(self):
326+
event = Event(invocation_id="inv-1", author="a", visible=False)
327+
assert event.is_model_visible() is True
328+
329+
def test_set_summary_event_true(self):
330+
event = Event(invocation_id="inv-1", author="a")
331+
event.set_summary_event(True)
332+
assert event.is_summary_event() is True
333+
334+
def test_clear_summary_event(self):
335+
event = Event(invocation_id="inv-1", author="a")
336+
event.set_summary_event(True)
337+
event.set_summary_event(False)
338+
assert event.is_summary_event() is False
339+
340+
311341
# ---------------------------------------------------------------------------
312342
# Event.has_trailing_code_execution_result
313343
# ---------------------------------------------------------------------------

tests/server/a2a/converters/test_event_converter.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,25 @@
1111
from unittest.mock import MagicMock, patch
1212

1313
import pytest
14-
from a2a.types import (
15-
Artifact,
16-
DataPart,
17-
Message,
18-
Part as A2APart,
19-
Role,
20-
Task,
21-
TaskArtifactUpdateEvent,
22-
TaskState,
23-
TaskStatus,
24-
TaskStatusUpdateEvent,
25-
TextPart,
26-
)
14+
try:
15+
from a2a.types import (
16+
Artifact,
17+
DataPart,
18+
Message,
19+
Part as A2APart,
20+
Role,
21+
Task,
22+
TaskArtifactUpdateEvent,
23+
TaskState,
24+
TaskStatus,
25+
TaskStatusUpdateEvent,
26+
TextPart,
27+
)
28+
except ImportError:
29+
pytest.skip(
30+
"Installed a2a.types does not export DataPart/TextPart; skip legacy A2A tests.",
31+
allow_module_level=True,
32+
)
2733
from google.genai import types as genai_types
2834

2935
from trpc_agent_sdk.context import InvocationContext

tests/server/a2a/converters/test_part_converter.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,15 @@
1313
from unittest.mock import MagicMock
1414

1515
import pytest
16-
from a2a import types as a2a_types
16+
try:
17+
from a2a import types as a2a_types
18+
_ = a2a_types.DataPart
19+
_ = a2a_types.TextPart
20+
except (ImportError, AttributeError):
21+
pytest.skip(
22+
"Installed a2a.types does not export DataPart/TextPart; skip legacy A2A tests.",
23+
allow_module_level=True,
24+
)
1725
from google.genai import types as genai_types
1826

1927
from trpc_agent_sdk.models import TOOL_STREAMING_ARGS

tests/server/a2a/converters/test_request_converter.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@
1111

1212
import pytest
1313
from a2a.server.agent_execution.context import RequestContext
14-
from a2a.types import Message, Part, Role, TextPart
14+
try:
15+
from a2a.types import Message, Part, Role, TextPart
16+
except ImportError:
17+
pytest.skip(
18+
"Installed a2a.types does not export TextPart; skip legacy A2A tests.",
19+
allow_module_level=True,
20+
)
1521

1622
from trpc_agent_sdk.server.a2a.converters._request_converter import (
1723
_get_user_id_default,
File renamed without changes.
File renamed without changes.

tests/server/openclaw/channels/test__command_handler.py renamed to tests/server/openclaw/channels/test_command_handler.py

File renamed without changes.

0 commit comments

Comments
 (0)