Files
classic-models-agent-assistant/pyproject.toml
T
Stéphane Tailland f79b58fc88 fix: bound the token cache, and make peer message ids unique
Two bugs from review, the second in both agents because identity.py is a copy.

The exchanged-token cache grew for the life of the process. It is keyed on
(subject token, scope) and the subject token is minted fresh every turn, so
every turn added keys nothing would ever read again — and expiry was checked on
read but never collected. A slow leak that only shows in a pod up for days,
which is the worst way to find one.

It now drops expired entries first and evicts oldest beyond a bound. Expired
first on purpose: an expired entry is dead weight wherever it sits in the
ordering, so evicting by age alone would keep it while discarding a live one.

The docstring was wrong before the code was: it claimed the cache lasted one
turn. It never did. Corrected rather than quietly made true.

message_id reused the context id, which is the conversation — and a conversation
makes several calls to the same peer, relaying an approval being exactly that.
A peer treating the second call as a replay of the first would surface as a
stale answer rather than an error.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 08:03:23 +02:00

37 lines
1.2 KiB
TOML

[project]
name = "assistant-agent"
version = "0.2.1"
description = "Assistant — the orchestrating agent for the classic-models estate"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
# The A2A facade, and the client for calling specialists. The official SDK
# rather than a framework's own: this estate exists to prove A2A
# interoperability across five runtimes, so the reference implementation is
# the safer base for the others to interoperate with.
"a2a-sdk[http-server]>=1.1.2,<2",
# The graph. The orchestrator is where routing is worth making explicit —
# which specialist is consulted when, and where the answers are reconciled.
"langgraph>=1.2.11,<2",
# The model client. The inference endpoint speaks the OpenAI protocol.
"langchain-openai>=1.6.0,<2",
"langchain-core>=1.6.1,<2",
"httpx>=0.28.1,<1",
"pydantic-settings>=2.7",
"uvicorn>=0.52.4",
]
[project.optional-dependencies]
dev = ["pytest>=8", "pytest-asyncio>=0.24"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/assistant_agent"]
[tool.pytest.ini_options]
pythonpath = ["src"]
asyncio_mode = "auto"