What's Changed
Fix: proxy plugin config, logging and agent clients (#330, #331)
- Proxy target ignored: without
~/.optillm/proxy_config.yaml, the proxy silently loaded the bundled example config and routed to its sample providers. It now creates an empty template instead. A single failed request no longer sends all later traffic to--base-url: 4xx errors don't mark a provider unhealthy, and unhealthy providers are retried before falling back. /v1/modelslists the configured providers' models (plusmodel_mapaliases) with--approach proxy.- Agent clients (e.g. Crush): the
noneand proxy approaches now forward the original conversation, includingtool_callsand tool results, instead of flattening it. Streamed responses carry tool calls, finish reason and usage.stream_optionsis no longer forwarded upstream, and messages withcontent: nullno longer crash parsing. - Logging:
--log/OPTILLM_LOGnow apply to all modules and are case-insensitive, so DEBUG logs from the proxy and other plugins show up.
MCP plugin ported to mcp 2.x
- Works with the MCP Python SDK 2.x (
MCPError, snake_case result fields). - New
streamable_httptransport, with headers and timeouts.
Breaking changes
- MCP
websockettransport removed (dropped from the MCP Python SDK in 2.x). Configs using"transport": "websocket"must switch tostreamable_httporsse. - Requires
mcp>=2,<3. Environments that also needmcp<2won't install. - The proxy no longer loads the bundled
example_config.yamlwhen~/.optillm/proxy_config.yamlis missing. Requests use the server's default client (--base-url) until you add providers. OPTILLM_LOG_LEVELremoved. Use--log/OPTILLM_LOG;monitoring.log_levelin the proxy config is an optional proxy-only override.
Thanks to @brettowe for the detailed report.
Full Changelog: v0.3.22...v0.4.0