Skip to content

Commit b5c344f

Browse files
authored
Dev/0.6.17 (#769)
* Capture typed session snapshots on save * Split transcript restore from usage rehydration * session improvements, long response banner * bumps and pins * opus47, kimi25 instruct, final turn banner! * Update skills-repo submodule * fix tests, capabiltiies
1 parent 6bebb18 commit b5c344f

133 files changed

Lines changed: 7527 additions & 897 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/mcp/vision-examples/fastagent.config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Takes format:
66
# <provider>.<model_string>?reasoning=<value> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini?reasoning=low)
7-
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
7+
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3, opus46, opus47, opus46, opus47
88
# and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
99
#
1010
# If not specified, defaults to "haiku".

examples/openapi/fastagent.config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Takes format:
66
# <provider>.<model_string>?reasoning=<value> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini?reasoning=low)
7-
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
7+
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3, opus46, opus47, opus46, opus47
88
# and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
99
#
1010
# If not specified, defaults to "gpt-5-mini?reasoning=low".

examples/otel/fastagent.config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Takes format:
66
# <provider>.<model_string>?reasoning=<value> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini?reasoning=low)
7-
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
7+
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3, opus46, opus47, opus46, opus47
88
# and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
99
#
1010
# If not specified, defaults to "haiku".

examples/setup/fastagent.config.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Takes format:
66
# <provider>.<model_string>?reasoning=<value> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini?reasoning=low)
7-
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
7+
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3, opus46, opus47, opus46, opus47
88
# and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
99
#
1010
# If not specified, defaults to "gpt-5-mini?reasoning=low".
@@ -66,6 +66,8 @@ logger:
6666
progress_display: true
6767
# Show chat User/Assistant messages on the console
6868
show_chat: true
69+
# Show a bright banner before reprinted final streamed responses
70+
stream_reprint_banner: true
6971
# Show tool calls on the console
7072
show_tools: true
7173
# Truncate long tool responses on the console

examples/workflows-md/hf-api-agent/fastagent.config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Takes format:
66
# <provider>.<model_string>?reasoning=<value> (e.g. anthropic.claude-3-5-sonnet-20241022 or openai.o3-mini?reasoning=low)
7-
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3
7+
# Accepts aliases for Anthropic Models: haiku, haiku3, sonnet, sonnet35, opus, opus3, opus46, opus47, opus46, opus47
88
# and OpenAI Models: gpt-4.1, gpt-4.1-mini, o1, o1-mini, o3-mini
99
#
1010
# If not specified, defaults to "gpt-5-mini?reasoning=low".

publish/hf-inference-acp/src/hf_inference_acp/wizard/model_catalog.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ def _get_model_string(alias: str) -> str:
5858
display_name="Kimi K2.5 (Thinking)",
5959
description="Kimi 2.5 thinking profile with curated defaults (temp=1.0, top_p=0.95).",
6060
),
61-
# CuratedModel(
62-
# id="kimi25instant",
63-
# display_name="Kimi K2.5 Instant",
64-
# description="Kimi 2.5 instant profile with thinking disabled (temp=0.6, top_p=0.95).",
65-
# ),
61+
CuratedModel(
62+
id="kimi25instant",
63+
display_name="Kimi K2.5 Instant",
64+
description="Kimi 2.5 instant profile with thinking disabled (temp=0.6, top_p=0.95).",
65+
),
6666
CuratedModel(
6767
id="qwen35",
6868
display_name="Qwen 3.5 (Thinking)",
@@ -150,7 +150,7 @@ def format_model_list_help() -> str:
150150
"**Examples:**",
151151
"- `/set-model kimi` - Use the Kimi K2 model",
152152
"- `/set-model glm` - Use GLM 4.6",
153-
# "- `/set-model kimi25instant` - Use Kimi 2.5 instant profile",
153+
"- `/set-model kimi25instant` - Use Kimi 2.5 instant profile",
154154
"- `/set-model qwen35instruct` - Use Qwen 3.5 with instruct sampling profile",
155155
"- `/set-model moonshotai/Kimi-K2-Thinking` - Set model (autoroute) and show providers",
156156
"",

pyproject.toml

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "fast-agent-mcp"
3-
version = "0.6.16"
3+
version = "0.6.17"
44
description = "Define, Prompt and Test MCP enabled Agents and Workflows"
55
readme = "README.md"
66
license = { file = "LICENSE" }
@@ -14,39 +14,39 @@ classifiers = [
1414
]
1515
requires-python = ">=3.13.5,<3.15"
1616
dependencies = [
17-
"fastapi>=0.121.0",
18-
"fastmcp==3.2.0",
17+
"fastapi==0.136.0",
18+
"fastmcp==3.2.3",
1919
"mcp==1.27.0",
20-
"pydantic-settings>=2.7.0",
21-
"pydantic>=2.10.4",
22-
"pyyaml>=6.0.2",
23-
"rich>=14.3.3",
24-
"typer>=0.24.1",
25-
"anthropic[vertex]>=0.86.0",
20+
"pydantic-settings==2.13.0",
21+
"pydantic==2.13.1",
22+
"pyyaml==6.0.3",
23+
"rich==14.3.3",
24+
"typer==0.24.1",
25+
"anthropic[vertex]==0.96.0",
2626
"openai[aiohttp]==2.31.0",
27-
"prompt-toolkit>=3.0.52",
28-
"aiohttp>=3.13.2",
27+
"prompt-toolkit==3.0.52",
28+
"aiohttp==3.13.5",
2929
"opentelemetry-distro==0.60b1",
3030
"opentelemetry-exporter-otlp-proto-http==1.39.1",
3131
"opentelemetry-instrumentation-openai==0.52.1; python_version >= '3.10' and python_version < '4.0'",
3232
"opentelemetry-instrumentation-anthropic==0.52.1; python_version >= '3.10' and python_version < '4.0'",
3333
"opentelemetry-instrumentation-mcp==0.52.1; python_version >= '3.10' and python_version < '4.0'",
3434
"opentelemetry-instrumentation-google-genai==0.6b0",
35-
"google-genai>=1.66.0",
36-
"deprecated>=1.2.18",
37-
"a2a-sdk>=0.3.16",
38-
"email-validator>=2.2.0",
39-
"pyperclip>=1.9.0",
40-
"keyring>=24.3.1",
41-
"python-frontmatter>=1.1.0",
42-
"watchfiles>=1.1.0",
35+
"google-genai==1.66.0",
36+
"deprecated==1.3.1",
37+
"a2a-sdk==0.3.26",
38+
"email-validator==2.2.0",
39+
"pyperclip==1.9.0",
40+
"keyring==25.7.0",
41+
"python-frontmatter==1.1.0",
42+
"watchfiles==1.1.1",
4343
"agent-client-protocol==0.9.0",
44-
"jsonschema>=4.25.1",
45-
"tiktoken>=0.12.0",
46-
"uvloop>=0.22.1; platform_system != 'Windows'",
47-
"multilspy>=0.0.15",
48-
"ruamel.yaml>=0.18.16",
49-
"mslex>=1.3.0",
44+
"jsonschema==4.25.1",
45+
"tiktoken==0.12.0",
46+
"uvloop==0.22.1; platform_system != 'Windows'",
47+
"multilspy==0.0.15",
48+
"ruamel.yaml==0.19.1",
49+
"mslex==1.3.0",
5050
]
5151

5252
[project.optional-dependencies]

scripts/session_usage_bounce.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,22 @@ def _select_history_files(session_dir: Path) -> list[Path]:
136136
if selected:
137137
return sorted(selected)
138138

139+
continuation = _as_dict(payload.get("continuation")) or {}
140+
agents = _as_dict(continuation.get("agents")) or {}
141+
selected = []
142+
for agent_payload in agents.values():
143+
agent_entry = _as_dict(agent_payload)
144+
if agent_entry is None:
145+
continue
146+
history_file = agent_entry.get("history_file")
147+
if not isinstance(history_file, str) or history_file.endswith("_previous.json"):
148+
continue
149+
candidate = session_dir / history_file
150+
if candidate.exists() and candidate not in selected:
151+
selected.append(candidate)
152+
if selected:
153+
return sorted(selected)
154+
139155
return sorted(
140156
path
141157
for path in session_dir.glob("history_*.json")

src/fast_agent/acp/server/agent_acp_server.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,14 @@ async def _refresh_session_state(
501501
) -> None:
502502
await self._session_runtime.refresh_session_state(session_state, instance)
503503

504+
async def _hydrate_session_state_from_persisted_session(
505+
self,
506+
session_state: ACPSessionState,
507+
) -> bool:
508+
return await self._session_store.hydrate_session_state_from_persisted_session(
509+
session_state
510+
)
511+
504512
async def _attach_mcp_server_for_session(
505513
self,
506514
session_state: ACPSessionState,

0 commit comments

Comments
 (0)