Found while implementing #134, both present in v1.15.0 (1c2ecde9 shipped the
Mantle passthrough that serves the tool).
1. The searches are not billed. /v1/responses on the GPT-5.x family already
forwards the web_search tool and returns web_search_call items with
url_citation annotations — that part works. AWS meters those searches per query at
a flat rate, published with no model attribute on the price row, so the row
resolves to no dimension and no model key and is dropped silently. A measured
turn under-reported cost by 58%. Every test passes while the feature bills
nothing, which is the failure mode that makes this worth its own issue: an operator
running v1.15.0 is paying AWS for searches that never appear in their usage or cost
reporting.
2. external_web_access is silently overridden. The gateway forces the field
off on a knob that is both cost-bearing and security-bearing (it lets the model fetch
arbitrary URLs), justified by a code comment stating live web access always fails
upstream — which a real call falsifies: it returned HTTP 200 and ran four searches.
Under the API design rules this is the reject the explicit ask case plus an
*_allow_*_override setting, not a silent overwrite.
Its own fix: commit rather than folded into #134, whose scope is the new capability
rather than the released defect.
Found while implementing #134, both present in v1.15.0 (
1c2ecde9shipped theMantle passthrough that serves the tool).
1. The searches are not billed.
/v1/responseson the GPT-5.x family alreadyforwards the
web_searchtool and returnsweb_search_callitems withurl_citationannotations — that part works. AWS meters those searches per query ata flat rate, published with no model attribute on the price row, so the row
resolves to no dimension and no model key and is dropped silently. A measured
turn under-reported cost by 58%. Every test passes while the feature bills
nothing, which is the failure mode that makes this worth its own issue: an operator
running v1.15.0 is paying AWS for searches that never appear in their usage or cost
reporting.
2.
external_web_accessis silently overridden. The gateway forces the fieldoff on a knob that is both cost-bearing and security-bearing (it lets the model fetch
arbitrary URLs), justified by a code comment stating live web access always fails
upstream — which a real call falsifies: it returned HTTP 200 and ran four searches.
Under the API design rules this is the reject the explicit ask case plus an
*_allow_*_overridesetting, not a silent overwrite.Its own
fix:commit rather than folded into #134, whose scope is the new capabilityrather than the released defect.