From e0f74c6bc53f92473f2160c4655b300598290e81 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 11 Sep 2025 15:58:52 +0000 Subject: [PATCH 1/4] Fix OpenAI Responses API tool calls with reasoning --- pydantic_ai_slim/pydantic_ai/models/openai.py | 58 +++- ...ai_responses_thinking_with_tool_calls.yaml | 328 ++++++++++++++++++ tests/models/test_openai_responses.py | 90 +++++ 3 files changed, 459 insertions(+), 17 deletions(-) create mode 100644 tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml diff --git a/pydantic_ai_slim/pydantic_ai/models/openai.py b/pydantic_ai_slim/pydantic_ai/models/openai.py index 81c87aa36c..47a07ec4a2 100644 --- a/pydantic_ai_slim/pydantic_ai/models/openai.py +++ b/pydantic_ai_slim/pydantic_ai/models/openai.py @@ -878,7 +878,9 @@ def _process_response(self, response: responses.Response) -> ModelResponse: if isinstance(content, responses.ResponseOutputText): # pragma: no branch items.append(TextPart(content.text)) elif isinstance(item, responses.ResponseFunctionToolCall): - items.append(ToolCallPart(item.name, item.arguments, tool_call_id=item.call_id)) + items.append( + ToolCallPart(item.name, item.arguments, tool_call_id=_combine_tool_call_ids(item.call_id, item.id)) + ) finish_reason: FinishReason | None = None provider_details: dict[str, Any] | None = None @@ -1084,13 +1086,14 @@ async def _map_messages( # noqa: C901 elif isinstance(part, UserPromptPart): openai_messages.append(await self._map_user_prompt(part)) elif isinstance(part, ToolReturnPart): - openai_messages.append( - FunctionCallOutput( - type='function_call_output', - call_id=_guard_tool_call_id(t=part), - output=part.model_response_str(), - ) + call_id = _guard_tool_call_id(t=part) + call_id, _ = _split_combined_tool_call_id(call_id) + item = FunctionCallOutput( + type='function_call_output', + call_id=call_id, + output=part.model_response_str(), ) + openai_messages.append(item) elif isinstance(part, RetryPromptPart): # TODO(Marcelo): How do we test this conditional branch? if part.tool_name is None: # pragma: no cover @@ -1098,13 +1101,14 @@ async def _map_messages( # noqa: C901 Message(role='user', content=[{'type': 'input_text', 'text': part.model_response()}]) ) else: - openai_messages.append( - FunctionCallOutput( - type='function_call_output', - call_id=_guard_tool_call_id(t=part), - output=part.model_response(), - ) + call_id = _guard_tool_call_id(t=part) + call_id, _ = _split_combined_tool_call_id(call_id) + item = FunctionCallOutput( + type='function_call_output', + call_id=call_id, + output=part.model_response(), ) + openai_messages.append(item) else: assert_never(part) elif isinstance(message, ModelResponse): @@ -1141,12 +1145,18 @@ async def _map_messages( # noqa: C901 @staticmethod def _map_tool_call(t: ToolCallPart) -> responses.ResponseFunctionToolCallParam: - return responses.ResponseFunctionToolCallParam( - arguments=t.args_as_json_str(), - call_id=_guard_tool_call_id(t=t), + call_id = _guard_tool_call_id(t=t) + call_id, id = _split_combined_tool_call_id(call_id) + + param = responses.ResponseFunctionToolCallParam( name=t.tool_name, + arguments=t.args_as_json_str(), + call_id=call_id, type='function_call', ) + if id: + param['id'] = id + return param def _map_json_schema(self, o: OutputObjectDefinition) -> responses.ResponseFormatTextJSONSchemaConfigParam: response_format_param: responses.ResponseFormatTextJSONSchemaConfigParam = { @@ -1365,7 +1375,7 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]: vendor_part_id=chunk.item.id, tool_name=chunk.item.name, args=chunk.item.arguments, - tool_call_id=chunk.item.call_id, + tool_call_id=_combine_tool_call_ids(chunk.item.call_id, chunk.item.id), ) elif isinstance(chunk.item, responses.ResponseReasoningItem): pass @@ -1506,3 +1516,17 @@ def _map_usage(response: chat.ChatCompletion | ChatCompletionChunk | responses.R u.input_audio_tokens = response_usage.prompt_tokens_details.audio_tokens or 0 u.cache_read_tokens = response_usage.prompt_tokens_details.cached_tokens or 0 return u + + +def _combine_tool_call_ids(call_id: str, id: str | None) -> str: + # When reasoning, the Responses API requires the `ResponseFunctionToolCall` to be returned with both the `call_id` and `id` fields. + # Our `ToolCallPart` has only the `call_id` field, so we combine the two fields into a single string. + return f'{call_id}|{id}' if id else call_id + + +def _split_combined_tool_call_id(combined_id: str) -> tuple[str, str | None]: + if '|' in combined_id: + call_id, id = combined_id.split('|', 1) + return call_id, id + else: + return combined_id, None diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml new file mode 100644 index 0000000000..913e59e55c --- /dev/null +++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml @@ -0,0 +1,328 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '829' + content-type: + - application/json + host: + - api.openai.com + method: POST + parsed_body: + include: + - reasoning.encrypted_content + input: + - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name “SAMIRA” and the first + letters of the even-numbered lines spell out “DAWOOD.” Additionally, the first letter of each word in every line + should create the capital of a country + role: user + instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update + it as you make progress against the user's prompt + model: gpt-5 + reasoning: + effort: low + summary: detailed + stream: false + tool_choice: auto + tools: + - description: null + name: update_plan + parameters: + additionalProperties: false + properties: + plan: + type: string + required: + - plan + type: object + strict: true + type: function + uri: https://api.openai.com/v1/responses + response: + headers: + alt-svc: + - h3=":443"; ma=86400 + connection: + - keep-alive + content-length: + - '14483' + content-type: + - application/json + openai-organization: + - pydantic-28gund + openai-processing-ms: + - '32933' + openai-project: + - proj_dKobscVY9YJxeEaDJen54e3d + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + parsed_body: + background: false + created_at: 1757605995 + error: null + id: resp_68c2f06ae97c8197980bb8a4837e2e46016e6d37acd3117d + incomplete_details: null + instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update + it as you make progress against the user's prompt + max_output_tokens: null + max_tool_calls: null + metadata: {} + model: gpt-5-2025-08-07 + object: response + output: + - encrypted_content: gAAAAABowvCLN7S0x6x3UAgC58RKPu5V7ySQDy1A3899hN_N7bcM2zbKDF_zIh-sAzZdYjJi9p1j7Ai2g4HADZrEOwttVqNdC0xo-SmT34gv2gmTdN-3lDEZuxfoqcyMOSk2VL-r22UBTL2kz0BNlfqj70TXwOMlERaCp-jRCEbBjaVP52RHGuhh40tngqE09fRHBkLIlOPVjZ0sngDNtAgwbix1DRiTDPmwYNnuS3l4iz315FdX4j285xtP_E2_Cyc-hGjp-iukagq5FJC1-5AbO6f2zQCuVVSYJOLP2TKqUjOT09-y8QKlUsqkidM1Qok0xn8kZiI2jaP6_nVwhVnC-x4SDfttlr5oB3UYWAht61YXQheBVBhCAxJ1fYk1kiPxEh3bknoRqpF0uEcxT4NxE-I8jlPqaTI8vhZLYb7S2Gz96rga0R7BmjHf3poQ4EC24GfoZFuOatORjNdKHahjdITVDvajOkiZxbc0_crrQ3n8xoLPMmFeCD3oKlDaKESbeQPet6AQ_V_gjuSz5yNrcodh8hXSiI3snLQAfaYRIpDMljGob9ADEMAFpvKQ3BYff9dU3hjrk-ij_IRJh4XzH6tgUlbuq_w6a4VffHnEy3v0qYUtXoLgBUFzRTl5EW-Yp-5Sel_zoyn8Elsulnevev6PM6AWi6j_NC9oLZfpmbvEu5CrJBSBiuWRymWyEuKrG2HAUng0r878FG94L50BknkSvNK9U9okiftc6zDS3xxL26TDL8G4TRH2c3PWFSpjh5sNmXoQEW9HG9XlG7OsB4uPdGDlKeKCrZ6NBrGaqGGxId45HQTWG8q9eT3sGJtkrMIgkCm0lu1MhxdVD2Xy1Syk2zpKmv48ZqU4QUjiCltcIJAI3h0Slxm-sJG6xWkAKs0OQLpsnnQu-yNYfD6T6ctAOEV3EEy1rdzB9NSz77aM323fl3cv1uwUH-CLdr6Q-4gxD4_HYaSuiuyd_DAvsRrFQcMeISD5x1sGJZkcjD4LAaPNqnAfc4lobugwB_EsdmrhQcPXKu5bilCa_2OhSOyA2iah7T1HT2bwQ9W3xUDSgrA6hVdlqyDW5X_tol5IMfrldKZ_HJnGBSK1BBwySr4EeV0500Xzl8AOOE6p0ocZZcYX2-WUiOVKvDbHYCNCZwH85fDsxNeIEGM_rB_Yi51ZK16u5c7JsAD5qB51nkbZUxiTeQ8ZIZc8taa5FLDIXMkpyiBBwgYQ6_O5k8pmgoIObbVCUYxw-zVC7TR67f2Y7HZ2ZVIhUqxV9L3HsjBOUs8CzESvdKn0DXRm_Ut-Ap-lV0JOfe0f8lC8kPpxDIyIrHjgdlD9T04Z0WkroH9sNANrx9417B0u6Sd8NZLasMJA15hqR3kR19XSZ4_XltQxSvn6lQbJXrjiavhr4TOtmTSQbg8E1zn34P-zBxsQXtiV462uL_V3dWMYY4HcOJYPswIpMQLIl4ziHE4Q7OfJXEuUe15kWZgpBjKdzQ9RF4w8LM1YDLaoonFnuZsc0y3wOdIfYn261Pn5YQ2t8fPDsLrNvEFcUmTpx-qKPmmXQnCkMZA0TdKSvJQ8LK9BAB4DZHycSRDezWlteANKqDD6ADh-hw4YqFdcKtiQ3R-1_6UlvmurfATblITIFUn33m7Wuyu6uVr2jXpOTOyp_HlDPjJdoXJgJqxAgB7wlscZlWoFMhIOz2H32PSSvpSoU4pDY7hX3zloH3Z_g7HIYr0bTeYGIgm17dEWcFuuFrlZ0oBPbRfe8BtfLF5_HmlFuNPIkeTqBTCc6POaN5-cPh09woX_8l2HPDnFTXxEEwnqRTcbDL2NKs_-OnfztHoM__yfaqVfbIZHdkDJ7xVHOapcfs2VU3Fmk16DxtBXsV6Lz6Y6P9CmSPeDTCg3YBneSCAbPQK9TDMjHD7zUMvwLYar7VZ50epVy_vTOrVG4_4B_Rmk_5PU9_SMPS6HLr8SOZeI4QsfehMXPWPJJ8y7TJuKubtZLJm15Lx4fnUtDHmQ154ciRgb8Y5YG33OXjXJhrpMHuBJ703X_E9aaLShSqzvX2RzVUQN1lusP1jGL-P33nuKpZY8GLa3X7lpywwnf2ylTRvhCRJpSNw-OK89sFdA0ahz-e46cKLoQ6bbVoudMe0chlAXanyqCX6N6mhLm3kTVwNRzo6MKYAsN82vdc3_1E2Ui_W-SSROAwLWCa1_-xbBfdMzbFsdLJm9R3fPPU5v94k3P14-NdwYvEmfUbdNttH6MblOLqr-qdtZ1MjcpaVIDLd2hbzlxQMQ8J1rTxyLXiph6KVXS7AH8oQsZwBCSSxOf78k7RBjyXbgh3ZxXcrQ_miCpRPu4tdPtGI6B_uRBU0fLtmaDM9ugNctdgYuyFXYBK0a1SA7v3J-QeOvjNsM0NhV1uha_UnGvwKD7cyVd1yWnJ5Cu7vimeFnHiRscqb-tnfowUyLaR3gUN2qfL9vShyAujARWplIB3nIdoLOCMwwrbBi4EgntWBSj_4Pyc3h64lVUQ8prXOeCSZaPLcr9TL1_kawidWuN8apsFClZv91I60LA2eFp7Bonfr3sJpyCoS_b5o-cZGnTVm9S_mP827XgwoEl_buzVrOVIfBYCe34LfOnYBhy1C6ppeNOuP05sGanYERZ2-Lkm2DT3wKVt1Sx4KTJalqEAY6WnboSLP-CvgPbn3yAb-sx0vRGq6HJGgiZotMCfbaqu7OjpWPt4wnRC0k8mxzIm-ALGfvmlEVxcYG1PG36yP5DbqiOFhATA6cPEMXW5h0rM3c_IQPvqNKJUq0HfYHVefUVSkxFaMpAUMOMAarKO0_TeBkSgNVgno5jzj60Acf9AikZzmEzfYsCEMbitErsVX9RlmYw_x0BoyJNBtG_tzQWyvH5fjQtky9WXcDm_OXPRh7LGwKNg87p_J1WKvBvuNStH9SASPkTL9Ngqbaia8VyKFV4u1yobRw1CzodiNYLm4b96CnGLdh9C5kEE3S4LZfNuihcnk59buK7L3uy8W4J6ASXy3-y8wUQY-_oLv4Ld-2dYKEPMVquhicj-x_uVLcXaI07dEWBmruQNYbgxr5-HK8_AyH1YLvM1UsfJwd5NS5y6vrRa3B0l1B4RY_reUOFq1F3kbQ00pIdvKcuQ7u_y7T_b7neD7k3FrVwWZzWicia8uISZazP_MyKeMD-Bw69MAB06dSw-QAOyYiOPFo1F_QzYPuqdfU0SM59nYIe76_9wnXSly5-axLC0-EVBfiIbSxMiraljnP3EvcEHcKn6pOmBuASPxRjUtMbWQs-DlA-H-RZnThWljq3CgDlcGPx63U1eVW6L5fjmZhzwdXAxT2o8cP8VVSnYTB2lusV7NIY2Vu00aUfQViYgmBN5dsbaO4QQGXSP8ZJpenwob_2uraS9EH_Ft8RsDOjhXVp3dnopntuAaxQcQ9n2PmdRTZzUnnS6dIEb4K0i9hVo_ePxKxpXPKIU1Tg6GpbV9FlDis2FWiPMUfyyJZHIjjM3ygoiiVj7JVtZxxKWVy1nIJremofDnv_8NO2bUeurqYSG0tX6LYYUHBzovBwl6ZkUd0iIFb42aA7ObTpGIy_uM4vdCwu8KXLlV8-2xAI-91U6fcQ11VLLjqclhuotfE0Q0JBmj2Qzf2OpJxcoi-7objNvE4qhSx9FpSvGjq8SkujalSBluGCjstX3IuhJPBoA9K3UBhZfLN4jT34WfJdN2iIymBKm6q-ThSHOQl4XezzuG1yEvXFLgKL6i4oPDmGE5YonJhXImcpyNfuTcybMF78UoqkUgXD8dLEnZYYwazdTdHIajivncXgmb_84Rj4w8VL5HEUODJwDrmCW5U-wL1xIhq40NXz5sw4Q250KpEzEcjiyZMJVVUYkHCNZoNY8UQADLA9QKqn97iRPI_WdwsM06LfYmoWDrZF94QbE1XMQc5LIObu-jrQ3tx7sNbKB3T9WiXgU6btOWj0X4VzrvRpebGzUWa5mId7QOgJPTmwf6I5v8xYGshEihPX7T9bes_wMLKVxoImGkroND6Y0Cm31DDwO3Jrfd8S_uVn_Ps9Brcu7AQYa6TUc0GIOnIAdC1VAzaNO9wbbcihg5M7BOZ5orVdtDVMIRq-nx6KzRC-DUJ1x2M3KcJ2ugqMvvd2bHT8bfpSiV6o1i7wZSBqBSEcwfAI0bOmnsb-TLKkUG-q5JriOYIIXl0M0o2i4xD8Q_nSPoOr9De2KsXPQPvfziV15xMzWjZ4YaPYOoItivOR4FxchdOUg6gSoxPWnJ11_9Ug3XPT7F6mvMMSekufiRzEuLgnk4a40b7Ra-Vu43491ChjolU5WnTb1ezDLuh4srcjPlNsXg1F_9UJzYL77oM0ewQSzndB7ca_pS_mpPG7DvtoH2GCwHzZAwLWKl1wO2NQo3bHZcPhfa0ZFBTz-Ix5OOzZi0AuPtZT5adnicdfqJ3NOm2TWmKb3IBh6RB3_5wi3yzhaWMOcvcW34ITxBQRnq15dBC7R3bq6rabHS6rtk-8YJnlcViU8bEGBZ2E_oyJRRn6Qm3l3DEw5eXViCTN_cVrXlmwzgRn6hNDlVgkgMbPTjFAMlrM_Wra28wbqyp417BICv6r12oaqYkDnVjsPzVb3xrg0fUdKRRSYg8Chx2tNdPXZHFjnQOFx6I3N_QGTclzkkeZY2EblE8BhPS1BEkeseHOHV75N4bfMlWabpiHCVpoLeLeLeUARKg0qYp4o1nm8RZ1z7y85ulRDwePminL4WgjMZVBaeoGEsGV6W8-dbItmRSwl9GqwteyRms_z4GwIoZEOEKcWTcrodewklpR1TgN1UkWUoCIJlezlVRzaqqL6J8IuWiOG2cqS7ZWO6t6-MDPsHdbMNJc5oSgPRmaOv1SDbFAj-PACjfTJzE7VNOAZABtgnq5ZsTNRNiacn41zM3DNp1idzPDgKv2x0lV6Cvenxh-Jr-k5FNbWCjHfQ0fNkGtwtXS7mUlVa5BHXBQZHwXNfrXQvLw1eo3t5SPrwdns8WQJ6bjFlNkDK9fJoFuJFVak62LHtIx1jfa9_8SmZyttUWKQw5OjD8W3A24fSZb3stzQIskFhQxV31HGMAqE7gklN03xealJ4-lVLT7-ziNH-wWV8rvrYIm7a_PmLCr8vLxcDtCyJK9VMOaQy4HtDp0_z5iSkpO0MiqQGyaX1AB8TAVr_vNQK2fWTtya6_1rRggXEY8CZV9aNx_U49SdbR2HSn7oXayD1s7JfbVl4DgTo8EvMcvp18nhVRW-b5cjQr2SxJwB3thOcmv2fVjgKlB0NQYwwRd9AwxwtSOS424Igg4z-Wuy0DXaKm9GKKGQBdxu77ptZROORg46NyMd_P31vJr1NQeJ1S2OFXFhTWwdCF7AWGvmV25x7FE1B8DV94tbF3Fck77CbzGNbMQJ-ej_uN6cQveKhFGrlzvFpVVCQHsSpTM9K7Z7YNmA3efa5QzCbQFy4QzSRRa5_3dJMUcIMTCNNfixxUFr-kvNowMkMiCZ2-hELphTn8P-UfErECZsfUz72oWbWvfuo8KFGzYkFQh2r0p9SPuoI5HHfhPyrVPO07FhsEoGUfU0Z-XmlX4d1y-NcjU8ofLuuljt1MUvYvy_dnAB300N0ePfluQKNlQzQRxHZFNdj1QY-q9CvWo4_o86rr4IE6ALBs0g6WEozFNmFbY_kx94NbCrcV1twi57KlBlRxttTIgO5ugxUWM9FpNqjKGOK9yYP-9UqCCs78C6ownKRxlTzjRYQP-4HtLbqOVh967_kCP3D9r4GiBEZDKw81rZeuQM-vITE_nDpne0ssvW0a6RSenV2rQ1DZl9HeGwrv6XUD9zjuHVW6r7fN_CvSSjQYt4FmghDkgnFJngTUVjrpJ-ubwjsdTNwwHozbtatkxPWJNAaJO1FoeN3sBsQjS_9CBHljM8ctWIFv4ZdCjNuxvQLVOoClBydblt31d2VAxjpmL6-SJ756wt89rHcYPA8fdn7I1YEjcCoGA_gxn6JWVWMO0lX7mx4rz2ooIgCk8FdwG_emyRqnGTnxEXz2bSrHADQ-NldMmF4kMrNq2TNRgxA2zAS-hwbUnQQIw5Z_BInG_l4QqHZsxGN7BYanGxS34-aOgtAV1F2K5uLBnOw1S2KRYk4wAu14k6555zCFsGouz4JbG6Jfw1FgBhgSUSxixVp9yKPnxVgK_dxhqLO7W50DpBdRW4MVAm5kaZ9zEUoq3aEa6TzS-a3YDQBDSZ0E_n0zu7WzqYzA05RUB4halBa24aKOQaTBwLfro5hNr5v-djIE1eXZgIice6dONYQgE1S03xj5QG9Ub6MY2uAJW6_OPdo_GvRxvG4utVNrybylLUwOcOJiXz3lm_jNYNKI0N2mD5W3uPHXnMvcARuebr4BfLJzSccnPgEA8zLdxMIXzEtF6dVEmxWQtbpR_VetTEa9YMpuHG-4bKPU-aluUIeVUqsemj0X9l0Nk2PBIHoliz7eO1Y1xJVxAp6aKdWMbhOiIpMEE00VOLE6nz9xmlmWQbR9W686iY6KMIWZEurfj-amyWQMaxpAgsO2uLdd5ySEUBtPpDNBi6WyZZ2XRaAaAoZ8dn2TbJ6zcyqmiAAWVOuL3pkwfp7HFx0mc4f-g3X4fohKJNeZHpGkGGHooughqLGe4_TvdtioTaSN4rj0TG9JUxV-OI62CNEeQyKa2v7Fcmwb99hvxqJt9G-QswPyAB6V63Q6l7o2OIHpIg-XHxl-f4jsOjDvaPcN_yEYoWwlvi6-7qguovtSLV7Fc1mGXTO9gcTY93ZaGBQVzZ89wcsWXazXTk2AoMayw3Hl2Gyvj0Sl6ESUf48Tz2AK5RltgpjhQPyOoMi_cidBjvrWfBpCyd25kx4dnojq5lfL4tcqcLRHg9PEUmhDQdbuA1Iod_7AFZoKs-V0eF_-aLaTdjkPiCdcUggp6o4JZWLUkQ95v62HzGjn9VEnqJc0v1Jyx96cxwgk_BKuhEJczn0V15CNNGpNgqlwBSNX4su9fQ7qcueBCO2Bj2_e0MHpdg4X1cApZOZzfJDxAkuJpg5v1TUGPm4kcM5QEOjQb62qK4EycdTnRka0yk8eRC6bmenlJJhZKqq5B3Nuw005tW4bW5VNgEbX1JbhQlOa-jHDxPGn2VaQXak7LFiAg-hqJe0-A5skqcerB2YFaBpWELYp6NoUcIz_jabblMrLMNCTVlMbxd3DnfzWJ5WtzF1vEHOT9LReXZW0Vl8hQxFTWkfdIhqixARC66RUcVK0UoM1BJUZrYaaOryWt9nuZWob534I1gxznOy9HSqFMxvnldvNKIS-AOO_rrfVmTTwarVlJUf5BXtkb5fZvp0NfYyclRXoqBUi8QQVDapjlfj5jFle95aSNit8c81_umxCYNKRE7KAOczayyHML4CV0sD7k6d5NrT3g9usfkHlv7iC_NpnL7oiEwlyyDbSM686Xd2wr4HoBfczZ2kPcyE53RIN_XkU2oYbyVuozQb8IE2W40dzleTzM3jfZLkY4tauk6WbsSFWVI8h1teJ8Ysc6cdmBa8qN6uVkKZnyFGOhM_QTlQuUHviIbnwnW91WZLA4OpYfXoKVeOgmWZOyrTZ3_qzpKHjEG9qH4KCd2Snr7YdaKzyIXLeRQvU7tKm8aPeh2W19zO_qWXl1EVlBldHplUS8g2KFH-Uo7VPH4YiZJxSbLx3jd3Toxwn9DnUzNl4Icyzzyr13HZukzP56wJbsVKXoTHoKNoaqeN7VCxB3hMaeh_bRu60hARKLSJa8aZWusmnVItzkH5VSGL1uQq1nv4FFLJa7h_kAsrvAdl2-tQRJVQdWpohnHzTTzsKHExg-wsNssB4FJfb9TapdQOd4FJb8pNbU6yhS3cR8a9F5-qycYaqvYb5H5AB06Yb5QEzC-uJeefAoRydO47dCplgzM4vqwvtejyihct9gECfBG8brjninBlXMBJJ8zTcMahbqs8EWHkYsDGcBoeSjB8I0gujykR7L7xjAaNIXNedqwPNkXYs_uRbJ8UQvyQcZWDLpNvCPf82TgB5Da0QyLqt5DTqUVb147hattkcUPG4wTUpCt-s-D-EpUAqBw6ccXfNZ6_wdYitL6qPdo6U5lc87GnPtSo-Zrd6HGlTO2be5vu7TU69E-5FuNIgqMWnyBeQlgj_5p3bYvvKPVdOAjGLDZ3b6T6m_ILhwUrVgec0hkiYqYeVrOBF_KtAoVcmA1RsAVt2xoUbmX_juPMN73srP_F6z6fGSqIr2JLaAaLvPE_bgW1RpXnkiJ27uv5ScFeVGepElMuKcxP_pk10zilbNEwvVpmgJnfKhwd1fI49QVUBEpfjB90e3-YdzfKVBgY6rCZ2L8aFferi9cIhILJVw_eAnPi6sCHrJHh7DbKRmcdfMRsVN6MLnfw9t85hnSN0J11foKTeCV__40JtsLZ72kWiTxKH7dNv8OcAtAKzf_G9n_rYizOgUAGPawTjy2tfRRgD4r4ov__rX7CynjTZkP-LcTe5Vf98GikGWZzglUtigoIwLpaO8WjSXZQd-uBfgY2hBiLhY7XRWHi_GRxyVRC0TOINvtY_J2wvHPQw0Nn9tUigV2tR1HOeE1EvSjptCA9y1eekZ7ka4fdKWGvO34VQIUvRDuffaMEHByRKK3zdflFF5-sdQfVYZ6am8yC-OX6OYRIleHNzjs8GezxqmKxi3qTO5PF56cgQ5KFWVO8poV8LbAQ2qnIBAgF0XLApWyb31v2WreYqwLip97H_EZWSlVCn5KWNNPkdwfgBtv6SyydRx0Cc0mmeRCBIs5Kb2uWF1fjTAWFVmdTTR1ar73ilKa4fkaqBLdLB1FIZ0maa774ixZ09vKugHY9UYeuOxJ-SAkxFXl-2nl2aOuTWxD3X0kHYQoC0-QueJQkU5Jn6HCO7Zy2nFv_D5ZRq0EC3dtjdS8j7N7_Wfw6C-kf4jZJHl9e--7p2MEGwNFFDxCNueRjvi7MFaek80xZYWw_dIvkdOnWw1M8NDPVd3gH__yaXYjvPq_N6aZAIN5mLGqJ8hSQr_uOVcP59fwlFLE8ogb3Alk2WWtm-ssLOK3NFWybqugDpZTloiEE5uHmdX6psJqESYERgAFv_a_1O7rBuRm19dROMsOz2NhCz4xujDYXnjeBdLv8UA4Z3pmRec_0LqBXqt1TFmytjeXoV9pMR9shNjX7RCeqqPQoo9r59izIS79q5mpYhKybxVdOGNOUwa5dE7jNKi29pGVfFaOANQAnRTHvxYQE621uaGJGaUu1s2KYrvvUG6CXD4lmzMT3EnRLvZQbhQojjBR4_eHcyKnUhv2b-7EQIaBZS-tK_5lcyOInCfFtjkNe5SilAlXWqpLX_C3lcsDGOZBLQR5y-gNdXoe2vTL1qDZ_Ez1Qvq9Hp7lZ1ak6btrx2hmLrlFreMuyC0KxH6UuS_6wnhtKFK79fdOSS1fXwrW1rvkhZELfIthXGtVwyfk8-HxpMZLmG00lpKUvZCGQ916qqSPuJcBIGV0VmTX1vW5qjAHyTEEFEOfGzvBGuaaI8_Xv_n2tzsM6ZAP5qtj1oKK485ISQUrpMb6-sM6pRDuvyYY80tWZ9H239EKRNc2B4fN4vJ1vzxw68OMPAEMqf47Rh3xa-bSeHsrpo4B_uZqOEqoLDETTp2QJjOnQXHfl18rcwVLMBtTZ7yiQnAAo2lgHs_fuqAYupWb7E5JYD9wAeA9Gg3W2G8ZJVKHK4cTFrAnj1Uft1s_xEtgRx8V76Ay2TQkJiZ9-aknFNqhVdNqVWlTQm9vezByGNidX2E1FNZD9X79Q8oGOs5_Jldi1WQkut5iRBZnPz116XIBpRIUm17v_VYJy4szS7qdWgRJwhL_D8spCumPFdiCbl1rutMqOLGaSExCl44pn_tVVf3tVaEQ0ZlxnsP_qEezZPEZuEFtiSHmD1ZFY8IbbM4xMe1FoaqELzL_156SVYQ4pb-JNx9shgo7XT4RwmEbM-QigtYB7LEeQJHB_efmcjZU9yClIr5QOV8n5z1uqEmt1qxq_ko3BJpEo2Lq0l2l3OE_z-1KEJV9izfz6m2WZsBuqZbaPq6enpD2jZs4lW1w6F7vjTL3p4_g7Hk3pjztccld7pTbxMbiozZC22UN1-6el6HHcpTMz4nZl2doFc9iOFFTFQBOhoGDz3QCQMkqgDnu6LELJh25Blf5KoyjPoNmMqmS9e2z-z2wTVkZkdLitOXu8TlRIMgcEEqPn-q5Mt9Fuk4hnQY7sbIY-DTgLuM5ovmsqUxqTEuFCDER1jvBS9wg2CVniYidn-rGmmhuv33rUAt488hJhZtyTvPpEIUxCK-Tyjz3CFOEz2oCVpU93yYx9vkgfwmDkjD92CF7DOj6-KaUc559FhmbuNruaWq1zN9j8TqinOoIto9HPOHf6dpjP-ay_5n1gu53jCie66Mqm-q1hJ9yXXoWh0KeMJBj_ySJICNALHBGwK1HcTiLVMMF_Dzb7JcIajMF_SjrKdyO9HD_FbPGlHX-AioJJInWGJOw4QAww2SC-feBSxmA__zsVrLRo_P4ln8A32AOVqif-OvuzbrJ9rR7nGL0JRinXYy0Xo7Upu9aw2WGpkV5Sn8a3w2_MJYPRd-LmJQE3GUiZxXGrmxIpkIv6fyXstSVyV91uOtuBdpeikQr78D3eYw89bSYb1eDBBfxQyL_9U5S6cUjP9rXykoc4W6P5aV54fZfbwLNcUkN4Jvbb0UkLoNPOYcUI7N4e20PeT8FnKCDxZ8LhMLvtDX-6FocshR7vPfAOS1Hl_IdWoje1mSjYANA== + id: rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d + summary: + - text: "**Planning updates for the poem**\n\nI need to use the planning tool, updating as we make progress. First, + I’ll draft a plan to construct a poem with 12 lines while meeting specific constraints. I'll ensure the line-initial + letters match the SAMIRA/DAWOOD pattern. \n\nFollowing that, I should use the update_plan tool twice: first for + the initial plan and then again upon completion to note that it’s done. I think I’ll need to blend these updates + with the poem outputs to maintain a clear flow!" + type: summary_text + - text: |- + **Updating the plan and progress** + + I can make two tool calls before the final output: one for the initial plan and another to note that execution is completed. It makes sense to do these calls back-to-back in the commentary section. The first will be a succinct update of the plan steps, and then the second will detail the progress, such as whether I've selected capitals per line, constructed the lines, verified the acrostics, and delivered the poem. That should keep everything clear! + type: summary_text + type: reasoning + - arguments: '{"plan":"Plan:\n1) Map 12 lines to required initial letters: odd lines -> S A M I R A; even lines -> D + A W O O D.\n2) For each line, choose a world capital whose name begins with the required initial.\n3) Compose each + line so that the first letters of its words, in order, spell that chosen capital exactly.\n4) Keep imagery coherent + so the poem reads fluidly while meeting all acrostic constraints.\n5) Double-check both acrostics: (a) line-initial + letters form SAMIRA/DAWOOD; (b) per-line word-initials form the intended capitals.\n6) Deliver the 12-line poem."}' + call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 + id: fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d + name: update_plan + status: completed + type: function_call + parallel_tool_calls: true + previous_response_id: null + prompt_cache_key: null + reasoning: + effort: low + summary: detailed + safety_identifier: null + service_tier: default + status: completed + store: true + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: null + name: update_plan + parameters: + additionalProperties: false + properties: + plan: + type: string + required: + - plan + type: object + strict: true + type: function + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 124 + input_tokens_details: + cached_tokens: 0 + output_tokens: 2084 + output_tokens_details: + reasoning_tokens: 1920 + total_tokens: 2208 + user: null + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '13627' + content-type: + - application/json + cookie: + - __cf_bm=iCqRne9kyR0PMPNZoyqDn_m2ngQkH4xbcP3MTUR00OM-1757606027-1.0.1.1-pu79HOwukdyQAVqIHfqXjoVPBuQJzgRyQ8q46_Qe3Wa6NoZj10PYGBFokyvM7Rp16lCXe5NHqkJQBNkLpP6V9eQLO1LHKuxn88Ys4BWJQgw; + _cfuvid=u8PIrvroYExp9T0VHno5qv4q0PQq8DaVlLrVzqvcLJU-1757606027848-0.0.1.1-604800000 + host: + - api.openai.com + method: POST + parsed_body: + include: + - reasoning.encrypted_content + input: + - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name “SAMIRA” and the first + letters of the even-numbered lines spell out “DAWOOD.” Additionally, the first letter of each word in every line + should create the capital of a country + role: user + - encrypted_content: gAAAAABowvCLN7S0x6x3UAgC58RKPu5V7ySQDy1A3899hN_N7bcM2zbKDF_zIh-sAzZdYjJi9p1j7Ai2g4HADZrEOwttVqNdC0xo-SmT34gv2gmTdN-3lDEZuxfoqcyMOSk2VL-r22UBTL2kz0BNlfqj70TXwOMlERaCp-jRCEbBjaVP52RHGuhh40tngqE09fRHBkLIlOPVjZ0sngDNtAgwbix1DRiTDPmwYNnuS3l4iz315FdX4j285xtP_E2_Cyc-hGjp-iukagq5FJC1-5AbO6f2zQCuVVSYJOLP2TKqUjOT09-y8QKlUsqkidM1Qok0xn8kZiI2jaP6_nVwhVnC-x4SDfttlr5oB3UYWAht61YXQheBVBhCAxJ1fYk1kiPxEh3bknoRqpF0uEcxT4NxE-I8jlPqaTI8vhZLYb7S2Gz96rga0R7BmjHf3poQ4EC24GfoZFuOatORjNdKHahjdITVDvajOkiZxbc0_crrQ3n8xoLPMmFeCD3oKlDaKESbeQPet6AQ_V_gjuSz5yNrcodh8hXSiI3snLQAfaYRIpDMljGob9ADEMAFpvKQ3BYff9dU3hjrk-ij_IRJh4XzH6tgUlbuq_w6a4VffHnEy3v0qYUtXoLgBUFzRTl5EW-Yp-5Sel_zoyn8Elsulnevev6PM6AWi6j_NC9oLZfpmbvEu5CrJBSBiuWRymWyEuKrG2HAUng0r878FG94L50BknkSvNK9U9okiftc6zDS3xxL26TDL8G4TRH2c3PWFSpjh5sNmXoQEW9HG9XlG7OsB4uPdGDlKeKCrZ6NBrGaqGGxId45HQTWG8q9eT3sGJtkrMIgkCm0lu1MhxdVD2Xy1Syk2zpKmv48ZqU4QUjiCltcIJAI3h0Slxm-sJG6xWkAKs0OQLpsnnQu-yNYfD6T6ctAOEV3EEy1rdzB9NSz77aM323fl3cv1uwUH-CLdr6Q-4gxD4_HYaSuiuyd_DAvsRrFQcMeISD5x1sGJZkcjD4LAaPNqnAfc4lobugwB_EsdmrhQcPXKu5bilCa_2OhSOyA2iah7T1HT2bwQ9W3xUDSgrA6hVdlqyDW5X_tol5IMfrldKZ_HJnGBSK1BBwySr4EeV0500Xzl8AOOE6p0ocZZcYX2-WUiOVKvDbHYCNCZwH85fDsxNeIEGM_rB_Yi51ZK16u5c7JsAD5qB51nkbZUxiTeQ8ZIZc8taa5FLDIXMkpyiBBwgYQ6_O5k8pmgoIObbVCUYxw-zVC7TR67f2Y7HZ2ZVIhUqxV9L3HsjBOUs8CzESvdKn0DXRm_Ut-Ap-lV0JOfe0f8lC8kPpxDIyIrHjgdlD9T04Z0WkroH9sNANrx9417B0u6Sd8NZLasMJA15hqR3kR19XSZ4_XltQxSvn6lQbJXrjiavhr4TOtmTSQbg8E1zn34P-zBxsQXtiV462uL_V3dWMYY4HcOJYPswIpMQLIl4ziHE4Q7OfJXEuUe15kWZgpBjKdzQ9RF4w8LM1YDLaoonFnuZsc0y3wOdIfYn261Pn5YQ2t8fPDsLrNvEFcUmTpx-qKPmmXQnCkMZA0TdKSvJQ8LK9BAB4DZHycSRDezWlteANKqDD6ADh-hw4YqFdcKtiQ3R-1_6UlvmurfATblITIFUn33m7Wuyu6uVr2jXpOTOyp_HlDPjJdoXJgJqxAgB7wlscZlWoFMhIOz2H32PSSvpSoU4pDY7hX3zloH3Z_g7HIYr0bTeYGIgm17dEWcFuuFrlZ0oBPbRfe8BtfLF5_HmlFuNPIkeTqBTCc6POaN5-cPh09woX_8l2HPDnFTXxEEwnqRTcbDL2NKs_-OnfztHoM__yfaqVfbIZHdkDJ7xVHOapcfs2VU3Fmk16DxtBXsV6Lz6Y6P9CmSPeDTCg3YBneSCAbPQK9TDMjHD7zUMvwLYar7VZ50epVy_vTOrVG4_4B_Rmk_5PU9_SMPS6HLr8SOZeI4QsfehMXPWPJJ8y7TJuKubtZLJm15Lx4fnUtDHmQ154ciRgb8Y5YG33OXjXJhrpMHuBJ703X_E9aaLShSqzvX2RzVUQN1lusP1jGL-P33nuKpZY8GLa3X7lpywwnf2ylTRvhCRJpSNw-OK89sFdA0ahz-e46cKLoQ6bbVoudMe0chlAXanyqCX6N6mhLm3kTVwNRzo6MKYAsN82vdc3_1E2Ui_W-SSROAwLWCa1_-xbBfdMzbFsdLJm9R3fPPU5v94k3P14-NdwYvEmfUbdNttH6MblOLqr-qdtZ1MjcpaVIDLd2hbzlxQMQ8J1rTxyLXiph6KVXS7AH8oQsZwBCSSxOf78k7RBjyXbgh3ZxXcrQ_miCpRPu4tdPtGI6B_uRBU0fLtmaDM9ugNctdgYuyFXYBK0a1SA7v3J-QeOvjNsM0NhV1uha_UnGvwKD7cyVd1yWnJ5Cu7vimeFnHiRscqb-tnfowUyLaR3gUN2qfL9vShyAujARWplIB3nIdoLOCMwwrbBi4EgntWBSj_4Pyc3h64lVUQ8prXOeCSZaPLcr9TL1_kawidWuN8apsFClZv91I60LA2eFp7Bonfr3sJpyCoS_b5o-cZGnTVm9S_mP827XgwoEl_buzVrOVIfBYCe34LfOnYBhy1C6ppeNOuP05sGanYERZ2-Lkm2DT3wKVt1Sx4KTJalqEAY6WnboSLP-CvgPbn3yAb-sx0vRGq6HJGgiZotMCfbaqu7OjpWPt4wnRC0k8mxzIm-ALGfvmlEVxcYG1PG36yP5DbqiOFhATA6cPEMXW5h0rM3c_IQPvqNKJUq0HfYHVefUVSkxFaMpAUMOMAarKO0_TeBkSgNVgno5jzj60Acf9AikZzmEzfYsCEMbitErsVX9RlmYw_x0BoyJNBtG_tzQWyvH5fjQtky9WXcDm_OXPRh7LGwKNg87p_J1WKvBvuNStH9SASPkTL9Ngqbaia8VyKFV4u1yobRw1CzodiNYLm4b96CnGLdh9C5kEE3S4LZfNuihcnk59buK7L3uy8W4J6ASXy3-y8wUQY-_oLv4Ld-2dYKEPMVquhicj-x_uVLcXaI07dEWBmruQNYbgxr5-HK8_AyH1YLvM1UsfJwd5NS5y6vrRa3B0l1B4RY_reUOFq1F3kbQ00pIdvKcuQ7u_y7T_b7neD7k3FrVwWZzWicia8uISZazP_MyKeMD-Bw69MAB06dSw-QAOyYiOPFo1F_QzYPuqdfU0SM59nYIe76_9wnXSly5-axLC0-EVBfiIbSxMiraljnP3EvcEHcKn6pOmBuASPxRjUtMbWQs-DlA-H-RZnThWljq3CgDlcGPx63U1eVW6L5fjmZhzwdXAxT2o8cP8VVSnYTB2lusV7NIY2Vu00aUfQViYgmBN5dsbaO4QQGXSP8ZJpenwob_2uraS9EH_Ft8RsDOjhXVp3dnopntuAaxQcQ9n2PmdRTZzUnnS6dIEb4K0i9hVo_ePxKxpXPKIU1Tg6GpbV9FlDis2FWiPMUfyyJZHIjjM3ygoiiVj7JVtZxxKWVy1nIJremofDnv_8NO2bUeurqYSG0tX6LYYUHBzovBwl6ZkUd0iIFb42aA7ObTpGIy_uM4vdCwu8KXLlV8-2xAI-91U6fcQ11VLLjqclhuotfE0Q0JBmj2Qzf2OpJxcoi-7objNvE4qhSx9FpSvGjq8SkujalSBluGCjstX3IuhJPBoA9K3UBhZfLN4jT34WfJdN2iIymBKm6q-ThSHOQl4XezzuG1yEvXFLgKL6i4oPDmGE5YonJhXImcpyNfuTcybMF78UoqkUgXD8dLEnZYYwazdTdHIajivncXgmb_84Rj4w8VL5HEUODJwDrmCW5U-wL1xIhq40NXz5sw4Q250KpEzEcjiyZMJVVUYkHCNZoNY8UQADLA9QKqn97iRPI_WdwsM06LfYmoWDrZF94QbE1XMQc5LIObu-jrQ3tx7sNbKB3T9WiXgU6btOWj0X4VzrvRpebGzUWa5mId7QOgJPTmwf6I5v8xYGshEihPX7T9bes_wMLKVxoImGkroND6Y0Cm31DDwO3Jrfd8S_uVn_Ps9Brcu7AQYa6TUc0GIOnIAdC1VAzaNO9wbbcihg5M7BOZ5orVdtDVMIRq-nx6KzRC-DUJ1x2M3KcJ2ugqMvvd2bHT8bfpSiV6o1i7wZSBqBSEcwfAI0bOmnsb-TLKkUG-q5JriOYIIXl0M0o2i4xD8Q_nSPoOr9De2KsXPQPvfziV15xMzWjZ4YaPYOoItivOR4FxchdOUg6gSoxPWnJ11_9Ug3XPT7F6mvMMSekufiRzEuLgnk4a40b7Ra-Vu43491ChjolU5WnTb1ezDLuh4srcjPlNsXg1F_9UJzYL77oM0ewQSzndB7ca_pS_mpPG7DvtoH2GCwHzZAwLWKl1wO2NQo3bHZcPhfa0ZFBTz-Ix5OOzZi0AuPtZT5adnicdfqJ3NOm2TWmKb3IBh6RB3_5wi3yzhaWMOcvcW34ITxBQRnq15dBC7R3bq6rabHS6rtk-8YJnlcViU8bEGBZ2E_oyJRRn6Qm3l3DEw5eXViCTN_cVrXlmwzgRn6hNDlVgkgMbPTjFAMlrM_Wra28wbqyp417BICv6r12oaqYkDnVjsPzVb3xrg0fUdKRRSYg8Chx2tNdPXZHFjnQOFx6I3N_QGTclzkkeZY2EblE8BhPS1BEkeseHOHV75N4bfMlWabpiHCVpoLeLeLeUARKg0qYp4o1nm8RZ1z7y85ulRDwePminL4WgjMZVBaeoGEsGV6W8-dbItmRSwl9GqwteyRms_z4GwIoZEOEKcWTcrodewklpR1TgN1UkWUoCIJlezlVRzaqqL6J8IuWiOG2cqS7ZWO6t6-MDPsHdbMNJc5oSgPRmaOv1SDbFAj-PACjfTJzE7VNOAZABtgnq5ZsTNRNiacn41zM3DNp1idzPDgKv2x0lV6Cvenxh-Jr-k5FNbWCjHfQ0fNkGtwtXS7mUlVa5BHXBQZHwXNfrXQvLw1eo3t5SPrwdns8WQJ6bjFlNkDK9fJoFuJFVak62LHtIx1jfa9_8SmZyttUWKQw5OjD8W3A24fSZb3stzQIskFhQxV31HGMAqE7gklN03xealJ4-lVLT7-ziNH-wWV8rvrYIm7a_PmLCr8vLxcDtCyJK9VMOaQy4HtDp0_z5iSkpO0MiqQGyaX1AB8TAVr_vNQK2fWTtya6_1rRggXEY8CZV9aNx_U49SdbR2HSn7oXayD1s7JfbVl4DgTo8EvMcvp18nhVRW-b5cjQr2SxJwB3thOcmv2fVjgKlB0NQYwwRd9AwxwtSOS424Igg4z-Wuy0DXaKm9GKKGQBdxu77ptZROORg46NyMd_P31vJr1NQeJ1S2OFXFhTWwdCF7AWGvmV25x7FE1B8DV94tbF3Fck77CbzGNbMQJ-ej_uN6cQveKhFGrlzvFpVVCQHsSpTM9K7Z7YNmA3efa5QzCbQFy4QzSRRa5_3dJMUcIMTCNNfixxUFr-kvNowMkMiCZ2-hELphTn8P-UfErECZsfUz72oWbWvfuo8KFGzYkFQh2r0p9SPuoI5HHfhPyrVPO07FhsEoGUfU0Z-XmlX4d1y-NcjU8ofLuuljt1MUvYvy_dnAB300N0ePfluQKNlQzQRxHZFNdj1QY-q9CvWo4_o86rr4IE6ALBs0g6WEozFNmFbY_kx94NbCrcV1twi57KlBlRxttTIgO5ugxUWM9FpNqjKGOK9yYP-9UqCCs78C6ownKRxlTzjRYQP-4HtLbqOVh967_kCP3D9r4GiBEZDKw81rZeuQM-vITE_nDpne0ssvW0a6RSenV2rQ1DZl9HeGwrv6XUD9zjuHVW6r7fN_CvSSjQYt4FmghDkgnFJngTUVjrpJ-ubwjsdTNwwHozbtatkxPWJNAaJO1FoeN3sBsQjS_9CBHljM8ctWIFv4ZdCjNuxvQLVOoClBydblt31d2VAxjpmL6-SJ756wt89rHcYPA8fdn7I1YEjcCoGA_gxn6JWVWMO0lX7mx4rz2ooIgCk8FdwG_emyRqnGTnxEXz2bSrHADQ-NldMmF4kMrNq2TNRgxA2zAS-hwbUnQQIw5Z_BInG_l4QqHZsxGN7BYanGxS34-aOgtAV1F2K5uLBnOw1S2KRYk4wAu14k6555zCFsGouz4JbG6Jfw1FgBhgSUSxixVp9yKPnxVgK_dxhqLO7W50DpBdRW4MVAm5kaZ9zEUoq3aEa6TzS-a3YDQBDSZ0E_n0zu7WzqYzA05RUB4halBa24aKOQaTBwLfro5hNr5v-djIE1eXZgIice6dONYQgE1S03xj5QG9Ub6MY2uAJW6_OPdo_GvRxvG4utVNrybylLUwOcOJiXz3lm_jNYNKI0N2mD5W3uPHXnMvcARuebr4BfLJzSccnPgEA8zLdxMIXzEtF6dVEmxWQtbpR_VetTEa9YMpuHG-4bKPU-aluUIeVUqsemj0X9l0Nk2PBIHoliz7eO1Y1xJVxAp6aKdWMbhOiIpMEE00VOLE6nz9xmlmWQbR9W686iY6KMIWZEurfj-amyWQMaxpAgsO2uLdd5ySEUBtPpDNBi6WyZZ2XRaAaAoZ8dn2TbJ6zcyqmiAAWVOuL3pkwfp7HFx0mc4f-g3X4fohKJNeZHpGkGGHooughqLGe4_TvdtioTaSN4rj0TG9JUxV-OI62CNEeQyKa2v7Fcmwb99hvxqJt9G-QswPyAB6V63Q6l7o2OIHpIg-XHxl-f4jsOjDvaPcN_yEYoWwlvi6-7qguovtSLV7Fc1mGXTO9gcTY93ZaGBQVzZ89wcsWXazXTk2AoMayw3Hl2Gyvj0Sl6ESUf48Tz2AK5RltgpjhQPyOoMi_cidBjvrWfBpCyd25kx4dnojq5lfL4tcqcLRHg9PEUmhDQdbuA1Iod_7AFZoKs-V0eF_-aLaTdjkPiCdcUggp6o4JZWLUkQ95v62HzGjn9VEnqJc0v1Jyx96cxwgk_BKuhEJczn0V15CNNGpNgqlwBSNX4su9fQ7qcueBCO2Bj2_e0MHpdg4X1cApZOZzfJDxAkuJpg5v1TUGPm4kcM5QEOjQb62qK4EycdTnRka0yk8eRC6bmenlJJhZKqq5B3Nuw005tW4bW5VNgEbX1JbhQlOa-jHDxPGn2VaQXak7LFiAg-hqJe0-A5skqcerB2YFaBpWELYp6NoUcIz_jabblMrLMNCTVlMbxd3DnfzWJ5WtzF1vEHOT9LReXZW0Vl8hQxFTWkfdIhqixARC66RUcVK0UoM1BJUZrYaaOryWt9nuZWob534I1gxznOy9HSqFMxvnldvNKIS-AOO_rrfVmTTwarVlJUf5BXtkb5fZvp0NfYyclRXoqBUi8QQVDapjlfj5jFle95aSNit8c81_umxCYNKRE7KAOczayyHML4CV0sD7k6d5NrT3g9usfkHlv7iC_NpnL7oiEwlyyDbSM686Xd2wr4HoBfczZ2kPcyE53RIN_XkU2oYbyVuozQb8IE2W40dzleTzM3jfZLkY4tauk6WbsSFWVI8h1teJ8Ysc6cdmBa8qN6uVkKZnyFGOhM_QTlQuUHviIbnwnW91WZLA4OpYfXoKVeOgmWZOyrTZ3_qzpKHjEG9qH4KCd2Snr7YdaKzyIXLeRQvU7tKm8aPeh2W19zO_qWXl1EVlBldHplUS8g2KFH-Uo7VPH4YiZJxSbLx3jd3Toxwn9DnUzNl4Icyzzyr13HZukzP56wJbsVKXoTHoKNoaqeN7VCxB3hMaeh_bRu60hARKLSJa8aZWusmnVItzkH5VSGL1uQq1nv4FFLJa7h_kAsrvAdl2-tQRJVQdWpohnHzTTzsKHExg-wsNssB4FJfb9TapdQOd4FJb8pNbU6yhS3cR8a9F5-qycYaqvYb5H5AB06Yb5QEzC-uJeefAoRydO47dCplgzM4vqwvtejyihct9gECfBG8brjninBlXMBJJ8zTcMahbqs8EWHkYsDGcBoeSjB8I0gujykR7L7xjAaNIXNedqwPNkXYs_uRbJ8UQvyQcZWDLpNvCPf82TgB5Da0QyLqt5DTqUVb147hattkcUPG4wTUpCt-s-D-EpUAqBw6ccXfNZ6_wdYitL6qPdo6U5lc87GnPtSo-Zrd6HGlTO2be5vu7TU69E-5FuNIgqMWnyBeQlgj_5p3bYvvKPVdOAjGLDZ3b6T6m_ILhwUrVgec0hkiYqYeVrOBF_KtAoVcmA1RsAVt2xoUbmX_juPMN73srP_F6z6fGSqIr2JLaAaLvPE_bgW1RpXnkiJ27uv5ScFeVGepElMuKcxP_pk10zilbNEwvVpmgJnfKhwd1fI49QVUBEpfjB90e3-YdzfKVBgY6rCZ2L8aFferi9cIhILJVw_eAnPi6sCHrJHh7DbKRmcdfMRsVN6MLnfw9t85hnSN0J11foKTeCV__40JtsLZ72kWiTxKH7dNv8OcAtAKzf_G9n_rYizOgUAGPawTjy2tfRRgD4r4ov__rX7CynjTZkP-LcTe5Vf98GikGWZzglUtigoIwLpaO8WjSXZQd-uBfgY2hBiLhY7XRWHi_GRxyVRC0TOINvtY_J2wvHPQw0Nn9tUigV2tR1HOeE1EvSjptCA9y1eekZ7ka4fdKWGvO34VQIUvRDuffaMEHByRKK3zdflFF5-sdQfVYZ6am8yC-OX6OYRIleHNzjs8GezxqmKxi3qTO5PF56cgQ5KFWVO8poV8LbAQ2qnIBAgF0XLApWyb31v2WreYqwLip97H_EZWSlVCn5KWNNPkdwfgBtv6SyydRx0Cc0mmeRCBIs5Kb2uWF1fjTAWFVmdTTR1ar73ilKa4fkaqBLdLB1FIZ0maa774ixZ09vKugHY9UYeuOxJ-SAkxFXl-2nl2aOuTWxD3X0kHYQoC0-QueJQkU5Jn6HCO7Zy2nFv_D5ZRq0EC3dtjdS8j7N7_Wfw6C-kf4jZJHl9e--7p2MEGwNFFDxCNueRjvi7MFaek80xZYWw_dIvkdOnWw1M8NDPVd3gH__yaXYjvPq_N6aZAIN5mLGqJ8hSQr_uOVcP59fwlFLE8ogb3Alk2WWtm-ssLOK3NFWybqugDpZTloiEE5uHmdX6psJqESYERgAFv_a_1O7rBuRm19dROMsOz2NhCz4xujDYXnjeBdLv8UA4Z3pmRec_0LqBXqt1TFmytjeXoV9pMR9shNjX7RCeqqPQoo9r59izIS79q5mpYhKybxVdOGNOUwa5dE7jNKi29pGVfFaOANQAnRTHvxYQE621uaGJGaUu1s2KYrvvUG6CXD4lmzMT3EnRLvZQbhQojjBR4_eHcyKnUhv2b-7EQIaBZS-tK_5lcyOInCfFtjkNe5SilAlXWqpLX_C3lcsDGOZBLQR5y-gNdXoe2vTL1qDZ_Ez1Qvq9Hp7lZ1ak6btrx2hmLrlFreMuyC0KxH6UuS_6wnhtKFK79fdOSS1fXwrW1rvkhZELfIthXGtVwyfk8-HxpMZLmG00lpKUvZCGQ916qqSPuJcBIGV0VmTX1vW5qjAHyTEEFEOfGzvBGuaaI8_Xv_n2tzsM6ZAP5qtj1oKK485ISQUrpMb6-sM6pRDuvyYY80tWZ9H239EKRNc2B4fN4vJ1vzxw68OMPAEMqf47Rh3xa-bSeHsrpo4B_uZqOEqoLDETTp2QJjOnQXHfl18rcwVLMBtTZ7yiQnAAo2lgHs_fuqAYupWb7E5JYD9wAeA9Gg3W2G8ZJVKHK4cTFrAnj1Uft1s_xEtgRx8V76Ay2TQkJiZ9-aknFNqhVdNqVWlTQm9vezByGNidX2E1FNZD9X79Q8oGOs5_Jldi1WQkut5iRBZnPz116XIBpRIUm17v_VYJy4szS7qdWgRJwhL_D8spCumPFdiCbl1rutMqOLGaSExCl44pn_tVVf3tVaEQ0ZlxnsP_qEezZPEZuEFtiSHmD1ZFY8IbbM4xMe1FoaqELzL_156SVYQ4pb-JNx9shgo7XT4RwmEbM-QigtYB7LEeQJHB_efmcjZU9yClIr5QOV8n5z1uqEmt1qxq_ko3BJpEo2Lq0l2l3OE_z-1KEJV9izfz6m2WZsBuqZbaPq6enpD2jZs4lW1w6F7vjTL3p4_g7Hk3pjztccld7pTbxMbiozZC22UN1-6el6HHcpTMz4nZl2doFc9iOFFTFQBOhoGDz3QCQMkqgDnu6LELJh25Blf5KoyjPoNmMqmS9e2z-z2wTVkZkdLitOXu8TlRIMgcEEqPn-q5Mt9Fuk4hnQY7sbIY-DTgLuM5ovmsqUxqTEuFCDER1jvBS9wg2CVniYidn-rGmmhuv33rUAt488hJhZtyTvPpEIUxCK-Tyjz3CFOEz2oCVpU93yYx9vkgfwmDkjD92CF7DOj6-KaUc559FhmbuNruaWq1zN9j8TqinOoIto9HPOHf6dpjP-ay_5n1gu53jCie66Mqm-q1hJ9yXXoWh0KeMJBj_ySJICNALHBGwK1HcTiLVMMF_Dzb7JcIajMF_SjrKdyO9HD_FbPGlHX-AioJJInWGJOw4QAww2SC-feBSxmA__zsVrLRo_P4ln8A32AOVqif-OvuzbrJ9rR7nGL0JRinXYy0Xo7Upu9aw2WGpkV5Sn8a3w2_MJYPRd-LmJQE3GUiZxXGrmxIpkIv6fyXstSVyV91uOtuBdpeikQr78D3eYw89bSYb1eDBBfxQyL_9U5S6cUjP9rXykoc4W6P5aV54fZfbwLNcUkN4Jvbb0UkLoNPOYcUI7N4e20PeT8FnKCDxZ8LhMLvtDX-6FocshR7vPfAOS1Hl_IdWoje1mSjYANA== + id: rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d + summary: + - text: "**Planning updates for the poem**\n\nI need to use the planning tool, updating as we make progress. First, + I’ll draft a plan to construct a poem with 12 lines while meeting specific constraints. I'll ensure the line-initial + letters match the SAMIRA/DAWOOD pattern. \n\nFollowing that, I should use the update_plan tool twice: first for + the initial plan and then again upon completion to note that it’s done. I think I’ll need to blend these updates + with the poem outputs to maintain a clear flow!" + type: summary_text + - text: |- + **Updating the plan and progress** + + I can make two tool calls before the final output: one for the initial plan and another to note that execution is completed. It makes sense to do these calls back-to-back in the commentary section. The first will be a succinct update of the plan steps, and then the second will detail the progress, such as whether I've selected capitals per line, constructed the lines, verified the acrostics, and delivered the poem. That should keep everything clear! + type: summary_text + type: reasoning + - arguments: '{"plan":"Plan:\n1) Map 12 lines to required initial letters: odd lines -> S A M I R A; even lines -> D + A W O O D.\n2) For each line, choose a world capital whose name begins with the required initial.\n3) Compose each + line so that the first letters of its words, in order, spell that chosen capital exactly.\n4) Keep imagery coherent + so the poem reads fluidly while meeting all acrostic constraints.\n5) Double-check both acrostics: (a) line-initial + letters form SAMIRA/DAWOOD; (b) per-line word-initials form the intended capitals.\n6) Deliver the 12-line poem."}' + call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 + id: fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d + name: update_plan + type: function_call + - call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 + output: plan updated + type: function_call_output + instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update + it as you make progress against the user's prompt + model: gpt-5 + reasoning: + effort: low + summary: detailed + stream: false + tool_choice: auto + tools: + - description: null + name: update_plan + parameters: + additionalProperties: false + properties: + plan: + type: string + required: + - plan + type: object + strict: true + type: function + uri: https://api.openai.com/v1/responses + response: + headers: + alt-svc: + - h3=":443"; ma=86400 + connection: + - keep-alive + content-length: + - '2389' + content-type: + - application/json + openai-organization: + - pydantic-28gund + openai-processing-ms: + - '6691' + openai-project: + - proj_dKobscVY9YJxeEaDJen54e3d + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + parsed_body: + background: false + created_at: 1757606028 + error: null + id: resp_68c2f08c195081978f96d143cf93ce4b016e6d37acd3117d + incomplete_details: null + instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update + it as you make progress against the user's prompt + max_output_tokens: null + max_tool_calls: null + metadata: {} + model: gpt-5-2025-08-07 + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: |- + Silver owls feathered in ascent + Dunes open, harboring azures + Auroras stir tranquil airs, northern afterglow + Amber nights kindle autumnal reverent alleys + Moonlit undertow sings, coral aster tides + Whispers arise, rivers serenade amber wistfulness + Indigo sands lull a midnight amber breeze, awakening dawn + Over snow, lanterns overglow + Rustling acacias bend as trade-winds + Old timbers tremble as waters awake + Azure palms invite alchemy + Desert jasmine ignites breezes, oasis unveils tender incandescence + type: output_text + id: msg_68c2f08d7b608197a7334580e604cca2016e6d37acd3117d + role: assistant + status: completed + type: message + parallel_tool_calls: true + previous_response_id: null + prompt_cache_key: null + reasoning: + effort: low + summary: detailed + safety_identifier: null + service_tier: default + status: completed + store: true + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: null + name: update_plan + parameters: + additionalProperties: false + properties: + plan: + type: string + required: + - plan + type: object + strict: true + type: function + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 2276 + input_tokens_details: + cached_tokens: 2176 + output_tokens: 125 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 2401 + user: null + status: + code: 200 + message: OK +version: 1 diff --git a/tests/models/test_openai_responses.py b/tests/models/test_openai_responses.py index 58b67a1cab..df858e0f6d 100644 --- a/tests/models/test_openai_responses.py +++ b/tests/models/test_openai_responses.py @@ -1296,3 +1296,93 @@ async def test_openai_responses_thinking_part_iter(allow_model_requests: None, o ), ] ) + + +async def test_openai_responses_thinking_with_tool_calls(allow_model_requests: None, openai_api_key: str): + m = OpenAIResponsesModel( + model_name='gpt-5', + settings=OpenAIResponsesModelSettings(openai_reasoning_summary='detailed', openai_reasoning_effort='low'), + ) + agent = Agent(model=m) + + @agent.instructions + def system_prompt(): + return ( + 'You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually ' + "update it as you make progress against the user's prompt" + ) + + @agent.tool_plain + def update_plan(plan: str) -> str: + return 'plan updated' + + prompt = ( + 'Compose a 12-line poem where the first letters of the odd-numbered lines form the name "SAMIRA" ' + 'and the first letters of the even-numbered lines spell out "DAWOOD." Additionally, the first letter ' + 'of each word in every line should create the capital of a country' + ) + + result = await agent.run(prompt) + + assert result.all_messages() == snapshot( + [ + ModelRequest( + parts=[ + UserPromptPart( + content='Compose a 12-line poem where the first letters of the odd-numbered lines form the name "SAMIRA" and the first letters of the even-numbered lines spell out "DAWOOD." Additionally, the first letter of each word in every line should create the capital of a country', + timestamp=IsDatetime(), + ) + ], + instructions="You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update it as you make progress against the user's prompt", + ), + ModelResponse( + parts=[ + ThinkingPart( + content=IsStr(), + id='rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d', + signature=IsStr(), + provider_name='openai', + ), + ThinkingPart( + content=IsStr(), + id='rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d', + ), + ToolCallPart( + tool_name='update_plan', + args=IsStr(), + tool_call_id='call_QbeOap5DBC9PH8zkuG1J3fy3|fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d', + ), + ], + usage=RequestUsage(input_tokens=124, output_tokens=2084, details={'reasoning_tokens': 1920}), + model_name='gpt-5-2025-08-07', + timestamp=IsDatetime(), + provider_name='openai', + provider_details={'finish_reason': 'completed'}, + provider_response_id='resp_68c2f06ae97c8197980bb8a4837e2e46016e6d37acd3117d', + finish_reason='stop', + ), + ModelRequest( + parts=[ + ToolReturnPart( + tool_name='update_plan', + content='plan updated', + tool_call_id='call_QbeOap5DBC9PH8zkuG1J3fy3|fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d', + timestamp=IsDatetime(), + ) + ], + instructions="You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update it as you make progress against the user's prompt", + ), + ModelResponse( + parts=[TextPart(content=IsStr())], + usage=RequestUsage( + input_tokens=2276, cache_read_tokens=2176, output_tokens=125, details={'reasoning_tokens': 0} + ), + model_name='gpt-5-2025-08-07', + timestamp=IsDatetime(), + provider_name='openai', + provider_details={'finish_reason': 'completed'}, + provider_response_id='resp_68c2f08c195081978f96d143cf93ce4b016e6d37acd3117d', + finish_reason='stop', + ), + ] + ) From 17eb4690f6b3fc408cb65a6c2c9c1e8a578cada0 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 11 Sep 2025 17:02:24 +0000 Subject: [PATCH 2/4] fix test snapshots --- tests/models/test_openai_responses.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/tests/models/test_openai_responses.py b/tests/models/test_openai_responses.py index df858e0f6d..92e87b42aa 100644 --- a/tests/models/test_openai_responses.py +++ b/tests/models/test_openai_responses.py @@ -285,7 +285,7 @@ async def get_image() -> BinaryContent: ToolReturnPart( tool_name='get_image', content='See file 1c8566', - tool_call_id='call_FLm3B1f8QAan0KpbUXhNY8bA', + tool_call_id='call_FLm3B1f8QAan0KpbUXhNY8bA|fc_681134d47cf48191b3f62e4d28b6c3820fe7a5a4e2123dc3', timestamp=IsDatetime(), ), UserPromptPart( @@ -732,7 +732,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_ZWkVhdUjupo528U9dqgFeRkH', + tool_call_id='call_ZWkVhdUjupo528U9dqgFeRkH|fc_68477f0bb8e4819cba6d781e174d77f8001fd29e2d5573f7', timestamp=IsDatetime(), ) ] @@ -742,7 +742,7 @@ async def get_user_country() -> str: ToolCallPart( tool_name='final_result', args='{"city":"Mexico City","country":"Mexico"}', - tool_call_id='call_iFBd0zULhSZRR908DfH73VwN', + tool_call_id='call_iFBd0zULhSZRR908DfH73VwN|fc_68477f0c91cc819e8024e7e633f0f09401dc81d4bc91f560', ) ], usage=RequestUsage(input_tokens=85, output_tokens=20, details={'reasoning_tokens': 0}), @@ -758,7 +758,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='final_result', content='Final result processed.', - tool_call_id='call_iFBd0zULhSZRR908DfH73VwN', + tool_call_id='call_iFBd0zULhSZRR908DfH73VwN|fc_68477f0c91cc819e8024e7e633f0f09401dc81d4bc91f560', timestamp=IsDatetime(), ) ] @@ -795,7 +795,11 @@ async def get_user_country() -> str: ), ModelResponse( parts=[ - ToolCallPart(tool_name='get_user_country', args='{}', tool_call_id='call_aTJhYjzmixZaVGqwl5gn2Ncr') + ToolCallPart( + tool_name='get_user_country', + args='{}', + tool_call_id='call_aTJhYjzmixZaVGqwl5gn2Ncr|fc_68477f0dff5c819ea17a1ffbaea621e00356a60c98816d6a', + ) ], usage=RequestUsage(input_tokens=36, output_tokens=12, details={'reasoning_tokens': 0}), model_name='gpt-4o-2024-08-06', @@ -810,7 +814,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_aTJhYjzmixZaVGqwl5gn2Ncr', + tool_call_id='call_aTJhYjzmixZaVGqwl5gn2Ncr|fc_68477f0dff5c819ea17a1ffbaea621e00356a60c98816d6a', timestamp=IsDatetime(), ) ] @@ -873,7 +877,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_tTAThu8l2S9hNky2krdwijGP', + tool_call_id='call_tTAThu8l2S9hNky2krdwijGP|fc_68477f0fa7c081a19a525f7c6f180f310b8591d9001d2329', timestamp=IsDatetime(), ) ] @@ -938,7 +942,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_UaLahjOtaM2tTyYZLxTCbOaP', + tool_call_id='call_UaLahjOtaM2tTyYZLxTCbOaP|fc_68477f1168a081a3981e847cd94275080dd57d732903c563', timestamp=IsDatetime(), ) ] @@ -1010,7 +1014,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_FrlL4M0CbAy8Dhv4VqF1Shom', + tool_call_id='call_FrlL4M0CbAy8Dhv4VqF1Shom|fc_68482f1b0ff081a1b37b9170ee740d1e02f8ef7f2fb42b50', timestamp=IsDatetime(), ) ], @@ -1089,7 +1093,7 @@ async def get_user_country() -> str: ToolReturnPart( tool_name='get_user_country', content='Mexico', - tool_call_id='call_my4OyoVXRT0m7bLWmsxcaCQI', + tool_call_id='call_my4OyoVXRT0m7bLWmsxcaCQI|fc_68482f2889d481a199caa61de7ccb62c08e79646fe74d5ee', timestamp=IsDatetime(), ) ], From 0c155f1135b57502553349ee16d9efb54fe26709 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 11 Sep 2025 17:07:55 +0000 Subject: [PATCH 3/4] fix test --- ...ai_responses_thinking_with_tool_calls.yaml | 164 ++++++++++-------- tests/models/test_openai_responses.py | 30 +++- 2 files changed, 117 insertions(+), 77 deletions(-) diff --git a/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml b/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml index 913e59e55c..9c72509e9a 100644 --- a/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +++ b/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml @@ -8,7 +8,7 @@ interactions: connection: - keep-alive content-length: - - '829' + - '825' content-type: - application/json host: @@ -18,8 +18,8 @@ interactions: include: - reasoning.encrypted_content input: - - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name “SAMIRA” and the first - letters of the even-numbered lines spell out “DAWOOD.” Additionally, the first letter of each word in every line + - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name "SAMIRA" and the first + letters of the even-numbered lines spell out "DAWOOD." Additionally, the first letter of each word in every line should create the capital of a country role: user instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update @@ -51,13 +51,13 @@ interactions: connection: - keep-alive content-length: - - '14483' + - '15410' content-type: - application/json openai-organization: - pydantic-28gund openai-processing-ms: - - '32933' + - '59260' openai-project: - proj_dKobscVY9YJxeEaDJen54e3d openai-version: @@ -68,9 +68,9 @@ interactions: - chunked parsed_body: background: false - created_at: 1757605995 + created_at: 1757610328 error: null - id: resp_68c2f06ae97c8197980bb8a4837e2e46016e6d37acd3117d + id: resp_68c30157af5c819393a64d8d810d562700b441a18c4893c1 incomplete_details: null instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update it as you make progress against the user's prompt @@ -80,28 +80,41 @@ interactions: model: gpt-5-2025-08-07 object: response output: - - encrypted_content: gAAAAABowvCLN7S0x6x3UAgC58RKPu5V7ySQDy1A3899hN_N7bcM2zbKDF_zIh-sAzZdYjJi9p1j7Ai2g4HADZrEOwttVqNdC0xo-SmT34gv2gmTdN-3lDEZuxfoqcyMOSk2VL-r22UBTL2kz0BNlfqj70TXwOMlERaCp-jRCEbBjaVP52RHGuhh40tngqE09fRHBkLIlOPVjZ0sngDNtAgwbix1DRiTDPmwYNnuS3l4iz315FdX4j285xtP_E2_Cyc-hGjp-iukagq5FJC1-5AbO6f2zQCuVVSYJOLP2TKqUjOT09-y8QKlUsqkidM1Qok0xn8kZiI2jaP6_nVwhVnC-x4SDfttlr5oB3UYWAht61YXQheBVBhCAxJ1fYk1kiPxEh3bknoRqpF0uEcxT4NxE-I8jlPqaTI8vhZLYb7S2Gz96rga0R7BmjHf3poQ4EC24GfoZFuOatORjNdKHahjdITVDvajOkiZxbc0_crrQ3n8xoLPMmFeCD3oKlDaKESbeQPet6AQ_V_gjuSz5yNrcodh8hXSiI3snLQAfaYRIpDMljGob9ADEMAFpvKQ3BYff9dU3hjrk-ij_IRJh4XzH6tgUlbuq_w6a4VffHnEy3v0qYUtXoLgBUFzRTl5EW-Yp-5Sel_zoyn8Elsulnevev6PM6AWi6j_NC9oLZfpmbvEu5CrJBSBiuWRymWyEuKrG2HAUng0r878FG94L50BknkSvNK9U9okiftc6zDS3xxL26TDL8G4TRH2c3PWFSpjh5sNmXoQEW9HG9XlG7OsB4uPdGDlKeKCrZ6NBrGaqGGxId45HQTWG8q9eT3sGJtkrMIgkCm0lu1MhxdVD2Xy1Syk2zpKmv48ZqU4QUjiCltcIJAI3h0Slxm-sJG6xWkAKs0OQLpsnnQu-yNYfD6T6ctAOEV3EEy1rdzB9NSz77aM323fl3cv1uwUH-CLdr6Q-4gxD4_HYaSuiuyd_DAvsRrFQcMeISD5x1sGJZkcjD4LAaPNqnAfc4lobugwB_EsdmrhQcPXKu5bilCa_2OhSOyA2iah7T1HT2bwQ9W3xUDSgrA6hVdlqyDW5X_tol5IMfrldKZ_HJnGBSK1BBwySr4EeV0500Xzl8AOOE6p0ocZZcYX2-WUiOVKvDbHYCNCZwH85fDsxNeIEGM_rB_Yi51ZK16u5c7JsAD5qB51nkbZUxiTeQ8ZIZc8taa5FLDIXMkpyiBBwgYQ6_O5k8pmgoIObbVCUYxw-zVC7TR67f2Y7HZ2ZVIhUqxV9L3HsjBOUs8CzESvdKn0DXRm_Ut-Ap-lV0JOfe0f8lC8kPpxDIyIrHjgdlD9T04Z0WkroH9sNANrx9417B0u6Sd8NZLasMJA15hqR3kR19XSZ4_XltQxSvn6lQbJXrjiavhr4TOtmTSQbg8E1zn34P-zBxsQXtiV462uL_V3dWMYY4HcOJYPswIpMQLIl4ziHE4Q7OfJXEuUe15kWZgpBjKdzQ9RF4w8LM1YDLaoonFnuZsc0y3wOdIfYn261Pn5YQ2t8fPDsLrNvEFcUmTpx-qKPmmXQnCkMZA0TdKSvJQ8LK9BAB4DZHycSRDezWlteANKqDD6ADh-hw4YqFdcKtiQ3R-1_6UlvmurfATblITIFUn33m7Wuyu6uVr2jXpOTOyp_HlDPjJdoXJgJqxAgB7wlscZlWoFMhIOz2H32PSSvpSoU4pDY7hX3zloH3Z_g7HIYr0bTeYGIgm17dEWcFuuFrlZ0oBPbRfe8BtfLF5_HmlFuNPIkeTqBTCc6POaN5-cPh09woX_8l2HPDnFTXxEEwnqRTcbDL2NKs_-OnfztHoM__yfaqVfbIZHdkDJ7xVHOapcfs2VU3Fmk16DxtBXsV6Lz6Y6P9CmSPeDTCg3YBneSCAbPQK9TDMjHD7zUMvwLYar7VZ50epVy_vTOrVG4_4B_Rmk_5PU9_SMPS6HLr8SOZeI4QsfehMXPWPJJ8y7TJuKubtZLJm15Lx4fnUtDHmQ154ciRgb8Y5YG33OXjXJhrpMHuBJ703X_E9aaLShSqzvX2RzVUQN1lusP1jGL-P33nuKpZY8GLa3X7lpywwnf2ylTRvhCRJpSNw-OK89sFdA0ahz-e46cKLoQ6bbVoudMe0chlAXanyqCX6N6mhLm3kTVwNRzo6MKYAsN82vdc3_1E2Ui_W-SSROAwLWCa1_-xbBfdMzbFsdLJm9R3fPPU5v94k3P14-NdwYvEmfUbdNttH6MblOLqr-qdtZ1MjcpaVIDLd2hbzlxQMQ8J1rTxyLXiph6KVXS7AH8oQsZwBCSSxOf78k7RBjyXbgh3ZxXcrQ_miCpRPu4tdPtGI6B_uRBU0fLtmaDM9ugNctdgYuyFXYBK0a1SA7v3J-QeOvjNsM0NhV1uha_UnGvwKD7cyVd1yWnJ5Cu7vimeFnHiRscqb-tnfowUyLaR3gUN2qfL9vShyAujARWplIB3nIdoLOCMwwrbBi4EgntWBSj_4Pyc3h64lVUQ8prXOeCSZaPLcr9TL1_kawidWuN8apsFClZv91I60LA2eFp7Bonfr3sJpyCoS_b5o-cZGnTVm9S_mP827XgwoEl_buzVrOVIfBYCe34LfOnYBhy1C6ppeNOuP05sGanYERZ2-Lkm2DT3wKVt1Sx4KTJalqEAY6WnboSLP-CvgPbn3yAb-sx0vRGq6HJGgiZotMCfbaqu7OjpWPt4wnRC0k8mxzIm-ALGfvmlEVxcYG1PG36yP5DbqiOFhATA6cPEMXW5h0rM3c_IQPvqNKJUq0HfYHVefUVSkxFaMpAUMOMAarKO0_TeBkSgNVgno5jzj60Acf9AikZzmEzfYsCEMbitErsVX9RlmYw_x0BoyJNBtG_tzQWyvH5fjQtky9WXcDm_OXPRh7LGwKNg87p_J1WKvBvuNStH9SASPkTL9Ngqbaia8VyKFV4u1yobRw1CzodiNYLm4b96CnGLdh9C5kEE3S4LZfNuihcnk59buK7L3uy8W4J6ASXy3-y8wUQY-_oLv4Ld-2dYKEPMVquhicj-x_uVLcXaI07dEWBmruQNYbgxr5-HK8_AyH1YLvM1UsfJwd5NS5y6vrRa3B0l1B4RY_reUOFq1F3kbQ00pIdvKcuQ7u_y7T_b7neD7k3FrVwWZzWicia8uISZazP_MyKeMD-Bw69MAB06dSw-QAOyYiOPFo1F_QzYPuqdfU0SM59nYIe76_9wnXSly5-axLC0-EVBfiIbSxMiraljnP3EvcEHcKn6pOmBuASPxRjUtMbWQs-DlA-H-RZnThWljq3CgDlcGPx63U1eVW6L5fjmZhzwdXAxT2o8cP8VVSnYTB2lusV7NIY2Vu00aUfQViYgmBN5dsbaO4QQGXSP8ZJpenwob_2uraS9EH_Ft8RsDOjhXVp3dnopntuAaxQcQ9n2PmdRTZzUnnS6dIEb4K0i9hVo_ePxKxpXPKIU1Tg6GpbV9FlDis2FWiPMUfyyJZHIjjM3ygoiiVj7JVtZxxKWVy1nIJremofDnv_8NO2bUeurqYSG0tX6LYYUHBzovBwl6ZkUd0iIFb42aA7ObTpGIy_uM4vdCwu8KXLlV8-2xAI-91U6fcQ11VLLjqclhuotfE0Q0JBmj2Qzf2OpJxcoi-7objNvE4qhSx9FpSvGjq8SkujalSBluGCjstX3IuhJPBoA9K3UBhZfLN4jT34WfJdN2iIymBKm6q-ThSHOQl4XezzuG1yEvXFLgKL6i4oPDmGE5YonJhXImcpyNfuTcybMF78UoqkUgXD8dLEnZYYwazdTdHIajivncXgmb_84Rj4w8VL5HEUODJwDrmCW5U-wL1xIhq40NXz5sw4Q250KpEzEcjiyZMJVVUYkHCNZoNY8UQADLA9QKqn97iRPI_WdwsM06LfYmoWDrZF94QbE1XMQc5LIObu-jrQ3tx7sNbKB3T9WiXgU6btOWj0X4VzrvRpebGzUWa5mId7QOgJPTmwf6I5v8xYGshEihPX7T9bes_wMLKVxoImGkroND6Y0Cm31DDwO3Jrfd8S_uVn_Ps9Brcu7AQYa6TUc0GIOnIAdC1VAzaNO9wbbcihg5M7BOZ5orVdtDVMIRq-nx6KzRC-DUJ1x2M3KcJ2ugqMvvd2bHT8bfpSiV6o1i7wZSBqBSEcwfAI0bOmnsb-TLKkUG-q5JriOYIIXl0M0o2i4xD8Q_nSPoOr9De2KsXPQPvfziV15xMzWjZ4YaPYOoItivOR4FxchdOUg6gSoxPWnJ11_9Ug3XPT7F6mvMMSekufiRzEuLgnk4a40b7Ra-Vu43491ChjolU5WnTb1ezDLuh4srcjPlNsXg1F_9UJzYL77oM0ewQSzndB7ca_pS_mpPG7DvtoH2GCwHzZAwLWKl1wO2NQo3bHZcPhfa0ZFBTz-Ix5OOzZi0AuPtZT5adnicdfqJ3NOm2TWmKb3IBh6RB3_5wi3yzhaWMOcvcW34ITxBQRnq15dBC7R3bq6rabHS6rtk-8YJnlcViU8bEGBZ2E_oyJRRn6Qm3l3DEw5eXViCTN_cVrXlmwzgRn6hNDlVgkgMbPTjFAMlrM_Wra28wbqyp417BICv6r12oaqYkDnVjsPzVb3xrg0fUdKRRSYg8Chx2tNdPXZHFjnQOFx6I3N_QGTclzkkeZY2EblE8BhPS1BEkeseHOHV75N4bfMlWabpiHCVpoLeLeLeUARKg0qYp4o1nm8RZ1z7y85ulRDwePminL4WgjMZVBaeoGEsGV6W8-dbItmRSwl9GqwteyRms_z4GwIoZEOEKcWTcrodewklpR1TgN1UkWUoCIJlezlVRzaqqL6J8IuWiOG2cqS7ZWO6t6-MDPsHdbMNJc5oSgPRmaOv1SDbFAj-PACjfTJzE7VNOAZABtgnq5ZsTNRNiacn41zM3DNp1idzPDgKv2x0lV6Cvenxh-Jr-k5FNbWCjHfQ0fNkGtwtXS7mUlVa5BHXBQZHwXNfrXQvLw1eo3t5SPrwdns8WQJ6bjFlNkDK9fJoFuJFVak62LHtIx1jfa9_8SmZyttUWKQw5OjD8W3A24fSZb3stzQIskFhQxV31HGMAqE7gklN03xealJ4-lVLT7-ziNH-wWV8rvrYIm7a_PmLCr8vLxcDtCyJK9VMOaQy4HtDp0_z5iSkpO0MiqQGyaX1AB8TAVr_vNQK2fWTtya6_1rRggXEY8CZV9aNx_U49SdbR2HSn7oXayD1s7JfbVl4DgTo8EvMcvp18nhVRW-b5cjQr2SxJwB3thOcmv2fVjgKlB0NQYwwRd9AwxwtSOS424Igg4z-Wuy0DXaKm9GKKGQBdxu77ptZROORg46NyMd_P31vJr1NQeJ1S2OFXFhTWwdCF7AWGvmV25x7FE1B8DV94tbF3Fck77CbzGNbMQJ-ej_uN6cQveKhFGrlzvFpVVCQHsSpTM9K7Z7YNmA3efa5QzCbQFy4QzSRRa5_3dJMUcIMTCNNfixxUFr-kvNowMkMiCZ2-hELphTn8P-UfErECZsfUz72oWbWvfuo8KFGzYkFQh2r0p9SPuoI5HHfhPyrVPO07FhsEoGUfU0Z-XmlX4d1y-NcjU8ofLuuljt1MUvYvy_dnAB300N0ePfluQKNlQzQRxHZFNdj1QY-q9CvWo4_o86rr4IE6ALBs0g6WEozFNmFbY_kx94NbCrcV1twi57KlBlRxttTIgO5ugxUWM9FpNqjKGOK9yYP-9UqCCs78C6ownKRxlTzjRYQP-4HtLbqOVh967_kCP3D9r4GiBEZDKw81rZeuQM-vITE_nDpne0ssvW0a6RSenV2rQ1DZl9HeGwrv6XUD9zjuHVW6r7fN_CvSSjQYt4FmghDkgnFJngTUVjrpJ-ubwjsdTNwwHozbtatkxPWJNAaJO1FoeN3sBsQjS_9CBHljM8ctWIFv4ZdCjNuxvQLVOoClBydblt31d2VAxjpmL6-SJ756wt89rHcYPA8fdn7I1YEjcCoGA_gxn6JWVWMO0lX7mx4rz2ooIgCk8FdwG_emyRqnGTnxEXz2bSrHADQ-NldMmF4kMrNq2TNRgxA2zAS-hwbUnQQIw5Z_BInG_l4QqHZsxGN7BYanGxS34-aOgtAV1F2K5uLBnOw1S2KRYk4wAu14k6555zCFsGouz4JbG6Jfw1FgBhgSUSxixVp9yKPnxVgK_dxhqLO7W50DpBdRW4MVAm5kaZ9zEUoq3aEa6TzS-a3YDQBDSZ0E_n0zu7WzqYzA05RUB4halBa24aKOQaTBwLfro5hNr5v-djIE1eXZgIice6dONYQgE1S03xj5QG9Ub6MY2uAJW6_OPdo_GvRxvG4utVNrybylLUwOcOJiXz3lm_jNYNKI0N2mD5W3uPHXnMvcARuebr4BfLJzSccnPgEA8zLdxMIXzEtF6dVEmxWQtbpR_VetTEa9YMpuHG-4bKPU-aluUIeVUqsemj0X9l0Nk2PBIHoliz7eO1Y1xJVxAp6aKdWMbhOiIpMEE00VOLE6nz9xmlmWQbR9W686iY6KMIWZEurfj-amyWQMaxpAgsO2uLdd5ySEUBtPpDNBi6WyZZ2XRaAaAoZ8dn2TbJ6zcyqmiAAWVOuL3pkwfp7HFx0mc4f-g3X4fohKJNeZHpGkGGHooughqLGe4_TvdtioTaSN4rj0TG9JUxV-OI62CNEeQyKa2v7Fcmwb99hvxqJt9G-QswPyAB6V63Q6l7o2OIHpIg-XHxl-f4jsOjDvaPcN_yEYoWwlvi6-7qguovtSLV7Fc1mGXTO9gcTY93ZaGBQVzZ89wcsWXazXTk2AoMayw3Hl2Gyvj0Sl6ESUf48Tz2AK5RltgpjhQPyOoMi_cidBjvrWfBpCyd25kx4dnojq5lfL4tcqcLRHg9PEUmhDQdbuA1Iod_7AFZoKs-V0eF_-aLaTdjkPiCdcUggp6o4JZWLUkQ95v62HzGjn9VEnqJc0v1Jyx96cxwgk_BKuhEJczn0V15CNNGpNgqlwBSNX4su9fQ7qcueBCO2Bj2_e0MHpdg4X1cApZOZzfJDxAkuJpg5v1TUGPm4kcM5QEOjQb62qK4EycdTnRka0yk8eRC6bmenlJJhZKqq5B3Nuw005tW4bW5VNgEbX1JbhQlOa-jHDxPGn2VaQXak7LFiAg-hqJe0-A5skqcerB2YFaBpWELYp6NoUcIz_jabblMrLMNCTVlMbxd3DnfzWJ5WtzF1vEHOT9LReXZW0Vl8hQxFTWkfdIhqixARC66RUcVK0UoM1BJUZrYaaOryWt9nuZWob534I1gxznOy9HSqFMxvnldvNKIS-AOO_rrfVmTTwarVlJUf5BXtkb5fZvp0NfYyclRXoqBUi8QQVDapjlfj5jFle95aSNit8c81_umxCYNKRE7KAOczayyHML4CV0sD7k6d5NrT3g9usfkHlv7iC_NpnL7oiEwlyyDbSM686Xd2wr4HoBfczZ2kPcyE53RIN_XkU2oYbyVuozQb8IE2W40dzleTzM3jfZLkY4tauk6WbsSFWVI8h1teJ8Ysc6cdmBa8qN6uVkKZnyFGOhM_QTlQuUHviIbnwnW91WZLA4OpYfXoKVeOgmWZOyrTZ3_qzpKHjEG9qH4KCd2Snr7YdaKzyIXLeRQvU7tKm8aPeh2W19zO_qWXl1EVlBldHplUS8g2KFH-Uo7VPH4YiZJxSbLx3jd3Toxwn9DnUzNl4Icyzzyr13HZukzP56wJbsVKXoTHoKNoaqeN7VCxB3hMaeh_bRu60hARKLSJa8aZWusmnVItzkH5VSGL1uQq1nv4FFLJa7h_kAsrvAdl2-tQRJVQdWpohnHzTTzsKHExg-wsNssB4FJfb9TapdQOd4FJb8pNbU6yhS3cR8a9F5-qycYaqvYb5H5AB06Yb5QEzC-uJeefAoRydO47dCplgzM4vqwvtejyihct9gECfBG8brjninBlXMBJJ8zTcMahbqs8EWHkYsDGcBoeSjB8I0gujykR7L7xjAaNIXNedqwPNkXYs_uRbJ8UQvyQcZWDLpNvCPf82TgB5Da0QyLqt5DTqUVb147hattkcUPG4wTUpCt-s-D-EpUAqBw6ccXfNZ6_wdYitL6qPdo6U5lc87GnPtSo-Zrd6HGlTO2be5vu7TU69E-5FuNIgqMWnyBeQlgj_5p3bYvvKPVdOAjGLDZ3b6T6m_ILhwUrVgec0hkiYqYeVrOBF_KtAoVcmA1RsAVt2xoUbmX_juPMN73srP_F6z6fGSqIr2JLaAaLvPE_bgW1RpXnkiJ27uv5ScFeVGepElMuKcxP_pk10zilbNEwvVpmgJnfKhwd1fI49QVUBEpfjB90e3-YdzfKVBgY6rCZ2L8aFferi9cIhILJVw_eAnPi6sCHrJHh7DbKRmcdfMRsVN6MLnfw9t85hnSN0J11foKTeCV__40JtsLZ72kWiTxKH7dNv8OcAtAKzf_G9n_rYizOgUAGPawTjy2tfRRgD4r4ov__rX7CynjTZkP-LcTe5Vf98GikGWZzglUtigoIwLpaO8WjSXZQd-uBfgY2hBiLhY7XRWHi_GRxyVRC0TOINvtY_J2wvHPQw0Nn9tUigV2tR1HOeE1EvSjptCA9y1eekZ7ka4fdKWGvO34VQIUvRDuffaMEHByRKK3zdflFF5-sdQfVYZ6am8yC-OX6OYRIleHNzjs8GezxqmKxi3qTO5PF56cgQ5KFWVO8poV8LbAQ2qnIBAgF0XLApWyb31v2WreYqwLip97H_EZWSlVCn5KWNNPkdwfgBtv6SyydRx0Cc0mmeRCBIs5Kb2uWF1fjTAWFVmdTTR1ar73ilKa4fkaqBLdLB1FIZ0maa774ixZ09vKugHY9UYeuOxJ-SAkxFXl-2nl2aOuTWxD3X0kHYQoC0-QueJQkU5Jn6HCO7Zy2nFv_D5ZRq0EC3dtjdS8j7N7_Wfw6C-kf4jZJHl9e--7p2MEGwNFFDxCNueRjvi7MFaek80xZYWw_dIvkdOnWw1M8NDPVd3gH__yaXYjvPq_N6aZAIN5mLGqJ8hSQr_uOVcP59fwlFLE8ogb3Alk2WWtm-ssLOK3NFWybqugDpZTloiEE5uHmdX6psJqESYERgAFv_a_1O7rBuRm19dROMsOz2NhCz4xujDYXnjeBdLv8UA4Z3pmRec_0LqBXqt1TFmytjeXoV9pMR9shNjX7RCeqqPQoo9r59izIS79q5mpYhKybxVdOGNOUwa5dE7jNKi29pGVfFaOANQAnRTHvxYQE621uaGJGaUu1s2KYrvvUG6CXD4lmzMT3EnRLvZQbhQojjBR4_eHcyKnUhv2b-7EQIaBZS-tK_5lcyOInCfFtjkNe5SilAlXWqpLX_C3lcsDGOZBLQR5y-gNdXoe2vTL1qDZ_Ez1Qvq9Hp7lZ1ak6btrx2hmLrlFreMuyC0KxH6UuS_6wnhtKFK79fdOSS1fXwrW1rvkhZELfIthXGtVwyfk8-HxpMZLmG00lpKUvZCGQ916qqSPuJcBIGV0VmTX1vW5qjAHyTEEFEOfGzvBGuaaI8_Xv_n2tzsM6ZAP5qtj1oKK485ISQUrpMb6-sM6pRDuvyYY80tWZ9H239EKRNc2B4fN4vJ1vzxw68OMPAEMqf47Rh3xa-bSeHsrpo4B_uZqOEqoLDETTp2QJjOnQXHfl18rcwVLMBtTZ7yiQnAAo2lgHs_fuqAYupWb7E5JYD9wAeA9Gg3W2G8ZJVKHK4cTFrAnj1Uft1s_xEtgRx8V76Ay2TQkJiZ9-aknFNqhVdNqVWlTQm9vezByGNidX2E1FNZD9X79Q8oGOs5_Jldi1WQkut5iRBZnPz116XIBpRIUm17v_VYJy4szS7qdWgRJwhL_D8spCumPFdiCbl1rutMqOLGaSExCl44pn_tVVf3tVaEQ0ZlxnsP_qEezZPEZuEFtiSHmD1ZFY8IbbM4xMe1FoaqELzL_156SVYQ4pb-JNx9shgo7XT4RwmEbM-QigtYB7LEeQJHB_efmcjZU9yClIr5QOV8n5z1uqEmt1qxq_ko3BJpEo2Lq0l2l3OE_z-1KEJV9izfz6m2WZsBuqZbaPq6enpD2jZs4lW1w6F7vjTL3p4_g7Hk3pjztccld7pTbxMbiozZC22UN1-6el6HHcpTMz4nZl2doFc9iOFFTFQBOhoGDz3QCQMkqgDnu6LELJh25Blf5KoyjPoNmMqmS9e2z-z2wTVkZkdLitOXu8TlRIMgcEEqPn-q5Mt9Fuk4hnQY7sbIY-DTgLuM5ovmsqUxqTEuFCDER1jvBS9wg2CVniYidn-rGmmhuv33rUAt488hJhZtyTvPpEIUxCK-Tyjz3CFOEz2oCVpU93yYx9vkgfwmDkjD92CF7DOj6-KaUc559FhmbuNruaWq1zN9j8TqinOoIto9HPOHf6dpjP-ay_5n1gu53jCie66Mqm-q1hJ9yXXoWh0KeMJBj_ySJICNALHBGwK1HcTiLVMMF_Dzb7JcIajMF_SjrKdyO9HD_FbPGlHX-AioJJInWGJOw4QAww2SC-feBSxmA__zsVrLRo_P4ln8A32AOVqif-OvuzbrJ9rR7nGL0JRinXYy0Xo7Upu9aw2WGpkV5Sn8a3w2_MJYPRd-LmJQE3GUiZxXGrmxIpkIv6fyXstSVyV91uOtuBdpeikQr78D3eYw89bSYb1eDBBfxQyL_9U5S6cUjP9rXykoc4W6P5aV54fZfbwLNcUkN4Jvbb0UkLoNPOYcUI7N4e20PeT8FnKCDxZ8LhMLvtDX-6FocshR7vPfAOS1Hl_IdWoje1mSjYANA== - id: rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d + - encrypted_content: gAAAAABowwGSxRRbJh4Dp3HLB-6xsw2t1Jfi-_RzFOWR1LtCb5GDxs4kENgmJ1kUBpCSPgPVraYxGbU2jkka2kfXB029QxTC5kmrL1jsnt-u8zcYKlDyvfvj9gAiIz70dNhcoRKhLRnq3L-FJt0Bn2A0Eak4dNrRBcAqhluAgF_OVSsRzcTwOcvP4wI8NnlevymytiKOJmMjDI4nVvxIJSmkovr0m-oljsnRcTXRoUq3uoa-0P07RqxBQwgnd4N8e_4l1uQgFRgHoDx0H_64l__m2k1RkENZoQDtsvhJWyGs7xt_UgbJQlAkK14G0tZxBEArRllnAe5pnHBBXsSX07SqaNJOQKo4aM-p4Yoxf8pWZVdqQBleHeP2Z2X_G8TYihVFtmQa7dcGwd5rokYeZdEgaJ6_SkIx7X1JUH2OQn9zBGI-itJn6NJDqn99SyRb111KBu5IjdUMjuH2TVbRdfmaB-RDE5tjITFvjensAAQcbe7QPRDdis1U6APiayH45HXgWrGfwopjwOHfgjWRgkVNHRigr9ZRW8V-XnQIBg22ON4fh6j5DDalEsF7cUV8t8sk2xg2JZwjAJ9bPgWTAzQzE-7fVzsPHcFKX7WBz7-6hqbY2Zw6DPTgS3TJjqK4vzF3BJKzwwg-wd3w8hyTknXQVjKVDUWrw1rbZ2DC5QSjS2wa1u7U9xh_UXJSwFvo72gl5Z6pEMEoLWopWCYepAuFewRqsOXnUsUQUGQgYYDZhHihxN0Ju6Z7P3EP53q7wUxBxLuuEZM5eq9cY6NdTBJpXxwXTrzJVJUZW_i4yW250UKjrVx2-XjKQAwCAmbSx9xqwlPmDMVebsEuRtJqkKKFdEbwbpZAH-MHm93WGqi8xSFV7wC0vM9iSEoH2WGFPHgwimEHsDGAUhAxqZsHM8sL_UM4dLhPjSDkcpyAy44UzrscuFKGlL5Npolx74KzHm5kIxOeECTklmS1BOE8bnyvpoq003CE97xNP1ku-ihYUSRA6Le4ejKi_-sqOPY1FGuoUMx4LQzrFERtPjFQzwArbIGzELiMbjCUykThW9p1-c-F040AZfclH3ikt6ZuBtFjcpfJg74dkGtoVkkqcsyJ46H9FLEP03ZqdTAAeMbKsfBLQqdEcBplUiKqQz0TNd52GPs_7b9-kKNM0YQQkPli-L1Korbj26ffmfGuFE_quXLW6JwVSSBfyfivfAgvvq6UuKZPDuOqgtT3EHbl-ezhq2hgxTCmgUMoKbBgJJE4pDjM7FSt6_21TahNpB8QBKJ5-yzpc5O75EQjvsb0RVAzsFJjyxU1XyQwq-3Rhs2tgm5HF0WTrH3NUbn9HsZjoUgladb9bqX2SNT1mFnj5odHCiZRo9KzQaBfruRvcelXeNWGqlNz9Mdrw_9d6hNrv61HzKdS7R9QRdVZeik4TXc_UehTyzH1YpxiiLYmLW1kiGIZlgVtukoraXQ4gPvOZ9INObyZt1UF8HOBgy06BfJivwdJ48R-w_dwIIiuxhAvftmuttDL1KUXzfp41ZK3gmrFtioxjCFXSLTsnNW7BqOsphsFfK0H_a6c52Xv_ph1cSXQqs-uLGvweSD-BDovacyi3hZjHMMdwU4tRnWfSrIjc1pXCb8s7I7w87AxsBpe1fORlMevAaod9bUEDSe9RUaZCIpxS2ahhfHBVpLj41PKVGoq5fvuSotROIQ06-iSpBVnzMrOQOVEIaLKZkFtWtpnaYuIUP14aJFszmh31QYMj_LF1Xd8v6MOCqCiFH6Wxcq5pII2cQbhATOK8Zg8SjucmJ-TjWzrPG5rV9K0-nx42zLTjpIwX8mmT5wX-YUYGz24Dr3Okm2pp3iMBiLjgJzvmELLfXQEpVx4IFzyhFdQ2t_fOtu9kibR_CoU-krZ3yVq_WOYuJMmZz_CXaoPCPwdwPql_xeLbicbDk67SPfGapMeF-TsrqqqLld3ubUF62EtOPJNcNNYNlWmummoIqhasaxkXsPHLM19YJAhlGL9sWIlxJp68x3jXTEqzZwUDa2IH19G9Sv8rXFhLWKdF7KIEmXm-fhshWqbXlja-YDVteXtWmgIl3K3V-YCzucBfCgGIZA6rOryokw-O3qASHdu1Jjk7ne0Un_Did4u8ISBaMDJxCSpbANo_ufjaGuo1U0N3xbOsYBVGSKAGP_mjLISErGh59SDa4FRC5qbFXQiiARPKGyHycOLOJvnFVh82qD2zKB-zxBr-AtQFzXTE887W4ZoC0hGUHPEVfq_EduLi3jU4FRJjbNQ2D28Rd5DaU2Pp9v_fbfS48c0xj2AUJTkI3a6GvW83DzdEQXCCf3zIQgMnToMzab50KU9t4cD7smF4zljz6aPAMg4hxi5R2ApWrvJYPwOZrjb7BEsgKshk8Z4JF_ancu0Fu6XCFmXUmsNiOp_mGQmACPzu3GbNnFGjCz7aPwm3GH0Si88T3hfdD4GUYtWXpddkCon4Tgcp6RqKqzWCKNflLAIa1tULyPs4GeEHuj2eC8P4FDbTVyLp_ZP3nj0EVpvz4IZkNfqywq_IfVEro1f_45uIrOTwRa81orRCUTj1CkPABMnsLRplhQg4fyaQZRSDbrCJQzKnHpOcoGikRXUvyDqkF_9bj4DQyjbm8mt-eSQfOv0ahD90C2iheqSsgS3-vYJZrWHhnGo9gfDE7-mgV_rxt1tcHoVinFil2N0SGPf_BHXhQ9mtr2GFy-J5lTXdz_8431caBCRz1TtcRCZQ8Y3t95shVbtRl26QTLIElF65QcnFljLj5n2JxVcm_yrzqBLxPoQd3pm-sYsKRQo3Lb74Tv158FSTI2KZXFkceNbbmZlDjOxvtQbKCW7XPpuL53HIoRkK9YWa9lAUxP3WyhSPC33hUfvoo8A0WXDYeU87HEB5A_Xtd71ipUfZT_a2TkcCAksXbhn0wfUqCgJKIwzCTo3k1Sib6ijn4_fO1Fl9C6I04SDFoIvBS1fADklWoOWywLKkkbHeGDDnpF_ziibiYxLtEqlXQWLrrb369trrB0poYTDqksbUAOisSu2W6dey3CW_lTtX0SukuRNcoKQBXcvP6ur4d-WvssFaR91dPp_KBrHtvtWwpg2HK_qdD2b6dn04uRqSZ-cRfWebPl9v7lX7ZxYxttztoRSdGeBmJ36DddXZEqKlMKqvSDRNhJlzqtHZlvvm6R0cP8BKLk1JE3yAkXXOCNxa-D0fUEF0GW0Kcig35v7eVtvd5Tzf0r7uAJAXkNVXsn3DtOIdozz4eifU8CqMOkeGNOdv46Su8KdoaxyG6n2L1SZnl5q4pcce1gLhJ6k_pqrEgrEILGwK1XcA7cc2eBxcA-b1ROH1_SaqBuuAn_Nr-Bk_8lGWrl_dVVUYfTottPLtglwSyrR6Dd3yRf1GExHJ5xspYQVzP9EdMf1LebduukhvI6OpdjEH36MVUEcyW7QyJ9IdBKAdkEidVadqAF3Y2WUYl742NyeiRX9WIluriTj-qGbLveIjljUOWAanyq6C9QU8BRe_AGRnjwhxdHIyRjGlquJ2uFEWnOHWFk3tOth-oOoXfoNAjZt6ehUlERmz28Vjywf2C4GJ2J8oObKHPYifJJxG4zzDsviedU30x_9pGucpwgLPnJezQO6sVMGrBHET-1P85Hpgjrw6vLg4PtKo-YimzSK0252s3W9CESL12G-Q69AxgFX-nbpASbSMu-ZcaQonIj7bYQzkpbeY6eiHaKn2Jnnxv9NhG4_F1XGM082p2GsgRbQ3Spnr98TPkH2kJN9V-L3v2q-gcBsjR0JNEd_B4RBOR8jva4YCwSTT3p4a2h8ekbGlXx6HA_vy023Ms6tXMGF9WZVhb_5jPx1a6D9Shzze-q9PqHj2rM84Xph3pKgXT7CNr7pHrhxF_KBcm_T3RfJgkD9-ylqVfzdfhcu-n51Hn_VgnVHjPlgZswNe91oYIplTIShSGC_7-P6YuCsi1dgLI811ZHVJ_Kp75RCIwojLZPAItWLWAxsqsVdmeae_-jQGp6NDSvKSCfN-XKv8lChX8vELfYxo7zhssZ0Q0wg1ZJi6u_4rIx_dDLKUylLp5-tyuO7OZVgJ1kDugJl_gYbcOFLXqWoh0kyCIkPaov9LA3j0ZUgfgrV0-B1dNob2yvHMhYIRovKjioydx3bLl6St7RbJxJTA0eC_3GMKQM0wt75vOVrKD64c6CP9chnR5W6nD2FrTQnmeOCF4g5SrwV5Y3blBB54d9lwXDUlcjAq3ScsyEdPzlsXXj3IFc_O22KguBrZ5SZrc5D35vp0bZ0LhkhhU3eIie5jVPtyDTsTK2fQyQgeBdcoICcUdrMIpiaq9n9DL-RD5vgzG1PsaZ8g58psSp5eqFF4ELXuMw7uw_airSzTgtpKV_i0I7J_lUf0hejuEUO5eaGig-SvGS75MUxIn21su1IgVC4PVOv9a5ZseBjmcm0kbR2fumBygCMV1bfv1M1Lq42O6IWaXSa92xVvupOpRx4kwBseoYUH_lJ1dhxBT2MFokijKYxBF5bAYDSs0zw6VA3rrG86D41DMewF0H0-cnjFNyzWQe_2m-ebqezigFCl_Ov5ikpRI8wAJJ75tHSFXixJXCZWfYQoUkgNrgncP0VOVBBPWIUcBz64BOJ4SyieA_vK1lTBiVtINNftk02SR4kH0fTOvdYYnB8nd7yBRVF2oMDCHpmcTnh91aGzBxWkjdC-3vTCmRE-oirWPdKd1hpxf5cKn88VrvApNpUAzuaL00chB1XOipzOW8qWRifjqak0P0-CztV5kbSrFehKA3U1lbtClgOA6FtzNxulREJjPgVEPPnFLCchmELktCk-M5S5ED6IAv_NygkL5PaIz4ap9JE2Sen0OJ9q3IG6nG4GZw8XJT-fIvVLaFexUZv2F46x04GfzI43CParyRS6kIrjHynU53r9ODslOqnop1B51uxk33Az7TB89zfTPsF4doPiqGkB1nJhWplfm2WLuNZOEGczgr65dF-r_nWBnfR7y3DsPaqqeLri7ysG89XTvMZTCRX9-54NT2k7HwwFO-GFD6gZBizkt0gsmTnFIxp7IGOx1MI86szyLC07Pe2mGICY83SPealOF_gO_qga4z2SAU4YjQeXr6s7ouvDgrCh-DP8SB0K-6qHKT0qUiiWfCX6d-S-faXIsMtgYAkCLZm8hP2Z3CAF9Jxzz9qhQHCVnkKK-2DaTzL26_UIuryYhnUhLP1oYV7ICzF_PD6TvzQVxnIf1fCUJhlQ4GwnHVQQsUUDoNg2e2t3jaB6vP5My9q6XZVZPraBJJf4Fp0C3rKG6YgXFDluKdpAgQqZT7Q97dOi5T_YHkwrR9NFC2SH5p_ZjbQY3REzIhPFpIco6v2h3-B8U6vtEMNic7AjljIKidpbQUZ9fCq3oQFU_2Q5UFUEB-GoekC4jZX4zxYNYg2mEDAHzksGPdXF0bf4s5nr_vRlXVQPijC02uav0QuNaNcBdHTN7uEVyfLTfxXbdHv1e7Hl6-HeBLMtacODpJTnp7mZKK0XxUTxMLFC5kihM_9hSpQHJ0WS9oH2E7SW7bscq8_fzbDQmEPxDbfsAjx83h6fJpzviHSzIDysdUONv50phqKN6qqAJ_dItPc2yhtxsiigmNe-8Dnejf8ExPw-z5bPjpZQB-jgAZ9-66YGH6fkwzpzM8IK5Xt9DwqKcWhGUn3Vr6ZBiriYHKoQNzvToUoYKlzNI4FjPJL66vDRntxrLPbAwmX5092L_QahpLobCcRTgJXdm6Oz4w6CVeF3VdZf1B_Mltya9QsAc4QYs_p2Q4YRbdG2QATAnxGneEdB9KK121muAxzLXeGl5o-e9WesbHQ0GnbbPGfalorI-_eNVKzRgTjE1FJ7KDVn9d0jiPZfvB8xlR5WSdlqV_PY-pRnvv7dDkHHBUTPkYA0e_l0KlJ1krQVYXQXDkYaFxnqSs5ei9diTPRfiCLCWntxngssAimmW9eTJUZbxuCmqkzBiItjC6zF39ZUF3RibxyHCHf9fZPTmaWhiPNgifgJHxxb_ZZgOo3VnKppLmIPQjnGtofqyS6kht5RDx0joPXjGhz1gJN_Xju1TeZd0lx6PgXmr2jWnNqnOOuM1BfnH1S5M5uHNNf9VnC8_vNR1RsvrBUxfEgkGZXHlDL8JO-HvAxY1Y5pDOubaIdbxSmbB2w8Lg1cuJ7NQdbBBn271A-qMKFnwYexUH1iz4GiHYDSHhgoEa6L4apwrWYw8Kwt2fLf3BaRojbHx1ocXpFXADm2QSiOczzQ-zoyrRVDqZQZ3u1LBu3m-aVGVPHkOW3_xzqyoh7K_pAMlsgZCV_5zIBvPT_alYN-jbRvAigHPXiPYZTZSjcgPKGEx4TSpLUZ1wJnhvdBBcqX5ROv_WqxQaQUaMz2vzLwlKEJOW7HjxKOCD6Qpv1W_11knF77VyZL-NZ6EsjQm9m49nxpr1FjnvajyNBeFg6V6mWyO1__x5UV4X3wzTf6oQuO06h7HUCwTgZ6N2TdZYcTaG3dTtiwuke5B5UgbtEM8rDVri_LrFywsknYTzDNLZCpmFRGxoNV5bdHW3L4cClemYcuGvvx2QuMFiMUi5f2QCsIZifF_WsWECH7L1JbF-18lGOHFM0CX5-LhsMg-uPpJiJ8pPQuPfFilcAUhxiQodwKUp1R5vwAYEpJHPEVDQgNAvkVSk4mI9v14yPG6qhrD1vt3PlZsPaBPoEs8o2MDefF9Bg5lJqKz2PGTD-2SMP64J_WJ7xM7z1xrpjyhmiLTrK_ocwC62OwfIjfDAS-QqrQkJZANMw5LJxlPijKglE6TBRnQJlj9uDYk618PzxNkh56aCHBFTK9L8BdwbjTlJZGBuRJY7uE8mKoCaWFcAY7ekSi0Bvn_g_lW4VQtm0HIK_n9oohJnDKPpE-AMI8p5xDmARCBCzdlVuFwPi7To8VIKVT7fociARozF_rv6bJW9S5Ugq_Wp2C5U73CFZ4OiZgOIeCQq9ooWH4Biegphm3XHYyKOhdC7jRqXJrffT-lnJvlcxt96c8XcNIMYpPHXnpQ6C2slMvWn50FlW8tgpL7yQ0nlmTxScaVzyS0eScTFJz59omc2eKK9wofP49wtoSRiStqDeK-g4qXa1JQQjuOkUI0IwXkjyoT2FLd_ZvRR4giv5rKiub8voXhNgJYLn074u3DA80iptE9xVbV6_2klP9wr7gQIQgrVJ6s9_oKKu8UmD9TT-LSa0xHPXesdiv40gAKu8T6A4444fVkg6H6osVlA9osiRxrBrTjTkSzSJl6WBPWAIYIn5yjbaLiaRrsRQ3MalTPrcQDET1JUqaMUz8fLCyZwX5fkiGyFoYmDPbTpMg8uzEr6dGniILg9OO1snKiOeU_9XB5xZE0RnVS5fKkpkgNWESI8bIgZaf-sFL6p7ZO30sw_aZhkdRttx0jGsSHuPOaNqu-lCwrVvU1j_K3yrUkIriTRF5napCw4kYac0Dc-BezjQA4x0O7P2ggtZPG4vS-YObmFPOx8mTEot5-c0v3XQWAwThbIB7R1-Jn5b0NB2D4bCsY3m7CjqbsrMuHNkTqxeR5cB4-DzJZqBersjAexxZ8d_AOH4MxEwQ1OM9_IFixQ3BSxzq4_j4KJiM2lXK_L9IRtHZhkTckrJkiQP2FjJAuykOmPz6qOKdT4v1bYkI3Uqyzbhea5GjFTCB79iHJL2h2t2GP9Hu6j2LcyCAO3IGBaq0g7e_-41cS9tUAZVkqAhDph6sQIaGL5QrFuHAKDO0g1qq_0_Y1J9ROfii7DKfMe6r4uZuh3Vo4SnAC9Mte1OOIArobkr6zmP0JwspfQmcPNrpQxZ0Aw6Jm9qv6rEtBhp0tXDde9glsbXubBF_PZR7GSpxTKJBxwMtVvXK1PhksAe3wkgzais_Gr4lbNi2k-kQOsuRJka84qr2TbqrWIR9WpdMB-eTd5Ohb4s5CUj7k0GP5PksHFUGl4uVlhIk_fnxmYNxRFGW-aEOuByjKA__qxBOu76lJFe8ObwEf3t-ZtYFBOp_St4kX1NQeCVrV8CbT_kuaQ6pbuG86VyfyoZJzMsCtzw5gxA3nFqq7GtDw70Sl-il9d0xJt60sU2E9b_r_WHvBEXdvZPbhzJxQcJbUDZ0keEiy5NRrCfVFxr1s6a3EhPA4JdR6APe-rFt4n7wCl6A3rKO6S7dbXZiU7CI777A8vEtJwDdtDuLn1-2gLaUEWBCbTukZvuAWigGvZMCN-B5apHelQ4EqdH91vjDapXhGFuC-5vOCvPzo2S9dc0wz8fR1scb7naE_YJmDeqonL-NsaAun2drdY4Qo52tti7dN7Bf1N_07vPk1LU4WpQZiW3xjKDbXYt9PhD7vxjWapdmiqfpuvRHxnWlM4HNzapkkW_HbWtWYBawRLG10DoYs3eXAQCmZ8CgoZIytpFDMwS6hJ_-NDr8AfLqszAeiY17MVa8D_Ntn-NFMuE7l3L5YWF60temAbI2FZm2ub-MyQB1PSaCsOI_uNjlHlLVatmfHB9MoufDQV_hA4k94pxu97cGHl34rJYdG7J2zXa7_YBzN0nOpelhP3vtiSfnpImWmhzQR5LA31bTuQ6RtRGEzEbEYmaYlTbNCX0f-dmLzqB4CiNCi6AFFioOsyYMsEae7oigBc1ytFGmPTa_oK2eDBMa96b-zl_vFsXhF-x0e4FhHj4V7DfwwSgLKACvxg4bfdqnhnLK_dqWo4ye-Zje-bjJodzpGPgnaPLFJx-GsYWqD78jd5HuR4gDRSTvPhZV3hbTpSMvGWKT56mjfGy38wo09cZC_id1PmNrdrJHbxH2qhHps6AZGlIDbyaxItwoWr9a7n6y258mO6TgiTd38HdS9pJAeQz4stOWvBFu3Cwz9dUrDRleTtsv4OarItOaqpeekqflr9BdZT0W3Sy685WU1M5bAJXZ7ILY1TFXX8spnU4DDAQ2kGSaBSoeP_Tej3lKdiAP3rRYZghnKVQpm-kYxeKyKPS4NCFtoo3nwnOy2iLSst2LZNOzzfuj786njj8_1mvA2b18ndYOupbleU-7UCCLz1YE9Mh1aSfxYqsouudw7HT3cadzGXZETRvWXytFOAa15eC6aBVGWlQbj5jZS0155b31lYYayHsve-rmEe2TWyf9qcSqStjGXY5Ui_x80Gnv--M9qb8-6gAQ_iNH4gnevT3sna16565NFg8TkskCE2OG2pRePtnodpH6-ha53GUt70mCjGKqz1gyNqGbkqwJCax6FD8l--ncuyHtolzVJ0EVhxVSJtpsI-ZOPNJjip8D3JGNRNE-TLpfWs1-VckZ6_egCzdAKIx3e8hnH-C_ryNfWyw6Ix_kQuqLQc25rmhFhURLCohWiNChikWW4NzIhFQWW-TmHsPJP0m-KWcTYZ5tNaWnPPvD1QC4lMyKy2hQT5SUqb95X8FujupZ0MGB1K7CGCo83pSIHTHTkcfbpGao9lNypO70mIDzmWnMNP9H7VzeMdIlQjWJ07dsFxLTBjCGMC0EeOsUzlC9orFkeSKExtGYjf_mvBMzxsXhBVdFOwc1a-GHPePe8BEAiqjogtNqQyGOn6Vjq_bZi1iJj5hXWqaMHU4Honc956m5yskToRfLvV-KfyoK91PZXPRlrXWesxwj_heQQIpingaZDcu-t7_4dNwaNE6iOl7n_f5ZJSTcNMcMtPEO4KSsfNr4Tw_EsBQ3WxdJHhvbqghvQdoS9nauhGjSvivkPYLFpmePab0SidDonE0ZDwZgcafyLKd5gEdemoGg2W0rmxiX0PO9rvScKPTAE7P67nuMVX8_7EsEgX8imlhDbgbnBeg8QWoWX72eboq9pFyGaVHOP5K7MALdeHUwlnr7Je8MZenBXN_EiA9MzVKet3sF2rCTg5Btscr4bgyz5ttFAlbR6ABqFn6B39vHEgxKwGbeqkztSpY19jqx_Bi4ZrRzz1MjfvItU8BOtwGUluMVL9hAwNEQx6_HZDu0OzZIfDBIUnCS_8k + id: rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1 summary: - - text: "**Planning updates for the poem**\n\nI need to use the planning tool, updating as we make progress. First, - I’ll draft a plan to construct a poem with 12 lines while meeting specific constraints. I'll ensure the line-initial - letters match the SAMIRA/DAWOOD pattern. \n\nFollowing that, I should use the update_plan tool twice: first for - the initial plan and then again upon completion to note that it’s done. I think I’ll need to blend these updates - with the poem outputs to maintain a clear flow!" + - text: |- + **Creating a poem with acrostics** + + I’m working on producing a 12-line poem where the odd lines spell "SAMIRA" and the even lines spell "DAWOOD." Wait, I realize that I need to focus on the first letters of each line too—those should correspond to the letters of each acrostic. So every line must not only express something but also have the initials of each word form the name of a capital city. I’ll need to think carefully about my word choices! + type: summary_text + - text: |- + **Selecting capitals for the poem** + + I'm thinking about using straightforward capital city names to help with the poem. For instance, I could start with "Seoul" for line one, which would have words starting with S, E, O, U, and L. For line two, I’ll go with "Doha," which is simple and gives me the letters D, O, H, A. Line three can start with A, and I think I'll pick "Athens" for that, giving me a nice five-letter word to work with. This should fit well together! + type: summary_text + - text: |- + **Choosing capitals for the poem lines** + + For line four, I need a word starting with A to match the second letter of "DAWOOD." I could use "Apia," "Asmara," or even "Athens" again, but I’ll choose "Apia" for variety. Line five should start with M, so I’m considering options like "Moscow" or "Madrid," and I think I will go with "Moscow." Line six requires W, and I’ll pick "Warsaw." For line seven, I’m looking at "Islamabad," which works perfectly. Finally, line eight can start with O, and I’m leaning toward "Ottawa" since it has six letters and fits nicely! + type: summary_text + - text: |- + **Finalizing the poem structure** + + For line nine, I’ll start with R and choose "Rabat," which gives me a solid five letters. Line ten needs to start with O, so using "Oslo" again works, even if it repeats. Line eleven can begin with A, and "Abuja" fits perfectly. For line twelve, I’m selecting "Dodoma." Now, I need to ensure that each line’s words not only have the correct initials but also create a poetic flow. For the first line, I came up with "Silken embers orbit under lanterns," which captures the essence beautifully! type: summary_text - text: |- - **Updating the plan and progress** + **Crafting the poem and updating the plan** - I can make two tool calls before the final output: one for the initial plan and another to note that execution is completed. It makes sense to do these calls back-to-back in the commentary section. The first will be a succinct update of the plan steps, and then the second will detail the progress, such as whether I've selected capitals per line, constructed the lines, verified the acrostics, and delivered the poem. That should keep everything clear! + I’ve crafted nice lines for the poem! Starting with "Silken embers orbit under lanterns" for Seoul works well. Then I have "Desert omens hover above" for Doha, and "Ancient thoughts hum, echoing night songs" for Athens. Each line follows the acrostic rules, matching capitals accurately. I’m also using "Dawn opens doorways, offering meadows anew" for Dodoma and ensuring every capital's initials are correct. Now, I’ll make sure to call the update_plan tool after I write the poem to document my process! type: summary_text type: reasoning - - arguments: '{"plan":"Plan:\n1) Map 12 lines to required initial letters: odd lines -> S A M I R A; even lines -> D - A W O O D.\n2) For each line, choose a world capital whose name begins with the required initial.\n3) Compose each - line so that the first letters of its words, in order, spell that chosen capital exactly.\n4) Keep imagery coherent - so the poem reads fluidly while meeting all acrostic constraints.\n5) Double-check both acrostics: (a) line-initial - letters form SAMIRA/DAWOOD; (b) per-line word-initials form the intended capitals.\n6) Deliver the 12-line poem."}' - call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 - id: fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d + - arguments: '{"plan":"Plan: 1) Choose 12 capital names whose initial letters for lines match the required acrostics: + odd lines S A M I R A; even lines D A W O O D. 2) For each line, craft a poetic phrase where the first letters of + each word spell the chosen capital. 3) Verify acrostics and capitals alignment. 4) Deliver the 12-line poem. 5) + Final check and update plan as completed."}' + call_id: call_WrCgFeUNTYD3S3yvrY7RFwXM + id: fc_68c3018f9aa88193952ceab700035b3600b441a18c4893c1 name: update_plan status: completed type: function_call @@ -141,10 +154,10 @@ interactions: input_tokens: 124 input_tokens_details: cached_tokens: 0 - output_tokens: 2084 + output_tokens: 2098 output_tokens_details: - reasoning_tokens: 1920 - total_tokens: 2208 + reasoning_tokens: 1984 + total_tokens: 2222 user: null status: code: 200 @@ -158,12 +171,12 @@ interactions: connection: - keep-alive content-length: - - '13627' + - '14388' content-type: - application/json cookie: - - __cf_bm=iCqRne9kyR0PMPNZoyqDn_m2ngQkH4xbcP3MTUR00OM-1757606027-1.0.1.1-pu79HOwukdyQAVqIHfqXjoVPBuQJzgRyQ8q46_Qe3Wa6NoZj10PYGBFokyvM7Rp16lCXe5NHqkJQBNkLpP6V9eQLO1LHKuxn88Ys4BWJQgw; - _cfuvid=u8PIrvroYExp9T0VHno5qv4q0PQq8DaVlLrVzqvcLJU-1757606027848-0.0.1.1-604800000 + - __cf_bm=0ohItI8F1C0U79lE_AY_mD4Za6CY8J_d79_fr_paw_0-1757610386-1.0.1.1-nIx4rJht3.N0l4zv4dOqNjJPXCpUKJgSC.GkO_QDly6KaZempNMZubpWAlEV8MiPbQ7czncwGAo9XDXHdK.Vbz6wXvNYoETVIMINcwuUAPY; + _cfuvid=pHNVYbgb_y.fGg1gE7h2zqWd.3pZ2Tcjw.0xNDQHMJ4-1757610386886-0.0.1.1-604800000 host: - api.openai.com method: POST @@ -171,35 +184,48 @@ interactions: include: - reasoning.encrypted_content input: - - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name “SAMIRA” and the first - letters of the even-numbered lines spell out “DAWOOD.” Additionally, the first letter of each word in every line + - content: Compose a 12-line poem where the first letters of the odd-numbered lines form the name "SAMIRA" and the first + letters of the even-numbered lines spell out "DAWOOD." Additionally, the first letter of each word in every line should create the capital of a country role: user - - encrypted_content: gAAAAABowvCLN7S0x6x3UAgC58RKPu5V7ySQDy1A3899hN_N7bcM2zbKDF_zIh-sAzZdYjJi9p1j7Ai2g4HADZrEOwttVqNdC0xo-SmT34gv2gmTdN-3lDEZuxfoqcyMOSk2VL-r22UBTL2kz0BNlfqj70TXwOMlERaCp-jRCEbBjaVP52RHGuhh40tngqE09fRHBkLIlOPVjZ0sngDNtAgwbix1DRiTDPmwYNnuS3l4iz315FdX4j285xtP_E2_Cyc-hGjp-iukagq5FJC1-5AbO6f2zQCuVVSYJOLP2TKqUjOT09-y8QKlUsqkidM1Qok0xn8kZiI2jaP6_nVwhVnC-x4SDfttlr5oB3UYWAht61YXQheBVBhCAxJ1fYk1kiPxEh3bknoRqpF0uEcxT4NxE-I8jlPqaTI8vhZLYb7S2Gz96rga0R7BmjHf3poQ4EC24GfoZFuOatORjNdKHahjdITVDvajOkiZxbc0_crrQ3n8xoLPMmFeCD3oKlDaKESbeQPet6AQ_V_gjuSz5yNrcodh8hXSiI3snLQAfaYRIpDMljGob9ADEMAFpvKQ3BYff9dU3hjrk-ij_IRJh4XzH6tgUlbuq_w6a4VffHnEy3v0qYUtXoLgBUFzRTl5EW-Yp-5Sel_zoyn8Elsulnevev6PM6AWi6j_NC9oLZfpmbvEu5CrJBSBiuWRymWyEuKrG2HAUng0r878FG94L50BknkSvNK9U9okiftc6zDS3xxL26TDL8G4TRH2c3PWFSpjh5sNmXoQEW9HG9XlG7OsB4uPdGDlKeKCrZ6NBrGaqGGxId45HQTWG8q9eT3sGJtkrMIgkCm0lu1MhxdVD2Xy1Syk2zpKmv48ZqU4QUjiCltcIJAI3h0Slxm-sJG6xWkAKs0OQLpsnnQu-yNYfD6T6ctAOEV3EEy1rdzB9NSz77aM323fl3cv1uwUH-CLdr6Q-4gxD4_HYaSuiuyd_DAvsRrFQcMeISD5x1sGJZkcjD4LAaPNqnAfc4lobugwB_EsdmrhQcPXKu5bilCa_2OhSOyA2iah7T1HT2bwQ9W3xUDSgrA6hVdlqyDW5X_tol5IMfrldKZ_HJnGBSK1BBwySr4EeV0500Xzl8AOOE6p0ocZZcYX2-WUiOVKvDbHYCNCZwH85fDsxNeIEGM_rB_Yi51ZK16u5c7JsAD5qB51nkbZUxiTeQ8ZIZc8taa5FLDIXMkpyiBBwgYQ6_O5k8pmgoIObbVCUYxw-zVC7TR67f2Y7HZ2ZVIhUqxV9L3HsjBOUs8CzESvdKn0DXRm_Ut-Ap-lV0JOfe0f8lC8kPpxDIyIrHjgdlD9T04Z0WkroH9sNANrx9417B0u6Sd8NZLasMJA15hqR3kR19XSZ4_XltQxSvn6lQbJXrjiavhr4TOtmTSQbg8E1zn34P-zBxsQXtiV462uL_V3dWMYY4HcOJYPswIpMQLIl4ziHE4Q7OfJXEuUe15kWZgpBjKdzQ9RF4w8LM1YDLaoonFnuZsc0y3wOdIfYn261Pn5YQ2t8fPDsLrNvEFcUmTpx-qKPmmXQnCkMZA0TdKSvJQ8LK9BAB4DZHycSRDezWlteANKqDD6ADh-hw4YqFdcKtiQ3R-1_6UlvmurfATblITIFUn33m7Wuyu6uVr2jXpOTOyp_HlDPjJdoXJgJqxAgB7wlscZlWoFMhIOz2H32PSSvpSoU4pDY7hX3zloH3Z_g7HIYr0bTeYGIgm17dEWcFuuFrlZ0oBPbRfe8BtfLF5_HmlFuNPIkeTqBTCc6POaN5-cPh09woX_8l2HPDnFTXxEEwnqRTcbDL2NKs_-OnfztHoM__yfaqVfbIZHdkDJ7xVHOapcfs2VU3Fmk16DxtBXsV6Lz6Y6P9CmSPeDTCg3YBneSCAbPQK9TDMjHD7zUMvwLYar7VZ50epVy_vTOrVG4_4B_Rmk_5PU9_SMPS6HLr8SOZeI4QsfehMXPWPJJ8y7TJuKubtZLJm15Lx4fnUtDHmQ154ciRgb8Y5YG33OXjXJhrpMHuBJ703X_E9aaLShSqzvX2RzVUQN1lusP1jGL-P33nuKpZY8GLa3X7lpywwnf2ylTRvhCRJpSNw-OK89sFdA0ahz-e46cKLoQ6bbVoudMe0chlAXanyqCX6N6mhLm3kTVwNRzo6MKYAsN82vdc3_1E2Ui_W-SSROAwLWCa1_-xbBfdMzbFsdLJm9R3fPPU5v94k3P14-NdwYvEmfUbdNttH6MblOLqr-qdtZ1MjcpaVIDLd2hbzlxQMQ8J1rTxyLXiph6KVXS7AH8oQsZwBCSSxOf78k7RBjyXbgh3ZxXcrQ_miCpRPu4tdPtGI6B_uRBU0fLtmaDM9ugNctdgYuyFXYBK0a1SA7v3J-QeOvjNsM0NhV1uha_UnGvwKD7cyVd1yWnJ5Cu7vimeFnHiRscqb-tnfowUyLaR3gUN2qfL9vShyAujARWplIB3nIdoLOCMwwrbBi4EgntWBSj_4Pyc3h64lVUQ8prXOeCSZaPLcr9TL1_kawidWuN8apsFClZv91I60LA2eFp7Bonfr3sJpyCoS_b5o-cZGnTVm9S_mP827XgwoEl_buzVrOVIfBYCe34LfOnYBhy1C6ppeNOuP05sGanYERZ2-Lkm2DT3wKVt1Sx4KTJalqEAY6WnboSLP-CvgPbn3yAb-sx0vRGq6HJGgiZotMCfbaqu7OjpWPt4wnRC0k8mxzIm-ALGfvmlEVxcYG1PG36yP5DbqiOFhATA6cPEMXW5h0rM3c_IQPvqNKJUq0HfYHVefUVSkxFaMpAUMOMAarKO0_TeBkSgNVgno5jzj60Acf9AikZzmEzfYsCEMbitErsVX9RlmYw_x0BoyJNBtG_tzQWyvH5fjQtky9WXcDm_OXPRh7LGwKNg87p_J1WKvBvuNStH9SASPkTL9Ngqbaia8VyKFV4u1yobRw1CzodiNYLm4b96CnGLdh9C5kEE3S4LZfNuihcnk59buK7L3uy8W4J6ASXy3-y8wUQY-_oLv4Ld-2dYKEPMVquhicj-x_uVLcXaI07dEWBmruQNYbgxr5-HK8_AyH1YLvM1UsfJwd5NS5y6vrRa3B0l1B4RY_reUOFq1F3kbQ00pIdvKcuQ7u_y7T_b7neD7k3FrVwWZzWicia8uISZazP_MyKeMD-Bw69MAB06dSw-QAOyYiOPFo1F_QzYPuqdfU0SM59nYIe76_9wnXSly5-axLC0-EVBfiIbSxMiraljnP3EvcEHcKn6pOmBuASPxRjUtMbWQs-DlA-H-RZnThWljq3CgDlcGPx63U1eVW6L5fjmZhzwdXAxT2o8cP8VVSnYTB2lusV7NIY2Vu00aUfQViYgmBN5dsbaO4QQGXSP8ZJpenwob_2uraS9EH_Ft8RsDOjhXVp3dnopntuAaxQcQ9n2PmdRTZzUnnS6dIEb4K0i9hVo_ePxKxpXPKIU1Tg6GpbV9FlDis2FWiPMUfyyJZHIjjM3ygoiiVj7JVtZxxKWVy1nIJremofDnv_8NO2bUeurqYSG0tX6LYYUHBzovBwl6ZkUd0iIFb42aA7ObTpGIy_uM4vdCwu8KXLlV8-2xAI-91U6fcQ11VLLjqclhuotfE0Q0JBmj2Qzf2OpJxcoi-7objNvE4qhSx9FpSvGjq8SkujalSBluGCjstX3IuhJPBoA9K3UBhZfLN4jT34WfJdN2iIymBKm6q-ThSHOQl4XezzuG1yEvXFLgKL6i4oPDmGE5YonJhXImcpyNfuTcybMF78UoqkUgXD8dLEnZYYwazdTdHIajivncXgmb_84Rj4w8VL5HEUODJwDrmCW5U-wL1xIhq40NXz5sw4Q250KpEzEcjiyZMJVVUYkHCNZoNY8UQADLA9QKqn97iRPI_WdwsM06LfYmoWDrZF94QbE1XMQc5LIObu-jrQ3tx7sNbKB3T9WiXgU6btOWj0X4VzrvRpebGzUWa5mId7QOgJPTmwf6I5v8xYGshEihPX7T9bes_wMLKVxoImGkroND6Y0Cm31DDwO3Jrfd8S_uVn_Ps9Brcu7AQYa6TUc0GIOnIAdC1VAzaNO9wbbcihg5M7BOZ5orVdtDVMIRq-nx6KzRC-DUJ1x2M3KcJ2ugqMvvd2bHT8bfpSiV6o1i7wZSBqBSEcwfAI0bOmnsb-TLKkUG-q5JriOYIIXl0M0o2i4xD8Q_nSPoOr9De2KsXPQPvfziV15xMzWjZ4YaPYOoItivOR4FxchdOUg6gSoxPWnJ11_9Ug3XPT7F6mvMMSekufiRzEuLgnk4a40b7Ra-Vu43491ChjolU5WnTb1ezDLuh4srcjPlNsXg1F_9UJzYL77oM0ewQSzndB7ca_pS_mpPG7DvtoH2GCwHzZAwLWKl1wO2NQo3bHZcPhfa0ZFBTz-Ix5OOzZi0AuPtZT5adnicdfqJ3NOm2TWmKb3IBh6RB3_5wi3yzhaWMOcvcW34ITxBQRnq15dBC7R3bq6rabHS6rtk-8YJnlcViU8bEGBZ2E_oyJRRn6Qm3l3DEw5eXViCTN_cVrXlmwzgRn6hNDlVgkgMbPTjFAMlrM_Wra28wbqyp417BICv6r12oaqYkDnVjsPzVb3xrg0fUdKRRSYg8Chx2tNdPXZHFjnQOFx6I3N_QGTclzkkeZY2EblE8BhPS1BEkeseHOHV75N4bfMlWabpiHCVpoLeLeLeUARKg0qYp4o1nm8RZ1z7y85ulRDwePminL4WgjMZVBaeoGEsGV6W8-dbItmRSwl9GqwteyRms_z4GwIoZEOEKcWTcrodewklpR1TgN1UkWUoCIJlezlVRzaqqL6J8IuWiOG2cqS7ZWO6t6-MDPsHdbMNJc5oSgPRmaOv1SDbFAj-PACjfTJzE7VNOAZABtgnq5ZsTNRNiacn41zM3DNp1idzPDgKv2x0lV6Cvenxh-Jr-k5FNbWCjHfQ0fNkGtwtXS7mUlVa5BHXBQZHwXNfrXQvLw1eo3t5SPrwdns8WQJ6bjFlNkDK9fJoFuJFVak62LHtIx1jfa9_8SmZyttUWKQw5OjD8W3A24fSZb3stzQIskFhQxV31HGMAqE7gklN03xealJ4-lVLT7-ziNH-wWV8rvrYIm7a_PmLCr8vLxcDtCyJK9VMOaQy4HtDp0_z5iSkpO0MiqQGyaX1AB8TAVr_vNQK2fWTtya6_1rRggXEY8CZV9aNx_U49SdbR2HSn7oXayD1s7JfbVl4DgTo8EvMcvp18nhVRW-b5cjQr2SxJwB3thOcmv2fVjgKlB0NQYwwRd9AwxwtSOS424Igg4z-Wuy0DXaKm9GKKGQBdxu77ptZROORg46NyMd_P31vJr1NQeJ1S2OFXFhTWwdCF7AWGvmV25x7FE1B8DV94tbF3Fck77CbzGNbMQJ-ej_uN6cQveKhFGrlzvFpVVCQHsSpTM9K7Z7YNmA3efa5QzCbQFy4QzSRRa5_3dJMUcIMTCNNfixxUFr-kvNowMkMiCZ2-hELphTn8P-UfErECZsfUz72oWbWvfuo8KFGzYkFQh2r0p9SPuoI5HHfhPyrVPO07FhsEoGUfU0Z-XmlX4d1y-NcjU8ofLuuljt1MUvYvy_dnAB300N0ePfluQKNlQzQRxHZFNdj1QY-q9CvWo4_o86rr4IE6ALBs0g6WEozFNmFbY_kx94NbCrcV1twi57KlBlRxttTIgO5ugxUWM9FpNqjKGOK9yYP-9UqCCs78C6ownKRxlTzjRYQP-4HtLbqOVh967_kCP3D9r4GiBEZDKw81rZeuQM-vITE_nDpne0ssvW0a6RSenV2rQ1DZl9HeGwrv6XUD9zjuHVW6r7fN_CvSSjQYt4FmghDkgnFJngTUVjrpJ-ubwjsdTNwwHozbtatkxPWJNAaJO1FoeN3sBsQjS_9CBHljM8ctWIFv4ZdCjNuxvQLVOoClBydblt31d2VAxjpmL6-SJ756wt89rHcYPA8fdn7I1YEjcCoGA_gxn6JWVWMO0lX7mx4rz2ooIgCk8FdwG_emyRqnGTnxEXz2bSrHADQ-NldMmF4kMrNq2TNRgxA2zAS-hwbUnQQIw5Z_BInG_l4QqHZsxGN7BYanGxS34-aOgtAV1F2K5uLBnOw1S2KRYk4wAu14k6555zCFsGouz4JbG6Jfw1FgBhgSUSxixVp9yKPnxVgK_dxhqLO7W50DpBdRW4MVAm5kaZ9zEUoq3aEa6TzS-a3YDQBDSZ0E_n0zu7WzqYzA05RUB4halBa24aKOQaTBwLfro5hNr5v-djIE1eXZgIice6dONYQgE1S03xj5QG9Ub6MY2uAJW6_OPdo_GvRxvG4utVNrybylLUwOcOJiXz3lm_jNYNKI0N2mD5W3uPHXnMvcARuebr4BfLJzSccnPgEA8zLdxMIXzEtF6dVEmxWQtbpR_VetTEa9YMpuHG-4bKPU-aluUIeVUqsemj0X9l0Nk2PBIHoliz7eO1Y1xJVxAp6aKdWMbhOiIpMEE00VOLE6nz9xmlmWQbR9W686iY6KMIWZEurfj-amyWQMaxpAgsO2uLdd5ySEUBtPpDNBi6WyZZ2XRaAaAoZ8dn2TbJ6zcyqmiAAWVOuL3pkwfp7HFx0mc4f-g3X4fohKJNeZHpGkGGHooughqLGe4_TvdtioTaSN4rj0TG9JUxV-OI62CNEeQyKa2v7Fcmwb99hvxqJt9G-QswPyAB6V63Q6l7o2OIHpIg-XHxl-f4jsOjDvaPcN_yEYoWwlvi6-7qguovtSLV7Fc1mGXTO9gcTY93ZaGBQVzZ89wcsWXazXTk2AoMayw3Hl2Gyvj0Sl6ESUf48Tz2AK5RltgpjhQPyOoMi_cidBjvrWfBpCyd25kx4dnojq5lfL4tcqcLRHg9PEUmhDQdbuA1Iod_7AFZoKs-V0eF_-aLaTdjkPiCdcUggp6o4JZWLUkQ95v62HzGjn9VEnqJc0v1Jyx96cxwgk_BKuhEJczn0V15CNNGpNgqlwBSNX4su9fQ7qcueBCO2Bj2_e0MHpdg4X1cApZOZzfJDxAkuJpg5v1TUGPm4kcM5QEOjQb62qK4EycdTnRka0yk8eRC6bmenlJJhZKqq5B3Nuw005tW4bW5VNgEbX1JbhQlOa-jHDxPGn2VaQXak7LFiAg-hqJe0-A5skqcerB2YFaBpWELYp6NoUcIz_jabblMrLMNCTVlMbxd3DnfzWJ5WtzF1vEHOT9LReXZW0Vl8hQxFTWkfdIhqixARC66RUcVK0UoM1BJUZrYaaOryWt9nuZWob534I1gxznOy9HSqFMxvnldvNKIS-AOO_rrfVmTTwarVlJUf5BXtkb5fZvp0NfYyclRXoqBUi8QQVDapjlfj5jFle95aSNit8c81_umxCYNKRE7KAOczayyHML4CV0sD7k6d5NrT3g9usfkHlv7iC_NpnL7oiEwlyyDbSM686Xd2wr4HoBfczZ2kPcyE53RIN_XkU2oYbyVuozQb8IE2W40dzleTzM3jfZLkY4tauk6WbsSFWVI8h1teJ8Ysc6cdmBa8qN6uVkKZnyFGOhM_QTlQuUHviIbnwnW91WZLA4OpYfXoKVeOgmWZOyrTZ3_qzpKHjEG9qH4KCd2Snr7YdaKzyIXLeRQvU7tKm8aPeh2W19zO_qWXl1EVlBldHplUS8g2KFH-Uo7VPH4YiZJxSbLx3jd3Toxwn9DnUzNl4Icyzzyr13HZukzP56wJbsVKXoTHoKNoaqeN7VCxB3hMaeh_bRu60hARKLSJa8aZWusmnVItzkH5VSGL1uQq1nv4FFLJa7h_kAsrvAdl2-tQRJVQdWpohnHzTTzsKHExg-wsNssB4FJfb9TapdQOd4FJb8pNbU6yhS3cR8a9F5-qycYaqvYb5H5AB06Yb5QEzC-uJeefAoRydO47dCplgzM4vqwvtejyihct9gECfBG8brjninBlXMBJJ8zTcMahbqs8EWHkYsDGcBoeSjB8I0gujykR7L7xjAaNIXNedqwPNkXYs_uRbJ8UQvyQcZWDLpNvCPf82TgB5Da0QyLqt5DTqUVb147hattkcUPG4wTUpCt-s-D-EpUAqBw6ccXfNZ6_wdYitL6qPdo6U5lc87GnPtSo-Zrd6HGlTO2be5vu7TU69E-5FuNIgqMWnyBeQlgj_5p3bYvvKPVdOAjGLDZ3b6T6m_ILhwUrVgec0hkiYqYeVrOBF_KtAoVcmA1RsAVt2xoUbmX_juPMN73srP_F6z6fGSqIr2JLaAaLvPE_bgW1RpXnkiJ27uv5ScFeVGepElMuKcxP_pk10zilbNEwvVpmgJnfKhwd1fI49QVUBEpfjB90e3-YdzfKVBgY6rCZ2L8aFferi9cIhILJVw_eAnPi6sCHrJHh7DbKRmcdfMRsVN6MLnfw9t85hnSN0J11foKTeCV__40JtsLZ72kWiTxKH7dNv8OcAtAKzf_G9n_rYizOgUAGPawTjy2tfRRgD4r4ov__rX7CynjTZkP-LcTe5Vf98GikGWZzglUtigoIwLpaO8WjSXZQd-uBfgY2hBiLhY7XRWHi_GRxyVRC0TOINvtY_J2wvHPQw0Nn9tUigV2tR1HOeE1EvSjptCA9y1eekZ7ka4fdKWGvO34VQIUvRDuffaMEHByRKK3zdflFF5-sdQfVYZ6am8yC-OX6OYRIleHNzjs8GezxqmKxi3qTO5PF56cgQ5KFWVO8poV8LbAQ2qnIBAgF0XLApWyb31v2WreYqwLip97H_EZWSlVCn5KWNNPkdwfgBtv6SyydRx0Cc0mmeRCBIs5Kb2uWF1fjTAWFVmdTTR1ar73ilKa4fkaqBLdLB1FIZ0maa774ixZ09vKugHY9UYeuOxJ-SAkxFXl-2nl2aOuTWxD3X0kHYQoC0-QueJQkU5Jn6HCO7Zy2nFv_D5ZRq0EC3dtjdS8j7N7_Wfw6C-kf4jZJHl9e--7p2MEGwNFFDxCNueRjvi7MFaek80xZYWw_dIvkdOnWw1M8NDPVd3gH__yaXYjvPq_N6aZAIN5mLGqJ8hSQr_uOVcP59fwlFLE8ogb3Alk2WWtm-ssLOK3NFWybqugDpZTloiEE5uHmdX6psJqESYERgAFv_a_1O7rBuRm19dROMsOz2NhCz4xujDYXnjeBdLv8UA4Z3pmRec_0LqBXqt1TFmytjeXoV9pMR9shNjX7RCeqqPQoo9r59izIS79q5mpYhKybxVdOGNOUwa5dE7jNKi29pGVfFaOANQAnRTHvxYQE621uaGJGaUu1s2KYrvvUG6CXD4lmzMT3EnRLvZQbhQojjBR4_eHcyKnUhv2b-7EQIaBZS-tK_5lcyOInCfFtjkNe5SilAlXWqpLX_C3lcsDGOZBLQR5y-gNdXoe2vTL1qDZ_Ez1Qvq9Hp7lZ1ak6btrx2hmLrlFreMuyC0KxH6UuS_6wnhtKFK79fdOSS1fXwrW1rvkhZELfIthXGtVwyfk8-HxpMZLmG00lpKUvZCGQ916qqSPuJcBIGV0VmTX1vW5qjAHyTEEFEOfGzvBGuaaI8_Xv_n2tzsM6ZAP5qtj1oKK485ISQUrpMb6-sM6pRDuvyYY80tWZ9H239EKRNc2B4fN4vJ1vzxw68OMPAEMqf47Rh3xa-bSeHsrpo4B_uZqOEqoLDETTp2QJjOnQXHfl18rcwVLMBtTZ7yiQnAAo2lgHs_fuqAYupWb7E5JYD9wAeA9Gg3W2G8ZJVKHK4cTFrAnj1Uft1s_xEtgRx8V76Ay2TQkJiZ9-aknFNqhVdNqVWlTQm9vezByGNidX2E1FNZD9X79Q8oGOs5_Jldi1WQkut5iRBZnPz116XIBpRIUm17v_VYJy4szS7qdWgRJwhL_D8spCumPFdiCbl1rutMqOLGaSExCl44pn_tVVf3tVaEQ0ZlxnsP_qEezZPEZuEFtiSHmD1ZFY8IbbM4xMe1FoaqELzL_156SVYQ4pb-JNx9shgo7XT4RwmEbM-QigtYB7LEeQJHB_efmcjZU9yClIr5QOV8n5z1uqEmt1qxq_ko3BJpEo2Lq0l2l3OE_z-1KEJV9izfz6m2WZsBuqZbaPq6enpD2jZs4lW1w6F7vjTL3p4_g7Hk3pjztccld7pTbxMbiozZC22UN1-6el6HHcpTMz4nZl2doFc9iOFFTFQBOhoGDz3QCQMkqgDnu6LELJh25Blf5KoyjPoNmMqmS9e2z-z2wTVkZkdLitOXu8TlRIMgcEEqPn-q5Mt9Fuk4hnQY7sbIY-DTgLuM5ovmsqUxqTEuFCDER1jvBS9wg2CVniYidn-rGmmhuv33rUAt488hJhZtyTvPpEIUxCK-Tyjz3CFOEz2oCVpU93yYx9vkgfwmDkjD92CF7DOj6-KaUc559FhmbuNruaWq1zN9j8TqinOoIto9HPOHf6dpjP-ay_5n1gu53jCie66Mqm-q1hJ9yXXoWh0KeMJBj_ySJICNALHBGwK1HcTiLVMMF_Dzb7JcIajMF_SjrKdyO9HD_FbPGlHX-AioJJInWGJOw4QAww2SC-feBSxmA__zsVrLRo_P4ln8A32AOVqif-OvuzbrJ9rR7nGL0JRinXYy0Xo7Upu9aw2WGpkV5Sn8a3w2_MJYPRd-LmJQE3GUiZxXGrmxIpkIv6fyXstSVyV91uOtuBdpeikQr78D3eYw89bSYb1eDBBfxQyL_9U5S6cUjP9rXykoc4W6P5aV54fZfbwLNcUkN4Jvbb0UkLoNPOYcUI7N4e20PeT8FnKCDxZ8LhMLvtDX-6FocshR7vPfAOS1Hl_IdWoje1mSjYANA== - id: rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d + - encrypted_content: gAAAAABowwGSxRRbJh4Dp3HLB-6xsw2t1Jfi-_RzFOWR1LtCb5GDxs4kENgmJ1kUBpCSPgPVraYxGbU2jkka2kfXB029QxTC5kmrL1jsnt-u8zcYKlDyvfvj9gAiIz70dNhcoRKhLRnq3L-FJt0Bn2A0Eak4dNrRBcAqhluAgF_OVSsRzcTwOcvP4wI8NnlevymytiKOJmMjDI4nVvxIJSmkovr0m-oljsnRcTXRoUq3uoa-0P07RqxBQwgnd4N8e_4l1uQgFRgHoDx0H_64l__m2k1RkENZoQDtsvhJWyGs7xt_UgbJQlAkK14G0tZxBEArRllnAe5pnHBBXsSX07SqaNJOQKo4aM-p4Yoxf8pWZVdqQBleHeP2Z2X_G8TYihVFtmQa7dcGwd5rokYeZdEgaJ6_SkIx7X1JUH2OQn9zBGI-itJn6NJDqn99SyRb111KBu5IjdUMjuH2TVbRdfmaB-RDE5tjITFvjensAAQcbe7QPRDdis1U6APiayH45HXgWrGfwopjwOHfgjWRgkVNHRigr9ZRW8V-XnQIBg22ON4fh6j5DDalEsF7cUV8t8sk2xg2JZwjAJ9bPgWTAzQzE-7fVzsPHcFKX7WBz7-6hqbY2Zw6DPTgS3TJjqK4vzF3BJKzwwg-wd3w8hyTknXQVjKVDUWrw1rbZ2DC5QSjS2wa1u7U9xh_UXJSwFvo72gl5Z6pEMEoLWopWCYepAuFewRqsOXnUsUQUGQgYYDZhHihxN0Ju6Z7P3EP53q7wUxBxLuuEZM5eq9cY6NdTBJpXxwXTrzJVJUZW_i4yW250UKjrVx2-XjKQAwCAmbSx9xqwlPmDMVebsEuRtJqkKKFdEbwbpZAH-MHm93WGqi8xSFV7wC0vM9iSEoH2WGFPHgwimEHsDGAUhAxqZsHM8sL_UM4dLhPjSDkcpyAy44UzrscuFKGlL5Npolx74KzHm5kIxOeECTklmS1BOE8bnyvpoq003CE97xNP1ku-ihYUSRA6Le4ejKi_-sqOPY1FGuoUMx4LQzrFERtPjFQzwArbIGzELiMbjCUykThW9p1-c-F040AZfclH3ikt6ZuBtFjcpfJg74dkGtoVkkqcsyJ46H9FLEP03ZqdTAAeMbKsfBLQqdEcBplUiKqQz0TNd52GPs_7b9-kKNM0YQQkPli-L1Korbj26ffmfGuFE_quXLW6JwVSSBfyfivfAgvvq6UuKZPDuOqgtT3EHbl-ezhq2hgxTCmgUMoKbBgJJE4pDjM7FSt6_21TahNpB8QBKJ5-yzpc5O75EQjvsb0RVAzsFJjyxU1XyQwq-3Rhs2tgm5HF0WTrH3NUbn9HsZjoUgladb9bqX2SNT1mFnj5odHCiZRo9KzQaBfruRvcelXeNWGqlNz9Mdrw_9d6hNrv61HzKdS7R9QRdVZeik4TXc_UehTyzH1YpxiiLYmLW1kiGIZlgVtukoraXQ4gPvOZ9INObyZt1UF8HOBgy06BfJivwdJ48R-w_dwIIiuxhAvftmuttDL1KUXzfp41ZK3gmrFtioxjCFXSLTsnNW7BqOsphsFfK0H_a6c52Xv_ph1cSXQqs-uLGvweSD-BDovacyi3hZjHMMdwU4tRnWfSrIjc1pXCb8s7I7w87AxsBpe1fORlMevAaod9bUEDSe9RUaZCIpxS2ahhfHBVpLj41PKVGoq5fvuSotROIQ06-iSpBVnzMrOQOVEIaLKZkFtWtpnaYuIUP14aJFszmh31QYMj_LF1Xd8v6MOCqCiFH6Wxcq5pII2cQbhATOK8Zg8SjucmJ-TjWzrPG5rV9K0-nx42zLTjpIwX8mmT5wX-YUYGz24Dr3Okm2pp3iMBiLjgJzvmELLfXQEpVx4IFzyhFdQ2t_fOtu9kibR_CoU-krZ3yVq_WOYuJMmZz_CXaoPCPwdwPql_xeLbicbDk67SPfGapMeF-TsrqqqLld3ubUF62EtOPJNcNNYNlWmummoIqhasaxkXsPHLM19YJAhlGL9sWIlxJp68x3jXTEqzZwUDa2IH19G9Sv8rXFhLWKdF7KIEmXm-fhshWqbXlja-YDVteXtWmgIl3K3V-YCzucBfCgGIZA6rOryokw-O3qASHdu1Jjk7ne0Un_Did4u8ISBaMDJxCSpbANo_ufjaGuo1U0N3xbOsYBVGSKAGP_mjLISErGh59SDa4FRC5qbFXQiiARPKGyHycOLOJvnFVh82qD2zKB-zxBr-AtQFzXTE887W4ZoC0hGUHPEVfq_EduLi3jU4FRJjbNQ2D28Rd5DaU2Pp9v_fbfS48c0xj2AUJTkI3a6GvW83DzdEQXCCf3zIQgMnToMzab50KU9t4cD7smF4zljz6aPAMg4hxi5R2ApWrvJYPwOZrjb7BEsgKshk8Z4JF_ancu0Fu6XCFmXUmsNiOp_mGQmACPzu3GbNnFGjCz7aPwm3GH0Si88T3hfdD4GUYtWXpddkCon4Tgcp6RqKqzWCKNflLAIa1tULyPs4GeEHuj2eC8P4FDbTVyLp_ZP3nj0EVpvz4IZkNfqywq_IfVEro1f_45uIrOTwRa81orRCUTj1CkPABMnsLRplhQg4fyaQZRSDbrCJQzKnHpOcoGikRXUvyDqkF_9bj4DQyjbm8mt-eSQfOv0ahD90C2iheqSsgS3-vYJZrWHhnGo9gfDE7-mgV_rxt1tcHoVinFil2N0SGPf_BHXhQ9mtr2GFy-J5lTXdz_8431caBCRz1TtcRCZQ8Y3t95shVbtRl26QTLIElF65QcnFljLj5n2JxVcm_yrzqBLxPoQd3pm-sYsKRQo3Lb74Tv158FSTI2KZXFkceNbbmZlDjOxvtQbKCW7XPpuL53HIoRkK9YWa9lAUxP3WyhSPC33hUfvoo8A0WXDYeU87HEB5A_Xtd71ipUfZT_a2TkcCAksXbhn0wfUqCgJKIwzCTo3k1Sib6ijn4_fO1Fl9C6I04SDFoIvBS1fADklWoOWywLKkkbHeGDDnpF_ziibiYxLtEqlXQWLrrb369trrB0poYTDqksbUAOisSu2W6dey3CW_lTtX0SukuRNcoKQBXcvP6ur4d-WvssFaR91dPp_KBrHtvtWwpg2HK_qdD2b6dn04uRqSZ-cRfWebPl9v7lX7ZxYxttztoRSdGeBmJ36DddXZEqKlMKqvSDRNhJlzqtHZlvvm6R0cP8BKLk1JE3yAkXXOCNxa-D0fUEF0GW0Kcig35v7eVtvd5Tzf0r7uAJAXkNVXsn3DtOIdozz4eifU8CqMOkeGNOdv46Su8KdoaxyG6n2L1SZnl5q4pcce1gLhJ6k_pqrEgrEILGwK1XcA7cc2eBxcA-b1ROH1_SaqBuuAn_Nr-Bk_8lGWrl_dVVUYfTottPLtglwSyrR6Dd3yRf1GExHJ5xspYQVzP9EdMf1LebduukhvI6OpdjEH36MVUEcyW7QyJ9IdBKAdkEidVadqAF3Y2WUYl742NyeiRX9WIluriTj-qGbLveIjljUOWAanyq6C9QU8BRe_AGRnjwhxdHIyRjGlquJ2uFEWnOHWFk3tOth-oOoXfoNAjZt6ehUlERmz28Vjywf2C4GJ2J8oObKHPYifJJxG4zzDsviedU30x_9pGucpwgLPnJezQO6sVMGrBHET-1P85Hpgjrw6vLg4PtKo-YimzSK0252s3W9CESL12G-Q69AxgFX-nbpASbSMu-ZcaQonIj7bYQzkpbeY6eiHaKn2Jnnxv9NhG4_F1XGM082p2GsgRbQ3Spnr98TPkH2kJN9V-L3v2q-gcBsjR0JNEd_B4RBOR8jva4YCwSTT3p4a2h8ekbGlXx6HA_vy023Ms6tXMGF9WZVhb_5jPx1a6D9Shzze-q9PqHj2rM84Xph3pKgXT7CNr7pHrhxF_KBcm_T3RfJgkD9-ylqVfzdfhcu-n51Hn_VgnVHjPlgZswNe91oYIplTIShSGC_7-P6YuCsi1dgLI811ZHVJ_Kp75RCIwojLZPAItWLWAxsqsVdmeae_-jQGp6NDSvKSCfN-XKv8lChX8vELfYxo7zhssZ0Q0wg1ZJi6u_4rIx_dDLKUylLp5-tyuO7OZVgJ1kDugJl_gYbcOFLXqWoh0kyCIkPaov9LA3j0ZUgfgrV0-B1dNob2yvHMhYIRovKjioydx3bLl6St7RbJxJTA0eC_3GMKQM0wt75vOVrKD64c6CP9chnR5W6nD2FrTQnmeOCF4g5SrwV5Y3blBB54d9lwXDUlcjAq3ScsyEdPzlsXXj3IFc_O22KguBrZ5SZrc5D35vp0bZ0LhkhhU3eIie5jVPtyDTsTK2fQyQgeBdcoICcUdrMIpiaq9n9DL-RD5vgzG1PsaZ8g58psSp5eqFF4ELXuMw7uw_airSzTgtpKV_i0I7J_lUf0hejuEUO5eaGig-SvGS75MUxIn21su1IgVC4PVOv9a5ZseBjmcm0kbR2fumBygCMV1bfv1M1Lq42O6IWaXSa92xVvupOpRx4kwBseoYUH_lJ1dhxBT2MFokijKYxBF5bAYDSs0zw6VA3rrG86D41DMewF0H0-cnjFNyzWQe_2m-ebqezigFCl_Ov5ikpRI8wAJJ75tHSFXixJXCZWfYQoUkgNrgncP0VOVBBPWIUcBz64BOJ4SyieA_vK1lTBiVtINNftk02SR4kH0fTOvdYYnB8nd7yBRVF2oMDCHpmcTnh91aGzBxWkjdC-3vTCmRE-oirWPdKd1hpxf5cKn88VrvApNpUAzuaL00chB1XOipzOW8qWRifjqak0P0-CztV5kbSrFehKA3U1lbtClgOA6FtzNxulREJjPgVEPPnFLCchmELktCk-M5S5ED6IAv_NygkL5PaIz4ap9JE2Sen0OJ9q3IG6nG4GZw8XJT-fIvVLaFexUZv2F46x04GfzI43CParyRS6kIrjHynU53r9ODslOqnop1B51uxk33Az7TB89zfTPsF4doPiqGkB1nJhWplfm2WLuNZOEGczgr65dF-r_nWBnfR7y3DsPaqqeLri7ysG89XTvMZTCRX9-54NT2k7HwwFO-GFD6gZBizkt0gsmTnFIxp7IGOx1MI86szyLC07Pe2mGICY83SPealOF_gO_qga4z2SAU4YjQeXr6s7ouvDgrCh-DP8SB0K-6qHKT0qUiiWfCX6d-S-faXIsMtgYAkCLZm8hP2Z3CAF9Jxzz9qhQHCVnkKK-2DaTzL26_UIuryYhnUhLP1oYV7ICzF_PD6TvzQVxnIf1fCUJhlQ4GwnHVQQsUUDoNg2e2t3jaB6vP5My9q6XZVZPraBJJf4Fp0C3rKG6YgXFDluKdpAgQqZT7Q97dOi5T_YHkwrR9NFC2SH5p_ZjbQY3REzIhPFpIco6v2h3-B8U6vtEMNic7AjljIKidpbQUZ9fCq3oQFU_2Q5UFUEB-GoekC4jZX4zxYNYg2mEDAHzksGPdXF0bf4s5nr_vRlXVQPijC02uav0QuNaNcBdHTN7uEVyfLTfxXbdHv1e7Hl6-HeBLMtacODpJTnp7mZKK0XxUTxMLFC5kihM_9hSpQHJ0WS9oH2E7SW7bscq8_fzbDQmEPxDbfsAjx83h6fJpzviHSzIDysdUONv50phqKN6qqAJ_dItPc2yhtxsiigmNe-8Dnejf8ExPw-z5bPjpZQB-jgAZ9-66YGH6fkwzpzM8IK5Xt9DwqKcWhGUn3Vr6ZBiriYHKoQNzvToUoYKlzNI4FjPJL66vDRntxrLPbAwmX5092L_QahpLobCcRTgJXdm6Oz4w6CVeF3VdZf1B_Mltya9QsAc4QYs_p2Q4YRbdG2QATAnxGneEdB9KK121muAxzLXeGl5o-e9WesbHQ0GnbbPGfalorI-_eNVKzRgTjE1FJ7KDVn9d0jiPZfvB8xlR5WSdlqV_PY-pRnvv7dDkHHBUTPkYA0e_l0KlJ1krQVYXQXDkYaFxnqSs5ei9diTPRfiCLCWntxngssAimmW9eTJUZbxuCmqkzBiItjC6zF39ZUF3RibxyHCHf9fZPTmaWhiPNgifgJHxxb_ZZgOo3VnKppLmIPQjnGtofqyS6kht5RDx0joPXjGhz1gJN_Xju1TeZd0lx6PgXmr2jWnNqnOOuM1BfnH1S5M5uHNNf9VnC8_vNR1RsvrBUxfEgkGZXHlDL8JO-HvAxY1Y5pDOubaIdbxSmbB2w8Lg1cuJ7NQdbBBn271A-qMKFnwYexUH1iz4GiHYDSHhgoEa6L4apwrWYw8Kwt2fLf3BaRojbHx1ocXpFXADm2QSiOczzQ-zoyrRVDqZQZ3u1LBu3m-aVGVPHkOW3_xzqyoh7K_pAMlsgZCV_5zIBvPT_alYN-jbRvAigHPXiPYZTZSjcgPKGEx4TSpLUZ1wJnhvdBBcqX5ROv_WqxQaQUaMz2vzLwlKEJOW7HjxKOCD6Qpv1W_11knF77VyZL-NZ6EsjQm9m49nxpr1FjnvajyNBeFg6V6mWyO1__x5UV4X3wzTf6oQuO06h7HUCwTgZ6N2TdZYcTaG3dTtiwuke5B5UgbtEM8rDVri_LrFywsknYTzDNLZCpmFRGxoNV5bdHW3L4cClemYcuGvvx2QuMFiMUi5f2QCsIZifF_WsWECH7L1JbF-18lGOHFM0CX5-LhsMg-uPpJiJ8pPQuPfFilcAUhxiQodwKUp1R5vwAYEpJHPEVDQgNAvkVSk4mI9v14yPG6qhrD1vt3PlZsPaBPoEs8o2MDefF9Bg5lJqKz2PGTD-2SMP64J_WJ7xM7z1xrpjyhmiLTrK_ocwC62OwfIjfDAS-QqrQkJZANMw5LJxlPijKglE6TBRnQJlj9uDYk618PzxNkh56aCHBFTK9L8BdwbjTlJZGBuRJY7uE8mKoCaWFcAY7ekSi0Bvn_g_lW4VQtm0HIK_n9oohJnDKPpE-AMI8p5xDmARCBCzdlVuFwPi7To8VIKVT7fociARozF_rv6bJW9S5Ugq_Wp2C5U73CFZ4OiZgOIeCQq9ooWH4Biegphm3XHYyKOhdC7jRqXJrffT-lnJvlcxt96c8XcNIMYpPHXnpQ6C2slMvWn50FlW8tgpL7yQ0nlmTxScaVzyS0eScTFJz59omc2eKK9wofP49wtoSRiStqDeK-g4qXa1JQQjuOkUI0IwXkjyoT2FLd_ZvRR4giv5rKiub8voXhNgJYLn074u3DA80iptE9xVbV6_2klP9wr7gQIQgrVJ6s9_oKKu8UmD9TT-LSa0xHPXesdiv40gAKu8T6A4444fVkg6H6osVlA9osiRxrBrTjTkSzSJl6WBPWAIYIn5yjbaLiaRrsRQ3MalTPrcQDET1JUqaMUz8fLCyZwX5fkiGyFoYmDPbTpMg8uzEr6dGniILg9OO1snKiOeU_9XB5xZE0RnVS5fKkpkgNWESI8bIgZaf-sFL6p7ZO30sw_aZhkdRttx0jGsSHuPOaNqu-lCwrVvU1j_K3yrUkIriTRF5napCw4kYac0Dc-BezjQA4x0O7P2ggtZPG4vS-YObmFPOx8mTEot5-c0v3XQWAwThbIB7R1-Jn5b0NB2D4bCsY3m7CjqbsrMuHNkTqxeR5cB4-DzJZqBersjAexxZ8d_AOH4MxEwQ1OM9_IFixQ3BSxzq4_j4KJiM2lXK_L9IRtHZhkTckrJkiQP2FjJAuykOmPz6qOKdT4v1bYkI3Uqyzbhea5GjFTCB79iHJL2h2t2GP9Hu6j2LcyCAO3IGBaq0g7e_-41cS9tUAZVkqAhDph6sQIaGL5QrFuHAKDO0g1qq_0_Y1J9ROfii7DKfMe6r4uZuh3Vo4SnAC9Mte1OOIArobkr6zmP0JwspfQmcPNrpQxZ0Aw6Jm9qv6rEtBhp0tXDde9glsbXubBF_PZR7GSpxTKJBxwMtVvXK1PhksAe3wkgzais_Gr4lbNi2k-kQOsuRJka84qr2TbqrWIR9WpdMB-eTd5Ohb4s5CUj7k0GP5PksHFUGl4uVlhIk_fnxmYNxRFGW-aEOuByjKA__qxBOu76lJFe8ObwEf3t-ZtYFBOp_St4kX1NQeCVrV8CbT_kuaQ6pbuG86VyfyoZJzMsCtzw5gxA3nFqq7GtDw70Sl-il9d0xJt60sU2E9b_r_WHvBEXdvZPbhzJxQcJbUDZ0keEiy5NRrCfVFxr1s6a3EhPA4JdR6APe-rFt4n7wCl6A3rKO6S7dbXZiU7CI777A8vEtJwDdtDuLn1-2gLaUEWBCbTukZvuAWigGvZMCN-B5apHelQ4EqdH91vjDapXhGFuC-5vOCvPzo2S9dc0wz8fR1scb7naE_YJmDeqonL-NsaAun2drdY4Qo52tti7dN7Bf1N_07vPk1LU4WpQZiW3xjKDbXYt9PhD7vxjWapdmiqfpuvRHxnWlM4HNzapkkW_HbWtWYBawRLG10DoYs3eXAQCmZ8CgoZIytpFDMwS6hJ_-NDr8AfLqszAeiY17MVa8D_Ntn-NFMuE7l3L5YWF60temAbI2FZm2ub-MyQB1PSaCsOI_uNjlHlLVatmfHB9MoufDQV_hA4k94pxu97cGHl34rJYdG7J2zXa7_YBzN0nOpelhP3vtiSfnpImWmhzQR5LA31bTuQ6RtRGEzEbEYmaYlTbNCX0f-dmLzqB4CiNCi6AFFioOsyYMsEae7oigBc1ytFGmPTa_oK2eDBMa96b-zl_vFsXhF-x0e4FhHj4V7DfwwSgLKACvxg4bfdqnhnLK_dqWo4ye-Zje-bjJodzpGPgnaPLFJx-GsYWqD78jd5HuR4gDRSTvPhZV3hbTpSMvGWKT56mjfGy38wo09cZC_id1PmNrdrJHbxH2qhHps6AZGlIDbyaxItwoWr9a7n6y258mO6TgiTd38HdS9pJAeQz4stOWvBFu3Cwz9dUrDRleTtsv4OarItOaqpeekqflr9BdZT0W3Sy685WU1M5bAJXZ7ILY1TFXX8spnU4DDAQ2kGSaBSoeP_Tej3lKdiAP3rRYZghnKVQpm-kYxeKyKPS4NCFtoo3nwnOy2iLSst2LZNOzzfuj786njj8_1mvA2b18ndYOupbleU-7UCCLz1YE9Mh1aSfxYqsouudw7HT3cadzGXZETRvWXytFOAa15eC6aBVGWlQbj5jZS0155b31lYYayHsve-rmEe2TWyf9qcSqStjGXY5Ui_x80Gnv--M9qb8-6gAQ_iNH4gnevT3sna16565NFg8TkskCE2OG2pRePtnodpH6-ha53GUt70mCjGKqz1gyNqGbkqwJCax6FD8l--ncuyHtolzVJ0EVhxVSJtpsI-ZOPNJjip8D3JGNRNE-TLpfWs1-VckZ6_egCzdAKIx3e8hnH-C_ryNfWyw6Ix_kQuqLQc25rmhFhURLCohWiNChikWW4NzIhFQWW-TmHsPJP0m-KWcTYZ5tNaWnPPvD1QC4lMyKy2hQT5SUqb95X8FujupZ0MGB1K7CGCo83pSIHTHTkcfbpGao9lNypO70mIDzmWnMNP9H7VzeMdIlQjWJ07dsFxLTBjCGMC0EeOsUzlC9orFkeSKExtGYjf_mvBMzxsXhBVdFOwc1a-GHPePe8BEAiqjogtNqQyGOn6Vjq_bZi1iJj5hXWqaMHU4Honc956m5yskToRfLvV-KfyoK91PZXPRlrXWesxwj_heQQIpingaZDcu-t7_4dNwaNE6iOl7n_f5ZJSTcNMcMtPEO4KSsfNr4Tw_EsBQ3WxdJHhvbqghvQdoS9nauhGjSvivkPYLFpmePab0SidDonE0ZDwZgcafyLKd5gEdemoGg2W0rmxiX0PO9rvScKPTAE7P67nuMVX8_7EsEgX8imlhDbgbnBeg8QWoWX72eboq9pFyGaVHOP5K7MALdeHUwlnr7Je8MZenBXN_EiA9MzVKet3sF2rCTg5Btscr4bgyz5ttFAlbR6ABqFn6B39vHEgxKwGbeqkztSpY19jqx_Bi4ZrRzz1MjfvItU8BOtwGUluMVL9hAwNEQx6_HZDu0OzZIfDBIUnCS_8k + id: rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1 summary: - - text: "**Planning updates for the poem**\n\nI need to use the planning tool, updating as we make progress. First, - I’ll draft a plan to construct a poem with 12 lines while meeting specific constraints. I'll ensure the line-initial - letters match the SAMIRA/DAWOOD pattern. \n\nFollowing that, I should use the update_plan tool twice: first for - the initial plan and then again upon completion to note that it’s done. I think I’ll need to blend these updates - with the poem outputs to maintain a clear flow!" + - text: |- + **Creating a poem with acrostics** + + I’m working on producing a 12-line poem where the odd lines spell "SAMIRA" and the even lines spell "DAWOOD." Wait, I realize that I need to focus on the first letters of each line too—those should correspond to the letters of each acrostic. So every line must not only express something but also have the initials of each word form the name of a capital city. I’ll need to think carefully about my word choices! + type: summary_text + - text: |- + **Selecting capitals for the poem** + + I'm thinking about using straightforward capital city names to help with the poem. For instance, I could start with "Seoul" for line one, which would have words starting with S, E, O, U, and L. For line two, I’ll go with "Doha," which is simple and gives me the letters D, O, H, A. Line three can start with A, and I think I'll pick "Athens" for that, giving me a nice five-letter word to work with. This should fit well together! + type: summary_text + - text: |- + **Choosing capitals for the poem lines** + + For line four, I need a word starting with A to match the second letter of "DAWOOD." I could use "Apia," "Asmara," or even "Athens" again, but I’ll choose "Apia" for variety. Line five should start with M, so I’m considering options like "Moscow" or "Madrid," and I think I will go with "Moscow." Line six requires W, and I’ll pick "Warsaw." For line seven, I’m looking at "Islamabad," which works perfectly. Finally, line eight can start with O, and I’m leaning toward "Ottawa" since it has six letters and fits nicely! + type: summary_text + - text: |- + **Finalizing the poem structure** + + For line nine, I’ll start with R and choose "Rabat," which gives me a solid five letters. Line ten needs to start with O, so using "Oslo" again works, even if it repeats. Line eleven can begin with A, and "Abuja" fits perfectly. For line twelve, I’m selecting "Dodoma." Now, I need to ensure that each line’s words not only have the correct initials but also create a poetic flow. For the first line, I came up with "Silken embers orbit under lanterns," which captures the essence beautifully! type: summary_text - text: |- - **Updating the plan and progress** + **Crafting the poem and updating the plan** - I can make two tool calls before the final output: one for the initial plan and another to note that execution is completed. It makes sense to do these calls back-to-back in the commentary section. The first will be a succinct update of the plan steps, and then the second will detail the progress, such as whether I've selected capitals per line, constructed the lines, verified the acrostics, and delivered the poem. That should keep everything clear! + I’ve crafted nice lines for the poem! Starting with "Silken embers orbit under lanterns" for Seoul works well. Then I have "Desert omens hover above" for Doha, and "Ancient thoughts hum, echoing night songs" for Athens. Each line follows the acrostic rules, matching capitals accurately. I’m also using "Dawn opens doorways, offering meadows anew" for Dodoma and ensuring every capital's initials are correct. Now, I’ll make sure to call the update_plan tool after I write the poem to document my process! type: summary_text type: reasoning - - arguments: '{"plan":"Plan:\n1) Map 12 lines to required initial letters: odd lines -> S A M I R A; even lines -> D - A W O O D.\n2) For each line, choose a world capital whose name begins with the required initial.\n3) Compose each - line so that the first letters of its words, in order, spell that chosen capital exactly.\n4) Keep imagery coherent - so the poem reads fluidly while meeting all acrostic constraints.\n5) Double-check both acrostics: (a) line-initial - letters form SAMIRA/DAWOOD; (b) per-line word-initials form the intended capitals.\n6) Deliver the 12-line poem."}' - call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 - id: fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d + - arguments: '{"plan":"Plan: 1) Choose 12 capital names whose initial letters for lines match the required acrostics: + odd lines S A M I R A; even lines D A W O O D. 2) For each line, craft a poetic phrase where the first letters of + each word spell the chosen capital. 3) Verify acrostics and capitals alignment. 4) Deliver the 12-line poem. 5) + Final check and update plan as completed."}' + call_id: call_WrCgFeUNTYD3S3yvrY7RFwXM + id: fc_68c3018f9aa88193952ceab700035b3600b441a18c4893c1 name: update_plan type: function_call - - call_id: call_QbeOap5DBC9PH8zkuG1J3fy3 + - call_id: call_WrCgFeUNTYD3S3yvrY7RFwXM output: plan updated type: function_call_output instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update @@ -231,13 +257,13 @@ interactions: connection: - keep-alive content-length: - - '2389' + - '2345' content-type: - application/json openai-organization: - pydantic-28gund openai-processing-ms: - - '6691' + - '5730' openai-project: - proj_dKobscVY9YJxeEaDJen54e3d openai-version: @@ -248,9 +274,9 @@ interactions: - chunked parsed_body: background: false - created_at: 1757606028 + created_at: 1757610387 error: null - id: resp_68c2f08c195081978f96d143cf93ce4b016e6d37acd3117d + id: resp_68c301935a2881939de9421990d0cd7c00b441a18c4893c1 incomplete_details: null instructions: You are a helpful assistant that uses planning. You MUST use the update_plan tool and continually update it as you make progress against the user's prompt @@ -264,20 +290,20 @@ interactions: - annotations: [] logprobs: [] text: |- - Silver owls feathered in ascent - Dunes open, harboring azures - Auroras stir tranquil airs, northern afterglow - Amber nights kindle autumnal reverent alleys - Moonlit undertow sings, coral aster tides - Whispers arise, rivers serenade amber wistfulness - Indigo sands lull a midnight amber breeze, awakening dawn - Over snow, lanterns overglow - Rustling acacias bend as trade-winds - Old timbers tremble as waters awake - Azure palms invite alchemy - Desert jasmine ignites breezes, oasis unveils tender incandescence + Silken embers orbit under lanterns + Desert omens hover above + Ancient thoughts hum, echoing night songs + Amber palms invite arrivals + Midnight orbits slow, constellations over water + Winds awaken rivers; sun adorns willows + Ivory sands luminous, as moonlight awakes boats adrift, dreaming + Opal tides twine, auroras wander amber + Rose arches breathe at twilight + Old songs linger openly + Amber breezes usher jasmine aloft + Dawn opens doorways, offering meadows anew type: output_text - id: msg_68c2f08d7b608197a7334580e604cca2016e6d37acd3117d + id: msg_68c3019459f48193a6653ef497bd4c6000b441a18c4893c1 role: assistant status: completed type: message @@ -314,13 +340,13 @@ interactions: top_p: 1.0 truncation: disabled usage: - input_tokens: 2276 + input_tokens: 2272 input_tokens_details: - cached_tokens: 2176 - output_tokens: 125 + cached_tokens: 1152 + output_tokens: 114 output_tokens_details: reasoning_tokens: 0 - total_tokens: 2401 + total_tokens: 2386 user: null status: code: 200 diff --git a/tests/models/test_openai_responses.py b/tests/models/test_openai_responses.py index 92e87b42aa..aeecf9102d 100644 --- a/tests/models/test_openai_responses.py +++ b/tests/models/test_openai_responses.py @@ -1303,8 +1303,10 @@ async def test_openai_responses_thinking_part_iter(allow_model_requests: None, o async def test_openai_responses_thinking_with_tool_calls(allow_model_requests: None, openai_api_key: str): + provider = OpenAIProvider(api_key=openai_api_key) m = OpenAIResponsesModel( model_name='gpt-5', + provider=provider, settings=OpenAIResponsesModelSettings(openai_reasoning_summary='detailed', openai_reasoning_effort='low'), ) agent = Agent(model=m) @@ -1343,26 +1345,38 @@ def update_plan(plan: str) -> str: parts=[ ThinkingPart( content=IsStr(), - id='rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d', + id='rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1', signature=IsStr(), provider_name='openai', ), ThinkingPart( content=IsStr(), - id='rs_68c2f06b87548197ac093b82cba2e950016e6d37acd3117d', + id='rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1', + ), + ThinkingPart( + content=IsStr(), + id='rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1', + ), + ThinkingPart( + content=IsStr(), + id='rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1', + ), + ThinkingPart( + content=IsStr(), + id='rs_68c301598b5c81938a8f95605519c25a00b441a18c4893c1', ), ToolCallPart( tool_name='update_plan', args=IsStr(), - tool_call_id='call_QbeOap5DBC9PH8zkuG1J3fy3|fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d', + tool_call_id='call_WrCgFeUNTYD3S3yvrY7RFwXM|fc_68c3018f9aa88193952ceab700035b3600b441a18c4893c1', ), ], - usage=RequestUsage(input_tokens=124, output_tokens=2084, details={'reasoning_tokens': 1920}), + usage=RequestUsage(input_tokens=124, output_tokens=2098, details={'reasoning_tokens': 1984}), model_name='gpt-5-2025-08-07', timestamp=IsDatetime(), provider_name='openai', provider_details={'finish_reason': 'completed'}, - provider_response_id='resp_68c2f06ae97c8197980bb8a4837e2e46016e6d37acd3117d', + provider_response_id='resp_68c30157af5c819393a64d8d810d562700b441a18c4893c1', finish_reason='stop', ), ModelRequest( @@ -1370,7 +1384,7 @@ def update_plan(plan: str) -> str: ToolReturnPart( tool_name='update_plan', content='plan updated', - tool_call_id='call_QbeOap5DBC9PH8zkuG1J3fy3|fc_68c2f08b3a388197a78d6e71cad38079016e6d37acd3117d', + tool_call_id='call_WrCgFeUNTYD3S3yvrY7RFwXM|fc_68c3018f9aa88193952ceab700035b3600b441a18c4893c1', timestamp=IsDatetime(), ) ], @@ -1379,13 +1393,13 @@ def update_plan(plan: str) -> str: ModelResponse( parts=[TextPart(content=IsStr())], usage=RequestUsage( - input_tokens=2276, cache_read_tokens=2176, output_tokens=125, details={'reasoning_tokens': 0} + input_tokens=2272, cache_read_tokens=1152, output_tokens=114, details={'reasoning_tokens': 0} ), model_name='gpt-5-2025-08-07', timestamp=IsDatetime(), provider_name='openai', provider_details={'finish_reason': 'completed'}, - provider_response_id='resp_68c2f08c195081978f96d143cf93ce4b016e6d37acd3117d', + provider_response_id='resp_68c301935a2881939de9421990d0cd7c00b441a18c4893c1', finish_reason='stop', ), ] From 204b379b3ee72f97fff622ed27574b18ea75d2f1 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 11 Sep 2025 17:12:25 +0000 Subject: [PATCH 4/4] coverage --- pydantic_ai_slim/pydantic_ai/models/openai.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/models/openai.py b/pydantic_ai_slim/pydantic_ai/models/openai.py index 47a07ec4a2..0214dfd385 100644 --- a/pydantic_ai_slim/pydantic_ai/models/openai.py +++ b/pydantic_ai_slim/pydantic_ai/models/openai.py @@ -1154,7 +1154,7 @@ def _map_tool_call(t: ToolCallPart) -> responses.ResponseFunctionToolCallParam: call_id=call_id, type='function_call', ) - if id: + if id: # pragma: no branch param['id'] = id return param @@ -1529,4 +1529,4 @@ def _split_combined_tool_call_id(combined_id: str) -> tuple[str, str | None]: call_id, id = combined_id.split('|', 1) return call_id, id else: - return combined_id, None + return combined_id, None # pragma: no cover