Port Pallas to the fast-agent 0.9.x Harness API (remove ==0.7.15 pin) #2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Pallas is pinned to
fast-agent-mcp==0.7.15as a stopgap (commit47a9dd9). fast-agent has since shipped through 0.9.9, which performed a major refactor that removes several internal APIs Pallas depends on. Pallas must be ported to the 0.9.x API so it can track upstream again; until then it is frozen ~15 releases back.Background — why we pinned
Pallas 0.5.x was written against fast-agent 0.7.15 but pinned it unbounded (
fast-agent-mcp>=0.7.15). Consumer deploys (kottos, mentor, iolaus) install withpip install --upgrade --force-reinstall, so pip resolved the newest release, 0.9.9, and every consumer crashed at import time:Commit
47a9dd9changed the pin tofast-agent-mcp==0.7.15to restore service. That is a freeze, not a fix — this issue tracks the real migration.What broke in 0.9.9 (verified against a live 0.9.9 install)
Three fast-agent APIs Pallas imports no longer exist in 0.9.9:
import fast_agent.core.prompt→Prompt.from_multipart(multimodal_server.py)Promptmoved tofast_agent.mcp.prompt(samefrom_multipart(multipart)signature, so a straightforward re-point)from fast_agent.mcp.server import AgentMCPServer(base class ofMultimodalAgentMCPServer)fast_agent.mcp.servernow exports aHarness*family (HarnessMCPAppServer,create_harness_mcp_app_runtime, …) with a different contractfrom fast_agent.mcp import mcp_aggregator, mcp_agent_client_session(used by_fastagent_patch.py)fast_agent.mcp.pyfiles still exist underfast_agent/mcp/but the names aren't surfaced the way Pallas imports them)All other
fast_agent.*symbols Pallas imports still resolve under 0.9.9 — the breakage is concentrated in the server-binding core.The hard part
MultimodalAgentMCPServer(multimodal_server.py) subclassesAgentMCPServerand overrides exactly two methods:register_agent_tools— the images /history/conversation_idbridge that makes Pallas a stateless per-request server_register_health_routes—/live,/ready,/metrics, discovery docIn 0.7.15,
AgentMCPServer.__init__takes(primary_instance, create_instance, dispose_instance, instance_scope, server_name, …, get_registry_version, reload_callback, tool_name_template). The 0.9.xHarnessMCPAppServerreplaces this with a different construction/lifecycle model. Porting means re-expressing both overrides against the new API — this is not a mechanical rename._fastagent_patch.pyreaches intomcp_aggregator/mcp_agent_client_sessioninternals for bearer-token forwarding across the anyio TaskGroup boundary; that patch will likely need reworking against the new module layout too.Scope / checklist
Promptimport tofast_agent.mcp.prompt(multimodal_server.py:26,50)MultimodalAgentMCPServerfromAgentMCPServerto the 0.9.xHarnessMCPAppServerAPI (both overridden methods)_fastagent_patch.pybearer-forwarding against the newfast_agent.mcpinternalsfast_agent.*imports still behave (they resolve, but confirm semantics haven't shifted — e.g.RequestParams,PromptMessageExtended,ToolRunnerHooks,ModelDatabase/ModelParameters)>=0.9,<0.10) — never leave it unbounded again/live+/ready, an agentsend_messagewithhistory+images, and Kernos bearer forwardingv0.2.0tag; all vendorpallas_rel: main)Related
47a9dd9psamathe.helu.ca(Virgo dev): kottos (up on 0.7.15), mentor + iolaus (need first deploy from Fornax —oci_secretrendering)