Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
221c226
Support for Redis-based session store to run across multiple nodes
dangusev Feb 25, 2026
c5e49d9
Rename storage -> store
dangusev Feb 25, 2026
58b689c
Fix pipe.set() call
dangusev Feb 25, 2026
4a285cf
Cleanup method signature
dangusev Feb 25, 2026
f2cddbb
Remove publish() and subscribe() from SessionKVStore
dangusev Feb 26, 2026
ee8685f
Fix logger.error call
dangusev Feb 26, 2026
36b9956
Implement async context manager for SessionRegistry
dangusev Feb 26, 2026
6a68217
Parametrize SessionRegistry tests
dangusev Feb 26, 2026
c6073e4
Update log message
dangusev Feb 26, 2026
9bfc081
Fix `pipe.pexpire` await
dangusev Feb 26, 2026
f8e4994
Require call_id to access session data on the shared storage
dangusev Feb 26, 2026
13c2823
Increase sleep timeouts in expiry tests
dangusev Feb 26, 2026
028a5ad
Ignore extra keys when reading SessionInfo from the storage
dangusev Feb 26, 2026
2f89eeb
Validate ttl and cleanup interval
dangusev Feb 26, 2026
17029da
More tests
dangusev Feb 26, 2026
813b8fe
Fix possible race condition on session start
dangusev Feb 26, 2026
0592a7d
Improve handling of the missing "redis" module
dangusev Feb 26, 2026
b318078
Fix wrapping exceptions into str()
dangusev Feb 27, 2026
b86abd2
InMemorySessionKVStore: make start() idempotent
dangusev Feb 27, 2026
eb1db6b
InMemorySessionKVStore: fix typo
dangusev Feb 27, 2026
98a8f13
REST API: extract close_session into a helper func
dangusev Feb 27, 2026
5f9116a
REST API: use 503 for /ready error code
dangusev Feb 27, 2026
b971637
AgentLauncher: log on start_session failure
dangusev Feb 27, 2026
8a8b7d0
AgentLauncher: validate call ids on start_session
dangusev Feb 27, 2026
39818b8
SessionRegistry: update metrics only if the session is not yet expired
dangusev Feb 27, 2026
bde4d76
AgentLauncher: keep references for the session cleanup tasks
dangusev Feb 27, 2026
8b4a343
Fix tests
dangusev Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions agents-core/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ decart = ["vision-agents-plugins-decart"]
twilio = ["vision-agents-plugins-twilio"]
turbopuffer = ["vision-agents-plugins-turbopuffer"]
mistral = ["vision-agents-plugins-mistral"]
redis = ["redis[hiredis]>=5.0.0"]

all-plugins = [
"vision-agents-plugins-anthropic",
Expand Down
22 changes: 21 additions & 1 deletion agents-core/vision_agents/core/__init__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,33 @@
from vision_agents.core.agents import Agent
from vision_agents.core.agents.agent_launcher import AgentLauncher, AgentSession
from vision_agents.core.agents.session_registry import (
InMemorySessionKVStore,
SessionInfo,
SessionKVStore,
SessionRegistry,
)
from vision_agents.core.edge.types import User
from vision_agents.core.runner import Runner, ServeOptions

__all__ = [
"Agent",
"User",
"AgentLauncher",
"AgentSession",
"InMemorySessionKVStore",
"Runner",
"ServeOptions",
"SessionInfo",
"SessionKVStore",
"SessionRegistry",
"User",
]

try:
from vision_agents.core.agents.session_registry import RedisSessionKVStore

__all__ += ["RedisSessionKVStore"]
except ModuleNotFoundError as exc:
# Only swallow a missing `redis` package; re-raise anything else
# so real import errors in redis_store.py surface immediately.
if not exc.name or not exc.name.startswith("redis"):
raise
10 changes: 9 additions & 1 deletion agents-core/vision_agents/core/agents/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,18 @@
from .conversation import Conversation as Conversation
from .agent_launcher import AgentLauncher as AgentLauncher
from .agent_types import AgentOptions as AgentOptions
from .session_registry import InMemorySessionKVStore as InMemorySessionKVStore
from .session_registry import SessionInfo as SessionInfo
from .session_registry import SessionKVStore as SessionKVStore
from .session_registry import SessionRegistry as SessionRegistry

__all__ = [
"Agent",
"Conversation",
"AgentLauncher",
"AgentOptions",
"Conversation",
"InMemorySessionKVStore",
"SessionInfo",
"SessionKVStore",
"SessionRegistry",
]
Loading
Loading