Skip to content

feat(runtime): add session_storage config support - #1

Open
jsuwuj wants to merge 26 commits into
mainfrom
feature/session-storage-mount-path
Open

feat(runtime): add session_storage config support#1
jsuwuj wants to merge 26 commits into
mainfrom
feature/session-storage-mount-path

Conversation

@jsuwuj

@jsuwuj jsuwuj commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • 新增 SessionStorageConfig 模型,支持 mount_path 字段
  • storage_config 新增 session_storage 配置项,序列化为 {"session_storage": {"mount_path": "..."}}
  • agentarts init YAML 模板同步更新
  • 补充单元测试

Test plan

  • 71 个单元测试全部通过

Isuzu-ren and others added 26 commits July 27, 2026 14:40
…rences in async client

- dataplane.py:177: correct get_message return annotation from dict[str, Any] to MessageInfo (match actual return and async version)
- async_client.py:129,138,167,172: use self.region_name instead of self._async_data_plane.client.region_name, aligning with sync MemoryClient. In other words, AsyncMemoryClient.get_space/list_spaces/update_space/delete_space referenced self._async_data_plane.client.region_name, now use self.region_name instead, matching create_space
…put()

Langgraph calls put() after every graph step with the FULL accumulated messages list (not a delta). The previous implementation converted and send ALL messages on every put() call, and  the backend do not deduplicate, so an N-step conversation produced N*(N+1)/2 messages instead of N. The extra API calls also caused frequent 429 rate limits.

Fix: track per-session persisted message count in the saver. get_tuple() initialize the count from backend state; put() slices messages[last_count:] and only send the delta. Count is updated only after add_messages() succeed, so a failed put() retry the same delta on the next call. The same fix is applied to the async path (aget_tuple/aput).
- memory_service.py: add delete_session method (DELETE /v1/core/spaces/{space_id}/sessions/{session_id})
- memory_service_async.py: add async delete_session method
- dataplane.py: add delete_session method
- dataplane_async.py: add async delete_session method
- client.py: expose delete_session in MemoryClient
- async_client.py: expose delete_session in AsyncMemoryClient
- session.py: add delete() convenience method to MemorySession
- async_session.py: add delete() convenience method to AsyncMemorySession
Remove the pre-delete log and merge space_id/session_id into a single
success log after deletion. The "After deletion" warning logs in session
layer are also removed since the docstring already covers that.

Ref: maintainer review comment on PR
Add session_storage_mount_path field to StorageConfig, alongside
sfs_turbo, so users can specify a session storage mount path in
the container when creating/deploying a runtime.
fix(memory): align type annotations and correct region attribute references in async client
…e-duplication

fix(integration/langgraph): stop message duplication in checkpointer
…ts Memory

- interactive navigation assistant with POI search, route planning,
  and map links via AMap API (mock fallback when key not set)
- LangGraph ReAct agent with AgentArtsMemorySessionSaver checkpointer
  and recall_memory tool for long-term semantic search
- TUI (Textual) and CLI modes with multi-session support
- bilingual documentation (EN/CN) and configuration templates
- add `tui` extra (textual>=0.86.0) to pyproject.toml, include in `all`
- add sessions.json to .gitignore for the new demo path
…demo

- add auto_recall node: searches AgentArtsMemoryStore before each LLM
  call and injects top-K relevant memories into the system prompt
  via [Memory Context], degrading gracefully on search failure
- reposition recall_memory tool as on-demand deep recall for queries
  beyond the auto-injected context
- update README (EN/CN) with the hybrid recall architecture diagram,
  docs for the new node/tool split, and a note on disabling
  auto-recall for comparison testing
- add AUTO_RECALL_TOP_K / AUTO_RECALL_ENABLED to config for tuning
  the auto-injection behavior
- close AgentArtsMemoryStore in the TUI app on unmount to avoid
  resource leaks
- change the default AGENTARTS_CONTROL_ENDPOINT to the SW-Guiyang-1
  (cn-southwest-2) region in .env.example and config.py
…mode

- extract SYSTEM_PROMPT to prompts.py for independent iteration
- create message_utils.py with extract_message_content() and
  fetch_session_history() to eliminate code duplication between CLI
  and TUI — TUI's _extract_content and inline MemoryClient logic
  replaced by the shared helpers
- make --debug imply CLI mode so SDK INFO logs scroll naturally in
  the terminal instead of being wiped by TUI redraws
- add _print_debug_trace() with agent.stream(stream_mode="updates")
  for real-time per-node tracing in debug mode
- show recent session message history on CLI resume (matching TUI's
  existing behavior)
- fix CLI message_count to load historical count for resumed sessions
  instead of overwriting with 0
- update recall_memory docstring from restrictive to encouraging tone
  (consistent with SYSTEM_PROMPT changes in prompts.py)
- fix README latency description from "zero latency" to "saves an
  LLM round-trip"
- add uv pip install langchain-openai to docs for uv users
…on-api

feat(memory): add delete_session API support
…anggraph-memory-demo

feat(integration): add navigation agent demo with LangGraph + AgentArts Memory
fix(memory): resolve the error in the agent_with_memory example
…y-hermes-#43

feat(memory): Hermes Memory Provider plugin
…orage object

Replace flat string field session_storage_mount_path with
SessionStorageConfig model containing mount_path, serialized as
{"session_storage": {"mount_path": "..."}}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants