---
version: 2
interactions:
- id: 0
  request:
    proto: HTTP/1.1
    proto_major: 1
    proto_minor: 1
    content_length: 466
    host: ""
    body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"openai/gpt-5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"enabled":true}}'
    headers:
      Accept:
      - application/json
      Content-Type:
      - application/json
      User-Agent:
      - Charm-Fantasy/0.12.2 (https://charm.land/fantasy)
    url: https://ai-gateway.vercel.sh/v1/chat/completions
    method: POST
  response:
    proto: HTTP/2.0
    proto_major: 2
    proto_minor: 0
    content_length: -1
    uncompressed: true
    body: '{"id":"gen_01KKHTTA1DCN018DY9V8QKWPKR","object":"chat.completion","created":1773346311,"model":"openai/gpt-5","choices":[{"index":0,"message":{"role":"assistant","content":null,"reasoning":"**Deciding on the weather tool**\n\nI need to figure out whether to call the weather tool for the user’s request about Florence, Italy. Since they’ve asked for weather info, it makes sense to use the functions.weather tool targeting that location. Since there''s only one tool involved, I think I should call functions.weather directly. Using multi_tool_use.parallel seems unnecessary here because we only need this one tool. So, I''ll proceed with calling functions.weather for Florence, Italy.","reasoning_details":[{"type":"reasoning.summary","summary":"**Deciding on the weather tool**\n\nI need to figure out whether to call the weather tool for the user’s request about Florence, Italy. Since they’ve asked for weather info, it makes sense to use the functions.weather tool targeting that location. Since there''s only one tool involved, I think I should call functions.weather directly. Using multi_tool_use.parallel seems unnecessary here because we only need this one tool. So, I''ll proceed with calling functions.weather for Florence, Italy.","id":"rs_00d2f6810bafb8e40169b31dfe9384819092696410f3668856","format":"openai-responses-v1","index":0},{"type":"reasoning.encrypted","data":"gAAAAABpsx4H2XPLIGMjLXTKKE3tMMj5N_K6bCl-bKPuPQIa1yJCBxhXG_ttUlpbM74yKj9nnhAVciny2to3wHBSfjbj3fn20yJavilIW_sFeARllHgBl9dVWaQ8pmGsHBpryThxIrl-iXrYGka2JA21nhNVN1m_UE3yz1qdfLAAGKyKBHVmo0UlBCwPG6bA_PisxWdRebjJrEB1oEzl7WhWMN2T6SjEKykKF4z8bSiOpx8rxgI4vn0SinBw556RaNU9cgKtUR4CC2u4E7700zVSicSKSoqB7FlWCgKFvjO_vGJ5uWsVqm50VGQK9h2R4DS2ZOddfsWjJfqo32h9Pz6VBmru2DKil7DSVhgP--1p9b9gzjeGYPrgqBpxt-XO9i7loUhrwgo3k42fjJ8itaoFqLkloX882-HbxZwgsVgcyM95WWwBrUlPuR3MpVVZ7sqGo5K9MSX1PUiBQt7qdfxLnLJSmOpgJUW65XU2RCOR9wGQ3ZqIsQ0-gmvLk5QrlrCegrF1DGgSCND3DSiyEwkmBP21FJEk6Yzr2JB4vSPp9WUW6XbHi3tyJbXQZlwfg64JDT378xowgAkBDF6utYhMQbOswQ1FJa0RTSM9iI3jmBeZs9ka5PdHtlieWZfGMZ5OoCVj48J_mrv9cfEJi1rHmKiFNP90tdeW0JJ-fcBaET-mWFEJtRy7yg1twEfE__3CUhYqGDPUI7IB_8o2-oZ3l6SfaRHuXsVkLq3t2K8qFgdj-njeEH5_pIC8Hi1oipNkaTngSDFNmskkD7L1Tz8v36vDV-p686KL7qFrHaBtMDc62hx2WM1tgrxngTwPbfeH2BYCw7r1fvCIpxxLpt1aS3u3fGPDRed9QP7DlS7bCbjexMR0RIR_Npegt-bRps1btWfvpuAVcEPRAv6IHW3ahaNKHtJ-mUddZxISngosiyI27xdf8PtQSLSjIoW-w6cn2lAPXauS-FCVgHIGci76p0vZm9oW1TZ9J1S4Cyj9E8rwRiThrp60L4Ey1KbervfOEPhRJMFNIifJgp3sGBKWXKatIcqC5-aHMjWsn5AzBV440zHDAbEqaJ_VzgOEQ72rNUyXIw3Wm3kRqS9dheG9dCMAdQmHchzr4sQw7N66u-vAgqd6nBMAwtdxni4E4LMhl_ndfVV7FV-bBg1W0iRN3CPlL9ksCxqgmPPCI5v40PJvypF_VMxR8GP4qBTziMtqIF505z7NaAiYAXQul_djMUkn6UkQQMkzj6Dboe7Yk3ymZbWkRyoVwWciU6F2WsaT6qX5V4Ao5aQdg2V3_zjIIlpWWuSA7o7JXX8GvUzj6jGfx4PCPNbIco5l0Jv8IaBQlF0t6P4IdpgT55ESMUdx0U_oR0i1urKsmTmydoCWKJKVvTetSLigniRRS2BfZN3NCRRwBT9N518UuqgjikdQ4fNewfgru9V5zdGnddRxaFUDYlkmok-lwA6LUhZsheFOBrnXra38gDfyqUn-QOIaUAw5R-3HakXIR13-jl99hTCuvxIlYtbJkPauZtfJxuZiG-VcAIKyQStO_UArWTsFv_lj4W1lTw==","id":"rs_00d2f6810bafb8e40169b31dfe9384819092696410f3668856","format":"openai-responses-v1","index":0}],"tool_calls":[{"id":"call_SmeBZtwDeWEKUJC6ead03JoS","type":"function","function":{"name":"weather","arguments":"{\"location\":\"Florence, Italy\"}"}}],"provider_metadata":{"openai":{"responseId":"resp_00d2f6810bafb8e40169b31dfe12208190b20f1737de071c6a","serviceTier":"default"},"gateway":{"routing":{"originalModelId":"openai/gpt-5","resolvedProvider":"openai","resolvedProviderApiModelId":"gpt-5-2025-08-07","internalResolvedModelId":"openai:gpt-5-2025-08-07","fallbacksAvailable":["azure"],"internalReasoning":"Selected openai as preferred provider for gpt-5. 1 fallback(s) available: azure","planningReasoning":"System credentials planned for: openai, azure. Total execution order: openai(system) → azure(system)","canonicalSlug":"openai/gpt-5","finalProvider":"openai","attempts":[{"provider":"openai","internalModelId":"openai:gpt-5-2025-08-07","providerApiModelId":"gpt-5-2025-08-07","credentialType":"system","success":true,"startTime":373697.894945,"endTime":382770.366758,"statusCode":200,"providerResponseId":"resp_00d2f6810bafb8e40169b31dfe12208190b20f1737de071c6a"}],"modelAttemptCount":1,"modelAttempts":[{"modelId":"openai:gpt-5-2025-08-07","canonicalSlug":"openai/gpt-5","success":true,"providerAttemptCount":1,"providerAttempts":[{"provider":"openai","internalModelId":"openai:gpt-5-2025-08-07","providerApiModelId":"gpt-5-2025-08-07","credentialType":"system","success":true,"startTime":373697.894945,"endTime":382770.366758,"statusCode":200,"providerResponseId":"resp_00d2f6810bafb8e40169b31dfe12208190b20f1737de071c6a"}]}],"totalProviderAttemptCount":1},"cost":"0.00205875","marketCost":"0.00205875","generationId":"gen_01KKHTTA1DCN018DY9V8QKWPKR","billableWebSearchCalls":0}}},"logprobs":null,"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":63,"completion_tokens":134,"total_tokens":197,"cost":0.00205875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0,"upstream_inference_completions_cost":0},"completion_tokens_details":{"reasoning_tokens":64,"image_tokens":0},"cache_creation_input_tokens":0,"market_cost":0.00205875},"system_fingerprint":"fp_9oouf2om06","service_tier":"default","generationId":"gen_01KKHTTA1DCN018DY9V8QKWPKR"}'
    headers:
      Content-Type:
      - application/json
    status: 200 OK
    code: 200
    duration: 9.264108209s
- id: 1
  request:
    proto: HTTP/1.1
    proto_major: 1
    proto_minor: 1
    content_length: 3035
    host: ""
    body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"call_SmeBZtwDeWEKUJC6ead03JoS","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"openai-responses-v1","index":0,"summary":"**Deciding on the weather tool**\n\nI need to figure out whether to call the weather tool for the user’s request about Florence, Italy. Since they’ve asked for weather info, it makes sense to use the functions.weather tool targeting that location. Since there''s only one tool involved, I think I should call functions.weather directly. Using multi_tool_use.parallel seems unnecessary here because we only need this one tool. So, I''ll proceed with calling functions.weather for Florence, Italy.","type":"reasoning.summary"},{"data":"gAAAAABpsx4H2XPLIGMjLXTKKE3tMMj5N_K6bCl-bKPuPQIa1yJCBxhXG_ttUlpbM74yKj9nnhAVciny2to3wHBSfjbj3fn20yJavilIW_sFeARllHgBl9dVWaQ8pmGsHBpryThxIrl-iXrYGka2JA21nhNVN1m_UE3yz1qdfLAAGKyKBHVmo0UlBCwPG6bA_PisxWdRebjJrEB1oEzl7WhWMN2T6SjEKykKF4z8bSiOpx8rxgI4vn0SinBw556RaNU9cgKtUR4CC2u4E7700zVSicSKSoqB7FlWCgKFvjO_vGJ5uWsVqm50VGQK9h2R4DS2ZOddfsWjJfqo32h9Pz6VBmru2DKil7DSVhgP--1p9b9gzjeGYPrgqBpxt-XO9i7loUhrwgo3k42fjJ8itaoFqLkloX882-HbxZwgsVgcyM95WWwBrUlPuR3MpVVZ7sqGo5K9MSX1PUiBQt7qdfxLnLJSmOpgJUW65XU2RCOR9wGQ3ZqIsQ0-gmvLk5QrlrCegrF1DGgSCND3DSiyEwkmBP21FJEk6Yzr2JB4vSPp9WUW6XbHi3tyJbXQZlwfg64JDT378xowgAkBDF6utYhMQbOswQ1FJa0RTSM9iI3jmBeZs9ka5PdHtlieWZfGMZ5OoCVj48J_mrv9cfEJi1rHmKiFNP90tdeW0JJ-fcBaET-mWFEJtRy7yg1twEfE__3CUhYqGDPUI7IB_8o2-oZ3l6SfaRHuXsVkLq3t2K8qFgdj-njeEH5_pIC8Hi1oipNkaTngSDFNmskkD7L1Tz8v36vDV-p686KL7qFrHaBtMDc62hx2WM1tgrxngTwPbfeH2BYCw7r1fvCIpxxLpt1aS3u3fGPDRed9QP7DlS7bCbjexMR0RIR_Npegt-bRps1btWfvpuAVcEPRAv6IHW3ahaNKHtJ-mUddZxISngosiyI27xdf8PtQSLSjIoW-w6cn2lAPXauS-FCVgHIGci76p0vZm9oW1TZ9J1S4Cyj9E8rwRiThrp60L4Ey1KbervfOEPhRJMFNIifJgp3sGBKWXKatIcqC5-aHMjWsn5AzBV440zHDAbEqaJ_VzgOEQ72rNUyXIw3Wm3kRqS9dheG9dCMAdQmHchzr4sQw7N66u-vAgqd6nBMAwtdxni4E4LMhl_ndfVV7FV-bBg1W0iRN3CPlL9ksCxqgmPPCI5v40PJvypF_VMxR8GP4qBTziMtqIF505z7NaAiYAXQul_djMUkn6UkQQMkzj6Dboe7Yk3ymZbWkRyoVwWciU6F2WsaT6qX5V4Ao5aQdg2V3_zjIIlpWWuSA7o7JXX8GvUzj6jGfx4PCPNbIco5l0Jv8IaBQlF0t6P4IdpgT55ESMUdx0U_oR0i1urKsmTmydoCWKJKVvTetSLigniRRS2BfZN3NCRRwBT9N518UuqgjikdQ4fNewfgru9V5zdGnddRxaFUDYlkmok-lwA6LUhZsheFOBrnXra38gDfyqUn-QOIaUAw5R-3HakXIR13-jl99hTCuvxIlYtbJkPauZtfJxuZiG-VcAIKyQStO_UArWTsFv_lj4W1lTw==","format":"openai-responses-v1","id":"rs_00d2f6810bafb8e40169b31dfe9384819092696410f3668856","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"call_SmeBZtwDeWEKUJC6ead03JoS","role":"tool"}],"model":"openai/gpt-5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"enabled":true}}'
    headers:
      Accept:
      - application/json
      Content-Type:
      - application/json
      User-Agent:
      - Charm-Fantasy/0.12.2 (https://charm.land/fantasy)
    url: https://ai-gateway.vercel.sh/v1/chat/completions
    method: POST
  response:
    proto: HTTP/2.0
    proto_major: 2
    proto_minor: 0
    content_length: -1
    uncompressed: true
    body: '{"id":"gen_01KKHTTK2W8P9CZKMV03VRJETZ","object":"chat.completion","created":1773346320,"model":"openai/gpt-5","choices":[{"index":0,"message":{"role":"assistant","content":"It’s currently about 40°C (104°F) in Florence, Italy. Want the forecast or details like humidity and wind?","reasoning":"**Presenting weather information**\n\nThe tool returned a terse output of 40°C, which is very hot. I want to phrase it as: \"The current temperature in Florence, Italy, is 40°C.\" It might be helpful to warn the user about staying hydrated or mention that it’s likely sunny. I''ll report the temperature and highlight its extremity without inventing details. Including the Fahrenheit conversion could be useful, stating: \"40°C is about 104°F.\" So, my final response will be: \"Current temperature in Florence, Italy, is about 40°C (104°F).\"**Clarifying user needs**\n\nI want to check if the user wants more details like a forecast or information on humidity and wind. Keeping it simple is key, so I plan to avoid heavy formatting and be concise in my response. I think asking them if they need additional details will help ensure I''m providing the information they''re looking for without overwhelming them. Let''s finalize this and make sure it’s straightforward and user-friendly!","reasoning_details":[{"type":"reasoning.summary","summary":"**Presenting weather information**\n\nThe tool returned a terse output of 40°C, which is very hot. I want to phrase it as: \"The current temperature in Florence, Italy, is 40°C.\" It might be helpful to warn the user about staying hydrated or mention that it’s likely sunny. I''ll report the temperature and highlight its extremity without inventing details. Including the Fahrenheit conversion could be useful, stating: \"40°C is about 104°F.\" So, my final response will be: \"Current temperature in Florence, Italy, is about 40°C (104°F).\"**Clarifying user needs**\n\nI want to check if the user wants more details like a forecast or information on humidity and wind. Keeping it simple is key, so I plan to avoid heavy formatting and be concise in my response. I think asking them if they need additional details will help ensure I''m providing the information they''re looking for without overwhelming them. Let''s finalize this and make sure it’s straightforward and user-friendly!","id":"rs_00d2f6810bafb8e40169b31e07d96881908f86723c28e3ade8","format":"openai-responses-v1","index":0},{"type":"reasoning.encrypted","data":"gAAAAABpsx4QjPXFs7MBZyi4wDhhkb4F_sS54UJUyocsvBfRCnLCaVJ66WzB0x-t60C_oXSlGCYZHUP0bs2jJtAGG6n6vRv4m_HZS1gIFDiMfPuWlg_C4sxA9sK4JmOA00bU7ZQkwniQ9ngeYUai-M_IP7vHT-02MvM45F5rlrkugPMJtyXgH_9qhlI_yHVWvEhviNrS9Fc39WJT1qquGgQCt6hTPiimO9IQ-XYf8UYGXeu2-CdYl3Lq4r-gxOopJbOImJAjzVBbS2Wx0z88rZP28X0f_hyfIcx6GOTtnsyTrloxD9Jsx3mdyWCrpZ3wyOfYELiDE1Bbm0umG2hDaNq83oRYoJOtQ_VanSharqc-pjblXdnaQs6jnINnH3hkJCrEVcQsTFnThY3tS2DU1wPFq92WIzTey4A1kMa3_ZmEJGFtkBaAgoNL2ls8d-Nc18C8spSYTS-Cu3joOWVkRsEj5ODLxGWUqNLh0HH-cjj9EEAYLuUScI6J5S_bCuWrUl-7uDnIY9HT_h-IUlp5Cfh58-vHMOSYwTXPMgUUN2BNL9v5Ral1tykgqaHzUXToKYnC9unQb6wwVO1WleHDBaroC_0JzTN4cT_KN8vbVVEAYkN92ghGkrsdZOw_fkvX7SZE0fHcWpndG5gRQUCClsVuYQLgp_IWmbovDifxRyQb3AOe5gupgcU5xSlD8btZTWolfn8IGXiSNC30W2gYcHBttCOGEhIG1l1hc-UTavNVUuNwGLxpkonZZ7E3luxJ4CHMgxaiZccdzcJvixNxmFs8mq2KSAdrm89uIA6W1zfg5yEUbT6HVfliLm67HkXWmRMQVsftdmpZnTmxg6q2KUQEwXKqLZAauorHyNiehEA8sCzxR03g3uKS9owBrHU-lCNNClY4szsIjTOGI7UO9WCxrYJV0Ec6m_gg_0sUwpTJukReY3euz-684jvBhVg1FTwb2wu1DanVLEyB7bzWcaCc8p-zkebPxCww3Dqf_NFdqRXIOmoKl8oFL9t4EuqnB9wLp01QhcJ7aiKc2RGXLhh4MO8_9sNdgGVHyjkP3zOQ8b8ASm0Zun3CMzzl_F6EHPC7-Dkk6GVJQOTrM5EzjANV0hd0ZFmsDKw4eWNzFln3CRZ1WgZFbqJcRmMwJh3SFGUZtbNjX2s9s1msPf4FgUCdAJWqpfuyeC6KbfWj88voj3w0ezImLKN6ZxlRI3YRiLMTE4osHkROoYBaKok0qlJSe7Cn2VaRtVT2HWNRt0H6I_-lTT5G3xInpRWGSzJq89k9zhTAKuq2ZgCkUKrEEZEMH2HXjp559h1YbP7PZOxAEXoAylb16tgfSYozHtWfHjabpv4CeN_JKoVGifoyGrJxPmC4ORsiqaVDmjxyVmA-B6cVoBPLi8cXRSpIfm4_lAc0C3gE-AH5FuCoj-Inj1kd2lYNyagfx3y7-_--gMsyS9V1lajY1UU96J_cXOIlNlQVHTQ4MpAICQKHMljsQuBzNy_tsjGWTqm3WB9YObO6rTE8SH5jDtxWfRN148oKTMfXPvAJBl1GwjusjkpluqZD0cw3FzDj3p6ALhlFp6MpkRk4EMWZ6LrVOmvp1mbfiX4R2_OWtArrsu4kIznTD3Cd1qw72jxhHszAEeGjCUvorhg4-EujPAvuVUE00G_6GX80nSxei2zABX4yf926P-lrYcD_vi8LwfBDuH_40vNe7yXSyX6cCxbPR6MCJErvE-RzR_XZO5kjKhMYFMh4P_-4x7WZTlGS-ysB2_o_B_FR5AUSG-3MLyVIqfQk5iOxAYVHsQi1z66xjuUacIAA9QLtFK9qs9jBkwzF7gf6QJmO4llo7Y9MIukCjcjXTsK20GcOQkz9eIUddxDYc4iPy3-mtUUy-GfzVpWPUFgzPKrMzOM39YfGT5kn2SMwvN_O3QUUk5C2XrQZNC0BDowN4vNo97x1m5CHf2gRIZKz1Od4bHCYzXO0fMl3a-0Y4yoLxSMxmSG2QdsapnWZMr5A-LC14VIKYgEydtOSSQPcN7KMitmAXXi3NkM8mnKw3htH7hSJ2Jq5gywadfKGt1dMYDBsWZF0ZSbF7P3Otz3oYS5YtHu3RanSjAjtAKRjuNTueUfxB4jhA69tiXlKOrrQcyxm_7CfMhRPJEeuZ3T93s2fXaTT4huvxyfvitc9zvyIk6n_gazYoodc7gDlr94VrbD1H5Bi4a84PtKTmsXWrk1IaBYG_fFfGtb1xaHavXt6xtlGwYX1PoAP","id":"rs_00d2f6810bafb8e40169b31e07d96881908f86723c28e3ade8","format":"openai-responses-v1","index":0}],"provider_metadata":{"openai":{"responseId":"resp_00d2f6810bafb8e40169b31e0754448190a8f85e1dd376a88f","serviceTier":"default"},"gateway":{"routing":{"originalModelId":"openai/gpt-5","resolvedProvider":"openai","resolvedProviderApiModelId":"gpt-5-2025-08-07","internalResolvedModelId":"openai:gpt-5-2025-08-07","fallbacksAvailable":["azure"],"internalReasoning":"Selected openai as preferred provider for gpt-5. 1 fallback(s) available: azure","planningReasoning":"System credentials planned for: openai, azure. Total execution order: openai(system) → azure(system)","canonicalSlug":"openai/gpt-5","finalProvider":"openai","attempts":[{"provider":"openai","internalModelId":"openai:gpt-5-2025-08-07","providerApiModelId":"gpt-5-2025-08-07","credentialType":"system","success":true,"startTime":1327619.961347,"endTime":1337223.544461,"statusCode":200,"providerResponseId":"resp_00d2f6810bafb8e40169b31e0754448190a8f85e1dd376a88f"}],"modelAttemptCount":1,"modelAttempts":[{"modelId":"openai:gpt-5-2025-08-07","canonicalSlug":"openai/gpt-5","success":true,"providerAttemptCount":1,"providerAttempts":[{"provider":"openai","internalModelId":"openai:gpt-5-2025-08-07","providerApiModelId":"gpt-5-2025-08-07","credentialType":"system","success":true,"startTime":1327619.961347,"endTime":1337223.544461,"statusCode":200,"providerResponseId":"resp_00d2f6810bafb8e40169b31e0754448190a8f85e1dd376a88f"}]}],"totalProviderAttemptCount":1},"cost":"0.0047375","marketCost":"0.0047375","generationId":"gen_01KKHTTK2W8P9CZKMV03VRJETZ","billableWebSearchCalls":0}}},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":206,"completion_tokens":256,"total_tokens":462,"cost":0.0047375,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":null,"upstream_inference_prompt_cost":0,"upstream_inference_completions_cost":0},"completion_tokens_details":{"reasoning_tokens":192,"image_tokens":0},"cache_creation_input_tokens":0,"market_cost":0.0047375},"system_fingerprint":"fp_9rir8dou27","service_tier":"default","generationId":"gen_01KKHTTK2W8P9CZKMV03VRJETZ"}'
    headers:
      Content-Type:
      - application/json
    status: 200 OK
    code: 200
    duration: 9.769461541s
