diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index df3a17b85..f9c7e4efa 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -1225,8 +1225,10 @@ func decodeToolCallInputMap(toolCall fantasy.ToolCallPart) (map[string]any, *fan if strings.TrimSpace(toolCall.Input) == "" { return map[string]any{}, nil } - var inputMap map[string]any - if err := json.Unmarshal([]byte(toolCall.Input), &inputMap); err != nil { + // Keep each value as raw JSON. Generic decoding turns large integers + // into float64, and the SDK encodes json.Number as a string. + var rawMap map[string]json.RawMessage + if err := json.Unmarshal([]byte(toolCall.Input), &rawMap); err != nil { return map[string]any{}, &fantasy.CallWarning{ Type: fantasy.CallWarningTypeOther, Message: fmt.Sprintf( @@ -1235,8 +1237,9 @@ func decodeToolCallInputMap(toolCall fantasy.ToolCallPart) (map[string]any, *fan ), } } - if inputMap == nil { - return map[string]any{}, nil + inputMap := make(map[string]any, len(rawMap)) + for key, value := range rawMap { + inputMap[key] = value } return inputMap, nil } @@ -1248,7 +1251,7 @@ func decodeToolCallInputAny(toolCall fantasy.ToolCallPart) (any, *fantasy.CallWa if strings.TrimSpace(toolCall.Input) == "" { return nil, nil } - var inputAny any + var inputAny json.RawMessage if err := json.Unmarshal([]byte(toolCall.Input), &inputAny); err != nil { return nil, &fantasy.CallWarning{ Type: fantasy.CallWarningTypeOther, @@ -1258,6 +1261,9 @@ func decodeToolCallInputAny(toolCall fantasy.ToolCallPart) (any, *fantasy.CallWa ), } } + if string(inputAny) == "null" { + return nil, nil + } return inputAny, nil } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index b3662699a..9b01e60b2 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -24,6 +24,33 @@ var noopComputerRun = func(_ context.Context, _ fantasy.ToolCall) (fantasy.ToolR return fantasy.ToolResponse{}, nil } +func TestDecodeToolCallInputPreservesNumbers(t *testing.T) { + t.Parallel() + const input = `{"a":2,"b":-3.5,"value":9007199254740993,"nested":{"n":1e3}}` + toolCall := fantasy.ToolCallPart{ToolCallID: "call_1", ToolName: "echo", Input: input} + + // Marshal through the SDK params: the SDK encoder, not encoding/json, + // decides how each value is written to the request body. + inputMap, warning := decodeToolCallInputMap(toolCall) + require.Nil(t, warning) + raw, err := json.Marshal(anthropic.ToolUseBlockParam{ID: "call_1", Name: "echo", Input: inputMap}) + require.NoError(t, err) + var block struct { + Input json.RawMessage `json:"input"` + } + require.NoError(t, json.Unmarshal(raw, &block)) + require.JSONEq(t, input, string(block.Input)) + require.Contains(t, string(block.Input), "9007199254740993") + + inputAny, warning := decodeToolCallInputAny(toolCall) + require.Nil(t, warning) + raw, err = json.Marshal(anthropic.ServerToolUseBlockParam{ID: "call_1", Name: "web_search", Input: inputAny}) + require.NoError(t, err) + require.NoError(t, json.Unmarshal(raw, &block)) + require.JSONEq(t, input, string(block.Input)) + require.Contains(t, string(block.Input), "9007199254740993") +} + func TestToPrompt_DropsEmptyMessages(t *testing.T) { t.Parallel() diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index af38cf80a..16c9489d8 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -37,11 +37,21 @@ type languageModel struct { streamProviderMetadataFunc LanguageModelStreamProviderMetadataFunc headerFunc LanguageModelHeaderFunc toPromptFunc LanguageModelToPromptFunc + requireFinishReason bool } // LanguageModelOption is a function that configures a languageModel. type LanguageModelOption = func(*languageModel) +// WithLanguageModelRequireFinishReason rejects Chat Completions streams that end +// without a finish_reason, even when the tool arguments form valid JSON. +// The default retains inference of tool-call completion for compatible providers. +func WithLanguageModelRequireFinishReason() LanguageModelOption { + return func(l *languageModel) { + l.requireFinishReason = true + } +} + // WithLanguageModelPrepareCallFunc sets the prepare call function for the language model. func WithLanguageModelPrepareCallFunc(fn LanguageModelPrepareCallFunc) LanguageModelOption { return func(l *languageModel) { @@ -628,6 +638,14 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S // Emitting partial tool calls causes agents to dispatch them with // invalid arguments before seeing the terminal reason. mappedFinishReason := o.mapFinishReasonFunc(finishReason) + if o.requireFinishReason && finishReason == "" { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } + yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeError, Error: err}) + return + } // "Tool calls were seen" is not proof of a complete turn. Infer a // tool-call turn only when the upstream said tool_calls/function_call diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 760cef96d..72d8c6b24 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -4661,6 +4661,7 @@ func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { ItemID: reasoningItemID, EncryptedContent: &encryptedContent, Summary: []string{}, + Finalized: true, }, }, } @@ -4704,19 +4705,17 @@ func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { } }) - t.Run("store false skips reasoning", func(t *testing.T) { + t.Run("store false replays encrypted reasoning", func(t *testing.T) { t.Parallel() input, warnings := toResponsesPrompt(prompt, "system", false) require.Empty(t, warnings) - // With store=false: user, assistant text, follow-up user. - require.Len(t, input, 3) - - for _, item := range input { - require.Nil(t, item.OfReasoning, - "reasoning items must not appear when store=false") - } + require.Len(t, input, 4) + require.NotNil(t, input[1].OfReasoning) + require.Equal(t, reasoningItemID, input[1].OfReasoning.ID) + require.Equal(t, encryptedContent, input[1].OfReasoning.EncryptedContent.Value) + require.Empty(t, input[1].OfReasoning.Summary) }) } diff --git a/providers/openai/responses_errors.go b/providers/openai/responses_errors.go new file mode 100644 index 000000000..8583fdaa0 --- /dev/null +++ b/providers/openai/responses_errors.go @@ -0,0 +1,73 @@ +package openai + +import ( + "encoding/json" + "errors" + "fmt" + "net/http" + + "charm.land/fantasy" + "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/ssestream" +) + +// ResponsesError keeps the provider error fields for errors.As. +// The embedded ProviderError contains HTTP details and is not serialized. +type ResponsesError struct { + Code string `json:"code"` + Type string `json:"type"` + *fantasy.ProviderError `json:"-"` +} + +// Error returns the message and code, without request data. +func (e *ResponsesError) Error() string { + if e.Code == "" { + return e.ProviderError.Error() + } + return fmt.Sprintf("%s (code: %s)", e.ProviderError.Error(), e.Code) +} + +// Unwrap lets callers inspect the provider and SDK errors. +func (e *ResponsesError) Unwrap() error { return e.ProviderError } + +func responsesStreamFailureError(title, raw string, response *http.Response) *ResponsesError { + var payload struct { + Code string `json:"code"` + Type string `json:"type"` + Message string `json:"message"` + StatusCode int `json:"status_code"` + Error json.RawMessage `json:"error"` + } + _ = json.Unmarshal([]byte(raw), &payload) + if len(payload.Error) > 0 { + nested := payload.Error + _ = json.Unmarshal(nested, &payload) + } + status := payload.StatusCode + if response != nil { + status = response.StatusCode + } + provider := &fantasy.ProviderError{Title: title, Message: payload.Message, StatusCode: status} + parseContextTooLargeError(payload.Message, provider) + return &ResponsesError{Code: payload.Code, Type: payload.Type, ProviderError: provider} +} + +func toResponsesProviderErr(err error, response *http.Response) error { + converted := toProviderErr(err) + var provider *fantasy.ProviderError + if !errors.As(converted, &provider) { + return converted + } + var api *openai.Error + if errors.As(err, &api) { + return &ResponsesError{Code: api.Code, Type: api.Type, ProviderError: provider} + } + var stream *ssestream.StreamError + if errors.As(err, &stream) { + typed := responsesStreamFailureError("stream error", string(stream.Event.Data), response) + provider.StatusCode = typed.StatusCode + typed.ProviderError = provider + return typed + } + return converted +} diff --git a/providers/openai/responses_errors_test.go b/providers/openai/responses_errors_test.go new file mode 100644 index 000000000..bd6d716ea --- /dev/null +++ b/providers/openai/responses_errors_test.go @@ -0,0 +1,132 @@ +package openai + +import ( + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesTypedStreamErrors(t *testing.T) { + t.Parallel() + for _, event := range []struct{ name, data, code, kind, message string }{ + {"response.failed", `{"type":"response.failed","response":{"id":"resp_1","status":"failed","error":{"code":"server_error","type":"api_error","message":"boom"}}}`, "server_error", "api_error", "boom"}, + {"error", `{"type":"error","code":"invalid_prompt","message":"bad prompt"}`, "invalid_prompt", "error", "bad prompt"}, + {"error", `{"error":{"type":"invalid_request_error","code":"bad_argument","message":"bad argument"}}`, "bad_argument", "invalid_request_error", "bad argument"}, + {"error", `{"error":{"type":"invalid_request_error","code":"bad_argument","message":"bad argument","status_code":429}}`, "bad_argument", "invalid_request_error", "bad argument"}, + } { + t.Run(event.data, func(t *testing.T) { + t.Parallel() + server := newStreamingMockServer() + defer server.close() + server.chunks = []string{ + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","item_id":"msg_1","delta":"{\"answer\":\"yes\"}"}`), + responsesSSEEvent(event.name, event.data), + } + model := newResponsesProvider(t, server.server.URL) + stream, err := model.Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + var failure error + for part := range stream { + if part.Error != nil { + failure = part.Error + } + } + require.Error(t, failure) + var provider *fantasy.ProviderError + require.True(t, errors.As(failure, &provider)) + require.Equal(t, 200, provider.StatusCode) + var typed *ResponsesError + require.ErrorAs(t, failure, &typed) + require.Equal(t, event.code, typed.Code) + require.Equal(t, event.kind, typed.Type) + require.Equal(t, event.message, typed.Message) + schema := fantasy.Schema{Type: "object", Properties: map[string]*fantasy.Schema{"answer": {Type: "string"}}, Required: []string{"answer"}} + objects, err := model.StreamObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema}) + require.NoError(t, err) + failure = nil + for part := range objects { + if part.Error != nil { + failure = part.Error + } + } + require.True(t, errors.As(failure, &provider)) + require.Equal(t, 200, provider.StatusCode) + require.NotContains(t, failure.Error(), "test-api-key") + require.NotContains(t, failure.Error(), "Authorization") + }) + } +} + +func TestResponsesHTTPErrorFields(t *testing.T) { + t.Parallel() + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusBadRequest) + _, _ = w.Write([]byte(`{"error":{"code":"invalid_prompt","type":"invalid_request_error","message":"bad prompt"}}`)) + })) + defer server.Close() + model := newResponsesProvider(t, server.URL) + schema := fantasy.Schema{Type: "object", Properties: map[string]*fantasy.Schema{"answer": {Type: "string"}}} + _, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + checkResponsesHTTPError(t, err) + _, err = model.GenerateObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema}) + checkResponsesHTTPError(t, err) + stream, err := model.Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + seen := false + for part := range stream { + if part.Error != nil { + seen = true + checkResponsesHTTPError(t, part.Error) + } + } + require.True(t, seen) + objects, err := model.StreamObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema}) + require.NoError(t, err) + seen = false + for part := range objects { + if part.Error != nil { + seen = true + checkResponsesHTTPError(t, part.Error) + } + } + require.True(t, seen) +} + +func checkResponsesHTTPError(t *testing.T, err error) { + t.Helper() + var typed *ResponsesError + require.ErrorAs(t, err, &typed) + require.Equal(t, "invalid_prompt", typed.Code) + require.Equal(t, "invalid_request_error", typed.Type) + require.Equal(t, "bad prompt", typed.Message) + require.Equal(t, http.StatusBadRequest, typed.StatusCode) + require.NotContains(t, err.Error(), "test-api-key") + require.NotContains(t, err.Error(), "Authorization") + // The existing SDK error keeps a request dump. Do not serialize it. + require.NotEmpty(t, typed.RequestBody) + data, marshalErr := json.Marshal(typed) + require.NoError(t, marshalErr) + require.NotContains(t, string(data), "test-api-key") + require.NotContains(t, string(data), "RequestBody") +} + +func TestResponsesGenerateBodyErrorFields(t *testing.T) { + t.Parallel() + server := newMockServer() + defer server.close() + server.response = map[string]any{"id": "resp_1", "status": "failed", "error": map[string]any{"code": "server_error", "type": "api_error", "message": "boom"}} + model := newResponsesProvider(t, server.server.URL) + _, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + var typed *ResponsesError + require.ErrorAs(t, err, &typed) + require.Equal(t, "server_error", typed.Code) + require.Equal(t, "api_error", typed.Type) + require.Equal(t, "boom", typed.Message) + require.Equal(t, http.StatusOK, typed.StatusCode) +} diff --git a/providers/openai/responses_extra_body_test.go b/providers/openai/responses_extra_body_test.go new file mode 100644 index 000000000..a3aed26a1 --- /dev/null +++ b/providers/openai/responses_extra_body_test.go @@ -0,0 +1,81 @@ +package openai + +import ( + "encoding/json" + "fmt" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesExtraBody(t *testing.T) { + t.Parallel() + options, err := ParseResponsesOptions(map[string]any{"extra_body": map[string]any{ + "prompt_cache_retention": "24h", "prompt_cache_options": map[string]any{"ttl": "30m"}, + "model": "override-model", "temperature": 0.2, "store": false, + "text": map[string]any{"format": map[string]any{"type": "text"}}, + }}) + require.NoError(t, err) + data, err := json.Marshal(options) + require.NoError(t, err) + savedData, err := fantasy.UnmarshalProviderOptions(map[string]json.RawMessage{Name: data}) + require.NoError(t, err) + saved := savedData[Name].(*ResponsesProviderOptions) + server := newMockServer() + defer server.close() + server.response = map[string]any{"id": "resp_1", "status": "completed", "output": []any{map[string]any{"type": "message", "id": "msg_1", "content": []any{map[string]any{"type": "output_text", "text": `{"answer":"yes"}`}}}}} + model := newResponsesProvider(t, server.server.URL) + _, err = model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt, ProviderOptions: NewResponsesProviderOptions(saved)}) + require.NoError(t, err) + streamServer := newStreamingMockServer() + defer streamServer.close() + streamServer.chunks = []string{responsesSSEEvent("response.completed", `{"type":"response.completed","response":{"id":"resp_1","status":"completed","output":[]}}`)} + stream, err := newResponsesProvider(t, streamServer.server.URL).Stream(t.Context(), fantasy.Call{Prompt: testPrompt, ProviderOptions: NewResponsesProviderOptions(saved)}) + require.NoError(t, err) + for part := range stream { + require.NoError(t, part.Error) + } + objectSchema := fantasy.Schema{Type: "object", Properties: map[string]*fantasy.Schema{"answer": {Type: "string"}}, Required: []string{"answer"}} + _, err = model.GenerateObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: objectSchema, ProviderOptions: NewResponsesProviderOptions(saved)}) + require.NoError(t, err) + for _, call := range append(server.calls, streamServer.calls...) { + require.Equal(t, "24h", call.body["prompt_cache_retention"]) + require.Equal(t, map[string]any{"ttl": "30m"}, call.body["prompt_cache_options"]) + require.Equal(t, "override-model", call.body["model"]) + require.Equal(t, 0.2, call.body["temperature"]) + require.Equal(t, false, call.body["store"]) + require.Equal(t, "text", call.body["text"].(map[string]any)["format"].(map[string]any)["type"]) + } +} + +func TestResponsesExtraBodyStoreReplay(t *testing.T) { + t.Parallel() + for _, store := range []bool{false, true} { + t.Run(fmt.Sprint(store), func(t *testing.T) { + t.Parallel() + options := &ResponsesProviderOptions{Store: new(!store), ExtraBody: map[string]any{"store": store}} + prompt := fantasy.Prompt{{Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{ + fantasy.ReasoningPart{ProviderOptions: fantasy.ProviderOptions{Name: &ResponsesReasoningMetadata{ItemID: "rs_1", Summary: []string{}, EncryptedContent: new("encrypted"), Finalized: true}}}, + fantasy.ToolCallPart{ToolCallID: "web_1", ToolName: "web_search", ProviderExecuted: true}, + }}} + model := responsesLanguageModel{modelID: "gpt-5"} + params, _, err := model.prepareParams(fantasy.Call{Prompt: prompt, ProviderOptions: NewResponsesProviderOptions(options)}) + require.NoError(t, err) + input := params.Input.OfInputItemList + require.Len(t, input, 1) + if store { + require.NotNil(t, input[0].OfItemReference) + } else { + require.NotNil(t, input[0].OfReasoning) + } + options.PreviousResponseID = new("resp_1") + _, _, err = model.prepareParams(fantasy.Call{Prompt: testPrompt, ProviderOptions: NewResponsesProviderOptions(options)}) + if store { + require.NoError(t, err) + } else { + require.EqualError(t, err, previousResponseIDStoreError) + } + }) + } +} diff --git a/providers/openai/responses_finish_metadata_test.go b/providers/openai/responses_finish_metadata_test.go new file mode 100644 index 000000000..965c4dc18 --- /dev/null +++ b/providers/openai/responses_finish_metadata_test.go @@ -0,0 +1,86 @@ +package openai + +import ( + "encoding/json" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesRawFinishMetadata(t *testing.T) { + t.Parallel() + for _, tc := range []struct { + status, reason string + finish fantasy.FinishReason + }{ + {"completed", "", fantasy.FinishReasonStop}, + {"incomplete", "max_output_tokens", fantasy.FinishReasonLength}, + {"incomplete", "content_filter", fantasy.FinishReasonContentFilter}, + {"incomplete", "future_reason", fantasy.FinishReasonOther}, + } { + t.Run(tc.status+tc.reason, func(t *testing.T) { + t.Parallel() + response := map[string]any{"id": "resp_1", "status": tc.status, "output": []any{map[string]any{"type": "message", "id": "msg_1", "content": []any{map[string]any{"type": "output_text", "text": `{"answer":"yes"}`}}}}, "incomplete_details": map[string]any{"reason": tc.reason}} + server := newMockServer() + defer server.close() + server.response = response + model := newResponsesProvider(t, server.server.URL) + generated, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + require.Equal(t, tc.finish, generated.FinishReason) + checkResponsesRawFinish(t, generated.ProviderMetadata, tc.status, tc.reason) + schema := fantasy.Schema{Type: "object", Properties: map[string]*fantasy.Schema{"answer": {Type: "string"}}, Required: []string{"answer"}} + object, err := model.GenerateObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema}) + require.NoError(t, err) + checkResponsesRawFinish(t, object.ProviderMetadata, tc.status, tc.reason) + streamServer := newStreamingMockServer() + defer streamServer.close() + event := "response." + tc.status + raw, err := json.Marshal(map[string]any{"type": event, "response": response}) + require.NoError(t, err) + streamServer.chunks = []string{ + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","item_id":"msg_1","delta":"{\"answer\":\"yes\"}"}`), + responsesSSEEvent(event, string(raw)), + } + streamModel := newResponsesProvider(t, streamServer.server.URL) + stream, err := streamModel.Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + seen := false + for part := range stream { + require.NoError(t, part.Error) + if part.Type == fantasy.StreamPartTypeFinish { + seen = true + require.Equal(t, tc.finish, part.FinishReason) + checkResponsesRawFinish(t, part.ProviderMetadata, tc.status, tc.reason) + } + } + require.True(t, seen) + objectStream, err := streamModel.StreamObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema}) + require.NoError(t, err) + seen = false + for part := range objectStream { + require.NoError(t, part.Error) + if part.Type == fantasy.ObjectStreamPartTypeFinish { + seen = true + checkResponsesRawFinish(t, part.ProviderMetadata, tc.status, tc.reason) + } + } + require.True(t, seen) + }) + } +} + +func checkResponsesRawFinish(t *testing.T, metadata fantasy.ProviderMetadata, status, reason string) { + t.Helper() + data, err := json.Marshal(metadata[Name]) + require.NoError(t, err) + var wrapper struct { + Data map[string]any `json:"data"` + } + require.NoError(t, json.Unmarshal(data, &wrapper)) + require.Equal(t, status, wrapper.Data["response_status"]) + if reason != "" { + require.Equal(t, reason, wrapper.Data["raw_finish_reason"]) + } +} diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index f69d685e7..2e716cf5f 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -10,12 +10,14 @@ import ( "maps" "net/http" "reflect" + "slices" "strings" "charm.land/fantasy" "charm.land/fantasy/object" "charm.land/fantasy/schema" "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/option" "github.com/charmbracelet/openai-go/packages/param" "github.com/charmbracelet/openai-go/responses" "github.com/charmbracelet/openai-go/shared" @@ -197,17 +199,23 @@ func (o responsesLanguageModel) prepareParams(call fantasy.Call) (*responses.Res params.Store = param.NewOpt(false) } + storeEnabled := params.Store.Value + if openaiOptions != nil { + if store, ok := openaiOptions.ExtraBody["store"].(bool); ok { + storeEnabled = store + } + } + if openaiOptions != nil && openaiOptions.PreviousResponseID != nil && *openaiOptions.PreviousResponseID != "" { if err := validatePreviousResponseIDPrompt(call.Prompt); err != nil { return nil, warnings, err } - if openaiOptions.Store == nil || !*openaiOptions.Store { + if !storeEnabled { return nil, warnings, errors.New(previousResponseIDStoreError) } params.PreviousResponseID = param.NewOpt(*openaiOptions.PreviousResponseID) } - storeEnabled := openaiOptions != nil && openaiOptions.Store != nil && *openaiOptions.Store input, inputWarnings := toResponsesPrompt(call.Prompt, modelConfig.systemMessageMode, storeEnabled) warnings = append(warnings, inputWarnings...) @@ -379,6 +387,9 @@ func (o responsesLanguageModel) prepareParams(call fantasy.Call) (*responses.Res params.ToolChoice = toolChoice } + if openaiOptions != nil && len(openaiOptions.ExtraBody) > 0 { + params.SetExtraFields(openaiOptions.ExtraBody) + } return params, warnings, nil } @@ -394,16 +405,16 @@ func validatePreviousResponseIDPrompt(prompt fantasy.Prompt) error { return nil } -func responsesProviderMetadata(responseID string) fantasy.ProviderMetadata { - if responseID == "" { +func responsesProviderMetadata(response responses.Response) fantasy.ProviderMetadata { + if response.ID == "" && response.Status == "" && response.IncompleteDetails.Reason == "" && response.ServiceTier == "" { return fantasy.ProviderMetadata{} } - - return fantasy.ProviderMetadata{ - Name: &ResponsesProviderMetadata{ - ResponseID: responseID, - }, - } + return fantasy.ProviderMetadata{Name: &ResponsesProviderMetadata{ + ResponseID: response.ID, + ResponseStatus: string(response.Status), + RawFinishReason: response.IncompleteDetails.Reason, + ServiceTier: ServiceTier(response.ServiceTier), + }} } func responsesUsage(resp responses.Response) fantasy.Usage { @@ -551,6 +562,8 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo case fantasy.MessageRoleAssistant: startIdx := len(input) + seenReasoning := make(map[string]bool) + messageItems := make(map[string]int) for _, c := range msg.Content { switch c.GetType() { case fantasy.ContentTypeText: @@ -562,7 +575,26 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo }) continue } - input = append(input, responses.ResponseInputItemParamOfMessage(textPart.Text, responses.EasyInputMessageRoleAssistant)) + metadata, _ := textPart.ProviderOptions[Name].(*ResponsesTextMetadata) + if !store && metadata != nil && metadata.ItemID != "" { + outputText := responses.ResponseOutputMessageContentUnionParam{OfOutputText: &responses.ResponseOutputTextParam{Text: textPart.Text, Annotations: []responses.ResponseOutputTextAnnotationUnionParam{}}} + if index, ok := messageItems[metadata.ItemID]; ok { + message := input[index].OfOutputMessage + message.Content = append(message.Content, outputText) + continue + } + messageItems[metadata.ItemID] = len(input) + input = append(input, responses.ResponseInputItemUnionParam{ + OfOutputMessage: &responses.ResponseOutputMessageParam{ + ID: metadata.ItemID, + Phase: responses.ResponseOutputMessagePhase(metadata.Phase), + Status: responses.ResponseOutputMessageStatusCompleted, + Content: []responses.ResponseOutputMessageContentUnionParam{outputText}, + }, + }) + } else { + input = append(input, responses.ResponseInputItemParamOfMessage(textPart.Text, responses.EasyInputMessageRoleAssistant)) + } case fantasy.ContentTypeToolCall: toolCallPart, ok := fantasy.AsContentType[fantasy.ToolCallPart](c) @@ -588,19 +620,36 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo continue } - input = append(input, responses.ResponseInputItemParamOfFunctionCall(toolCallPart.Input, toolCallPart.ToolCallID, toolCallPart.ToolName)) + item := responses.ResponseInputItemParamOfFunctionCall(toolCallPart.Input, toolCallPart.ToolCallID, toolCallPart.ToolName) + if metadata, ok := toolCallPart.ProviderOptions[Name].(*ResponsesToolCallMetadata); !store && ok && metadata != nil && strings.HasPrefix(metadata.ItemID, "fc_") { + item.OfFunctionCall.ID = param.NewOpt(metadata.ItemID) + } + input = append(input, item) case fantasy.ContentTypeSource: // Source citations from web search are not a // recognised Responses API input type; skip. continue case fantasy.ContentTypeReasoning: - // Reasoning items are always skipped during replay. - // When store is enabled, the API already has them - // persisted server-side. When store is disabled, the - // item IDs are ephemeral and referencing them causes - // "Item not found" errors. In both cases, replaying - // reasoning inline is not supported by the API. - continue + // Stateless requests must replay encrypted content inline. + // An item reference alone cannot resolve an unstored item. + // Only finalized metadata is replayed: unfinalized content can + // be a partial placeholder from the added stream event. + metadata := GetReasoningMetadata(c.Options()) + if store || metadata == nil || !metadata.Finalized || metadata.ItemID == "" || metadata.EncryptedContent == nil || *metadata.EncryptedContent == "" || seenReasoning[metadata.ItemID] { + continue + } + seenReasoning[metadata.ItemID] = true + summary := make([]responses.ResponseReasoningItemSummaryParam, 0, len(metadata.Summary)) + for _, text := range metadata.Summary { + summary = append(summary, responses.ResponseReasoningItemSummaryParam{Text: text}) + } + input = append(input, responses.ResponseInputItemUnionParam{ + OfReasoning: &responses.ResponseReasoningItemParam{ + ID: metadata.ItemID, + Summary: summary, + EncryptedContent: param.NewOpt(*metadata.EncryptedContent), + }, + }) } } @@ -723,7 +772,7 @@ func hasVisibleResponsesUserContent(content responses.ResponseInputMessageConten func hasVisibleResponsesAssistantContent(items []responses.ResponseInputItemUnionParam, startIdx int) bool { // Check if we added any assistant content parts from this message for i := startIdx; i < len(items); i++ { - if items[i].OfMessage != nil || items[i].OfFunctionCall != nil || items[i].OfItemReference != nil { + if items[i].OfOutputMessage != nil || items[i].OfMessage != nil || items[i].OfFunctionCall != nil || items[i].OfItemReference != nil || items[i].OfReasoning != nil { return true } } @@ -817,9 +866,9 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) return nil, err } - response, err := o.client.Responses.New(ctx, *params, capture.requestOptions(o.headerFunc, append(callUARequestOptions(call), callHeadersRequestOptions(call)...))...) + response, err := o.client.Responses.New(ctx, *params, capture.requestOptions(o.headerFunc, append(append(callUARequestOptions(call), callHeadersRequestOptions(call)...), option.WithResponseInto(&capture.response)))...) if err != nil { - return nil, toProviderErr(err) + return nil, toResponsesProviderErr(err, capture.response) } if response == nil { @@ -827,15 +876,11 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) } if response.Error.Message != "" { - return nil, &fantasy.Error{ - Title: "provider error", - Message: fmt.Sprintf("%s (code: %s)", response.Error.Message, response.Error.Code), - } + return nil, responsesStreamFailureError("provider error", response.Error.RawJSON(), capture.response) } var content []fantasy.Content hasFunctionCall := false - var pendingFunctionCalls []fantasy.ToolCallContent for _, outputItem := range response.Output { switch outputItem.Type { @@ -843,7 +888,8 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) for _, contentPart := range outputItem.Content { if contentPart.Type == "output_text" { content = append(content, fantasy.TextContent{ - Text: contentPart.Text, + Text: contentPart.Text, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesTextMetadata{ItemID: outputItem.ID, Phase: string(outputItem.Phase)}}, }) for _, annotation := range contentPart.Annotations { @@ -878,11 +924,12 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) case "function_call": hasFunctionCall = true - pendingFunctionCalls = append(pendingFunctionCalls, fantasy.ToolCallContent{ + content = append(content, fantasy.ToolCallContent{ ProviderExecuted: false, ToolCallID: outputItem.CallID, ToolName: outputItem.Name, Input: outputItem.Arguments.OfString, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesToolCallMetadata{ItemID: outputItem.ID}}, }) case "web_search_call": @@ -909,7 +956,8 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) }) case "reasoning": metadata := &ResponsesReasoningMetadata{ - ItemID: outputItem.ID, + ItemID: outputItem.ID, + Finalized: true, } if outputItem.EncryptedContent != "" { metadata.EncryptedContent = &outputItem.EncryptedContent @@ -919,13 +967,9 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) continue } - // When there are no summary parts, add an empty reasoning part - summaries := outputItem.Summary - if len(summaries) == 0 { - summaries = []responses.ResponseReasoningItemSummary{{Type: "summary_text", Text: ""}} - } - - for _, s := range summaries { + // Preserve the original summary for replay, including an empty list. + metadata.Summary = make([]string, 0, len(outputItem.Summary)) + for _, s := range outputItem.Summary { metadata.Summary = append(metadata.Summary, s.Text) } @@ -946,13 +990,13 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) Type: fantasy.CallWarningTypeOther, Message: "tool calls were returned but the model hit the token limit; arguments may be truncated", }) - } else { - for _, tc := range pendingFunctionCalls { - content = append(content, tc) - } + content = slices.DeleteFunc(content, func(c fantasy.Content) bool { + tc, ok := c.(fantasy.ToolCallContent) + return ok && !tc.ProviderExecuted + }) } - metadata := responsesProviderMetadata(response.ID) + metadata := responsesProviderMetadata(*response) o.applyHeaders(capture.header(), &metadata) return &fantasy.Response{ @@ -991,7 +1035,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( return nil, err } - stream := o.client.Responses.NewStreaming(ctx, *params, capture.requestOptions(o.headerFunc, append(callUARequestOptions(call), callHeadersRequestOptions(call)...))...) + stream := o.client.Responses.NewStreaming(ctx, *params, capture.requestOptions(o.headerFunc, append(append(callUARequestOptions(call), callHeadersRequestOptions(call)...), option.WithResponseInto(&capture.response)))...) finishReason := fantasy.FinishReasonUnknown var usage fantasy.Usage @@ -1001,6 +1045,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( // identical; the overwrites ensure we have the final value even if an event // is missed. responseID := "" + var terminalResponse responses.Response sawTerminalEvent := false ongoingToolCalls := make(map[int64]*ongoingToolCall) hasFunctionCall := false @@ -1031,11 +1076,13 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( ongoingToolCalls[added.OutputIndex] = &ongoingToolCall{ toolName: added.Item.Name, toolCallID: added.Item.CallID, + itemID: added.Item.ID, } if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputStart, - ID: added.Item.CallID, - ToolCallName: added.Item.Name, + Type: fantasy.StreamPartTypeToolInputStart, + ID: added.Item.CallID, + ToolCallName: added.Item.Name, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesToolCallMetadata{ItemID: added.Item.ID}}, }) { return } @@ -1053,8 +1100,9 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( case "message": if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextStart, - ID: added.Item.ID, + Type: fantasy.StreamPartTypeTextStart, + ID: added.Item.ID, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesTextMetadata{ItemID: added.Item.ID, Phase: string(added.Item.Phase)}}, }) { return } @@ -1092,16 +1140,18 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( hasFunctionCall = true if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputEnd, - ID: done.Item.CallID, + Type: fantasy.StreamPartTypeToolInputEnd, + ID: done.Item.CallID, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesToolCallMetadata{ItemID: done.Item.ID}}, }) { return } if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolCall, - ID: done.Item.CallID, - ToolCallName: done.Item.Name, - ToolCallInput: done.Item.Arguments.OfString, + Type: fantasy.StreamPartTypeToolCall, + ID: done.Item.CallID, + ToolCallName: done.Item.Name, + ToolCallInput: done.Item.Arguments.OfString, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesToolCallMetadata{ItemID: done.Item.ID}}, }) { return } @@ -1140,8 +1190,9 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( } case "message": if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextEnd, - ID: done.Item.ID, + Type: fantasy.StreamPartTypeTextEnd, + ID: done.Item.ID, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesTextMetadata{ItemID: done.Item.ID, Phase: string(done.Item.Phase)}}, }) { return } @@ -1149,11 +1200,24 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( case "reasoning": state := activeReasoning[done.Item.ID] if state != nil { + // The completed item owns the replay data. The added item + // can have missing or partial encrypted content. + metadata := &ResponsesReasoningMetadata{ + ItemID: done.Item.ID, + Summary: make([]string, 0, len(done.Item.Summary)), + Finalized: true, + } + if done.Item.EncryptedContent != "" { + metadata.EncryptedContent = &done.Item.EncryptedContent + } + for _, summary := range done.Item.Summary { + metadata.Summary = append(metadata.Summary, summary.Text) + } if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeReasoningEnd, ID: done.Item.ID, ProviderMetadata: fantasy.ProviderMetadata{ - Name: state.metadata, + Name: metadata, }, }) { return @@ -1167,9 +1231,10 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( tc := ongoingToolCalls[delta.OutputIndex] if tc != nil { if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputDelta, - ID: tc.toolCallID, - Delta: delta.Delta, + Type: fantasy.StreamPartTypeToolInputDelta, + ID: tc.toolCallID, + Delta: delta.Delta, + ProviderMetadata: fantasy.ProviderMetadata{Name: &ResponsesToolCallMetadata{ItemID: tc.itemID}}, }) { return } @@ -1256,6 +1321,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( sawTerminalEvent = true completed := event.AsResponseCompleted() responseID = completed.Response.ID + terminalResponse = completed.Response finishReason = mapResponsesFinishReason(completed.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(completed.Response) @@ -1263,6 +1329,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( sawTerminalEvent = true incomplete := event.AsResponseIncomplete() responseID = incomplete.Response.ID + terminalResponse = incomplete.Response finishReason = mapResponsesFinishReason(incomplete.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(incomplete.Response) @@ -1270,7 +1337,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( failed := event.AsResponseFailed() if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: responsesFailedStreamError(failed.Response.Error.Message, string(failed.Response.Error.Code)), + Error: responsesStreamFailureError("response failed", failed.Response.Error.RawJSON(), capture.response), }) { return } @@ -1280,7 +1347,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( errorEvent := event.AsError() if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: responsesErrorStreamError(errorEvent.Message, errorEvent.Code), + Error: responsesStreamFailureError("response error", errorEvent.RawJSON(), capture.response), }) { return } @@ -1292,7 +1359,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( if err != nil && !errors.Is(err, io.EOF) { yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: toProviderErr(err), + Error: toResponsesProviderErr(err, capture.response), }) return } @@ -1319,7 +1386,8 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( }) } - metadata := responsesProviderMetadata(responseID) + terminalResponse.ID = responseID + metadata := responsesProviderMetadata(terminalResponse) o.applyHeaders(capture.header(), &metadata) yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeFinish, @@ -1330,24 +1398,6 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( }, nil } -// responsesFailedStreamError intentionally returns a provider-declared failure -// instead of a retryable transport error. Only synthetic stream truncation -// errors are wrapped with io.ErrUnexpectedEOF. -func responsesFailedStreamError(message, code string) error { - return responsesStreamFailureError("response failed", message, code) -} - -func responsesErrorStreamError(message, code string) error { - return responsesStreamFailureError("response error", message, code) -} - -func responsesStreamFailureError(title, message, code string) error { - if code != "" { - message = fmt.Sprintf("%s (code: %s)", message, code) - } - return &fantasy.Error{Title: title, Message: message} -} - // toWebSearchToolParam converts a ProviderDefinedTool with ID // "web_search" into the OpenAI SDK's WebSearchToolParam. func toWebSearchToolParam(pt fantasy.ProviderDefinedTool) responses.ToolUnionParam { @@ -1416,6 +1466,7 @@ func GetReasoningMetadata(providerOptions fantasy.ProviderOptions) *ResponsesRea } type ongoingToolCall struct { + itemID string toolName string toolCallID string } @@ -1483,16 +1534,13 @@ func (o responsesLanguageModel) generateObjectWithJSONMode(ctx context.Context, // Make request capture := responseCapture{} - response, err := o.client.Responses.New(ctx, *params, capture.requestOptions(o.headerFunc, append(objectCallUARequestOptions(call), objectCallHeadersRequestOptions(call)...))...) + response, err := o.client.Responses.New(ctx, *params, capture.requestOptions(o.headerFunc, append(append(objectCallUARequestOptions(call), objectCallHeadersRequestOptions(call)...), option.WithResponseInto(&capture.response)))...) if err != nil { - return nil, toProviderErr(err) + return nil, toResponsesProviderErr(err, capture.response) } if response.Error.Message != "" { - return nil, &fantasy.Error{ - Title: "provider error", - Message: fmt.Sprintf("%s (code: %s)", response.Error.Message, response.Error.Code), - } + return nil, responsesStreamFailureError("provider error", response.Error.RawJSON(), capture.response) } // Extract JSON text from response @@ -1539,7 +1587,7 @@ func (o responsesLanguageModel) generateObjectWithJSONMode(ctx context.Context, return nil, err } - metadata := responsesProviderMetadata(response.ID) + metadata := responsesProviderMetadata(*response) o.applyHeaders(capture.header(), &metadata) return &fantasy.ObjectResponse{ @@ -1586,7 +1634,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca } capture := responseCapture{} - stream := o.client.Responses.NewStreaming(ctx, *params, capture.requestOptions(o.headerFunc, append(objectCallUARequestOptions(call), objectCallHeadersRequestOptions(call)...))...) + stream := o.client.Responses.NewStreaming(ctx, *params, capture.requestOptions(o.headerFunc, append(append(objectCallUARequestOptions(call), objectCallHeadersRequestOptions(call)...), option.WithResponseInto(&capture.response)))...) return func(yield func(fantasy.ObjectStreamPart) bool) { if len(warnings) > 0 { @@ -1608,6 +1656,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca // identical; the overwrites ensure we have the final value even if an event // is missed. var responseID string + var terminalResponse responses.Response var sawTerminalEvent bool hasFunctionCall := false @@ -1666,6 +1715,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca sawTerminalEvent = true completed := event.AsResponseCompleted() responseID = completed.Response.ID + terminalResponse = completed.Response finishReason = mapResponsesFinishReason(completed.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(completed.Response) @@ -1673,6 +1723,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca sawTerminalEvent = true incomplete := event.AsResponseIncomplete() responseID = incomplete.Response.ID + terminalResponse = incomplete.Response finishReason = mapResponsesFinishReason(incomplete.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(incomplete.Response) @@ -1680,7 +1731,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca failed := event.AsResponseFailed() if !yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, - Error: responsesFailedStreamError(failed.Response.Error.Message, string(failed.Response.Error.Code)), + Error: responsesStreamFailureError("response failed", failed.Response.Error.RawJSON(), capture.response), }) { return } @@ -1690,7 +1741,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca errorEvent := event.AsError() if !yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, - Error: responsesErrorStreamError(errorEvent.Message, errorEvent.Code), + Error: responsesStreamFailureError("response error", errorEvent.RawJSON(), capture.response), }) { return } @@ -1702,7 +1753,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca if err != nil && !errors.Is(err, io.EOF) { yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, - Error: toProviderErr(err), + Error: toResponsesProviderErr(err, capture.response), }) return } @@ -1721,7 +1772,8 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca // Final validation and emit if lastParsedObject != nil { - metadata := responsesProviderMetadata(responseID) + terminalResponse.ID = responseID + metadata := responsesProviderMetadata(terminalResponse) o.applyHeaders(capture.header(), &metadata) yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeFinish, diff --git a/providers/openai/responses_options.go b/providers/openai/responses_options.go index 664113624..2f0d4f8b9 100644 --- a/providers/openai/responses_options.go +++ b/providers/openai/responses_options.go @@ -14,6 +14,8 @@ import ( const ( TypeResponsesProviderMetadata = Name + ".responses.metadata" TypeResponsesProviderOptions = Name + ".responses.options" + TypeResponsesToolCallMetadata = Name + ".responses.tool_call_metadata" + TypeResponsesTextMetadata = Name + ".responses.text_metadata" TypeResponsesReasoningMetadata = Name + ".responses.reasoning_metadata" TypeWebSearchCallMetadata = Name + ".responses.web_search_call_metadata" ) @@ -34,6 +36,20 @@ func init() { } return &v, nil }) + fantasy.RegisterProviderType(TypeResponsesToolCallMetadata, func(data []byte) (fantasy.ProviderOptionsData, error) { + var v ResponsesToolCallMetadata + if err := json.Unmarshal(data, &v); err != nil { + return nil, err + } + return &v, nil + }) + fantasy.RegisterProviderType(TypeResponsesTextMetadata, func(data []byte) (fantasy.ProviderOptionsData, error) { + var v ResponsesTextMetadata + if err := json.Unmarshal(data, &v); err != nil { + return nil, err + } + return &v, nil + }) fantasy.RegisterProviderType(TypeResponsesReasoningMetadata, func(data []byte) (fantasy.ProviderOptionsData, error) { var v ResponsesReasoningMetadata if err := json.Unmarshal(data, &v); err != nil { @@ -54,6 +70,12 @@ func init() { // The ResponseID can be used as PreviousResponseID in follow-up requests to chain responses. type ResponsesProviderMetadata struct { ResponseID string `json:"response_id"` + // ResponseStatus is the status in the terminal response. + ResponseStatus string `json:"response_status,omitempty"` + // RawFinishReason is incomplete_details.reason, without conversion. + RawFinishReason string `json:"raw_finish_reason,omitempty"` + // ServiceTier is the tier reported by the provider. + ServiceTier ServiceTier `json:"service_tier,omitempty"` // ExtraFields holds non-standard response fields, including any // captured via [LanguageModelHeaderFunc]. ExtraFields map[string]json.RawMessage `json:"extra_fields,omitempty"` @@ -94,11 +116,66 @@ func (m *ResponsesProviderMetadata) UnmarshalJSON(data []byte) error { return nil } +// ResponsesToolCallMetadata contains the function-call item ID for replay. +type ResponsesToolCallMetadata struct { + ItemID string `json:"item_id"` +} + +// Options implements the ProviderOptions interface. +func (*ResponsesToolCallMetadata) Options() {} + +// MarshalJSON adds the provider type to the stored metadata. +func (m ResponsesToolCallMetadata) MarshalJSON() ([]byte, error) { + type plain ResponsesToolCallMetadata + return fantasy.MarshalProviderType(TypeResponsesToolCallMetadata, plain(m)) +} + +// UnmarshalJSON reads stored provider metadata. +func (m *ResponsesToolCallMetadata) UnmarshalJSON(data []byte) error { + type plain ResponsesToolCallMetadata + var p plain + if err := fantasy.UnmarshalProviderType(data, &p); err != nil { + return err + } + *m = ResponsesToolCallMetadata(p) + return nil +} + +// ResponsesTextMetadata contains the message fields needed for text replay. +type ResponsesTextMetadata struct { + ItemID string `json:"item_id"` + Phase string `json:"phase,omitempty"` +} + +// Options implements the ProviderOptions interface. +func (*ResponsesTextMetadata) Options() {} + +// MarshalJSON adds the provider type to the stored metadata. +func (m ResponsesTextMetadata) MarshalJSON() ([]byte, error) { + type plain ResponsesTextMetadata + return fantasy.MarshalProviderType(TypeResponsesTextMetadata, plain(m)) +} + +// UnmarshalJSON reads stored provider metadata. +func (m *ResponsesTextMetadata) UnmarshalJSON(data []byte) error { + type plain ResponsesTextMetadata + var p plain + if err := fantasy.UnmarshalProviderType(data, &p); err != nil { + return err + } + *m = ResponsesTextMetadata(p) + return nil +} + // ResponsesReasoningMetadata represents reasoning metadata for OpenAI Responses API. type ResponsesReasoningMetadata struct { ItemID string `json:"item_id"` EncryptedContent *string `json:"encrypted_content"` Summary []string `json:"summary"` + // Finalized marks metadata copied from the completed reasoning output + // item. Only finalized encrypted content is replayed inline. Streaming + // placeholders and metadata persisted before this field existed are not. + Finalized bool `json:"finalized,omitempty"` } // Options implements the ProviderOptions interface. @@ -159,6 +236,8 @@ const ( // ResponsesProviderOptions represents additional options for OpenAI Responses API. type ResponsesProviderOptions struct { + // ExtraBody adds request fields and overrides standard fields. + ExtraBody map[string]any `json:"extra_body,omitempty"` Include []IncludeType `json:"include"` Instructions *string `json:"instructions"` Logprobs any `json:"logprobs"` diff --git a/providers/openai/responses_params_test.go b/providers/openai/responses_params_test.go index f533c0bae..9fdf48279 100644 --- a/providers/openai/responses_params_test.go +++ b/providers/openai/responses_params_test.go @@ -5,6 +5,7 @@ import ( "testing" "charm.land/fantasy" + "github.com/charmbracelet/openai-go/responses" "github.com/stretchr/testify/require" ) @@ -242,7 +243,7 @@ func TestResponsesProviderMetadata_Helper(t *testing.T) { t.Run("non-empty id", func(t *testing.T) { t.Parallel() - metadata := responsesProviderMetadata("resp_123") + metadata := responsesProviderMetadata(responses.Response{ID: "resp_123"}) require.Len(t, metadata, 1) providerMetadata, ok := metadata[Name].(*ResponsesProviderMetadata) @@ -253,7 +254,7 @@ func TestResponsesProviderMetadata_Helper(t *testing.T) { t.Run("empty id", func(t *testing.T) { t.Parallel() - metadata := responsesProviderMetadata("") + metadata := responsesProviderMetadata(responses.Response{}) require.Empty(t, metadata) }) } diff --git a/providers/openai/responses_reasoning_replay_test.go b/providers/openai/responses_reasoning_replay_test.go new file mode 100644 index 000000000..0c9b98d5f --- /dev/null +++ b/providers/openai/responses_reasoning_replay_test.go @@ -0,0 +1,129 @@ +package openai + +import ( + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesEncryptedReasoningReplay(t *testing.T) { + t.Parallel() + for _, tc := range []struct { + name string + repeat bool + tool bool + encrypted bool + legacy bool + }{ + {name: "reasoning only", encrypted: true}, + {name: "before tool call", encrypted: true, tool: true}, + {name: "duplicate fragments", encrypted: true, repeat: true}, + {name: "no encrypted content", tool: true}, + {name: "unfinalized metadata", encrypted: true, legacy: true, tool: true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + metadata := &ResponsesReasoningMetadata{ItemID: "rs_1", Summary: []string{"first", "second"}, Finalized: !tc.legacy} + if tc.encrypted { + metadata.EncryptedContent = new("encrypted-final") + } + part := fantasy.ReasoningPart{Text: "first\nsecond", ProviderOptions: fantasy.ProviderOptions{Name: metadata}} + msg := fantasy.Message{Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{part}} + if tc.repeat { + msg.Content = append(msg.Content, part) + } + if tc.tool { + msg.Content = append(msg.Content, fantasy.ToolCallPart{ToolCallID: "call_1", ToolName: "echo", Input: `{}`}) + } + input, warnings := toResponsesPrompt(fantasy.Prompt{msg}, "system", false) + require.Empty(t, warnings) + want := 0 + replayed := tc.encrypted && !tc.legacy + if replayed { + want++ + } + if tc.tool { + want++ + } + require.Len(t, input, want) + if replayed { + reasoning := input[0].OfReasoning + require.NotNil(t, reasoning) + require.Equal(t, "rs_1", reasoning.ID) + require.Equal(t, "encrypted-final", reasoning.EncryptedContent.Value) + require.Len(t, reasoning.Summary, 2) + require.Equal(t, "first", reasoning.Summary[0].Text) + require.Equal(t, "second", reasoning.Summary[1].Text) + } + }) + } +} + +func TestResponsesStreamFinalReasoningMetadata(t *testing.T) { + t.Parallel() + for _, initial := range []string{"", "partial-encrypted"} { + t.Run(initial, func(t *testing.T) { + t.Parallel() + sms := newStreamingMockServer() + defer sms.close() + sms.chunks = []string{ + responsesSSEEvent("response.output_item.added", `{"type":"response.output_item.added","output_index":0,"item":{"id":"rs_1","type":"reasoning","encrypted_content":"`+initial+`","summary":[]}}`), + responsesSSEEvent("response.output_item.done", `{"type":"response.output_item.done","output_index":0,"item":{"id":"rs_1","type":"reasoning","encrypted_content":"encrypted-final","summary":[{"type":"summary_text","text":"complete summary"}]}}`), + responsesSSEEvent("response.completed", `{"type":"response.completed","response":{"id":"resp_1","status":"completed","output":[],"usage":{"input_tokens":1,"output_tokens":1,"total_tokens":2}}}`), + } + m := newResponsesProvider(t, sms.server.URL) + stream, err := m.Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + var metadata *ResponsesReasoningMetadata + for part := range stream { + require.NotEqual(t, fantasy.StreamPartTypeError, part.Type) + if part.Type == fantasy.StreamPartTypeReasoningStart { + if started := GetReasoningMetadata(fantasy.ProviderOptions(part.ProviderMetadata)); started != nil { + require.False(t, started.Finalized) + } + } + if part.Type == fantasy.StreamPartTypeReasoningEnd { + metadata = GetReasoningMetadata(fantasy.ProviderOptions(part.ProviderMetadata)) + } + } + require.NotNil(t, metadata) + require.NotNil(t, metadata.EncryptedContent) + require.Equal(t, "encrypted-final", *metadata.EncryptedContent) + require.Equal(t, []string{"complete summary"}, metadata.Summary) + require.True(t, metadata.Finalized) + }) + } +} + +func TestResponsesGenerateFinalReasoningMetadata(t *testing.T) { + t.Parallel() + server := newMockServer() + defer server.close() + server.response = map[string]any{ + "id": "resp_1", + "object": "response", + "status": "completed", + "model": "gpt-5", + "output": []any{ + map[string]any{"id": "rs_1", "type": "reasoning", "encrypted_content": "encrypted-final", "summary": []any{}}, + map[string]any{"id": "msg_1", "type": "message", "role": "assistant", "status": "completed", "content": []any{ + map[string]any{"type": "output_text", "text": "done", "annotations": []any{}}, + }}, + }, + "usage": map[string]any{"input_tokens": 1, "output_tokens": 1, "total_tokens": 2}, + } + m := newResponsesProvider(t, server.server.URL) + resp, err := m.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + var metadata *ResponsesReasoningMetadata + for _, c := range resp.Content { + if r, ok := c.(fantasy.ReasoningContent); ok { + metadata = GetReasoningMetadata(fantasy.ProviderOptions(r.ProviderMetadata)) + } + } + require.NotNil(t, metadata) + require.True(t, metadata.Finalized) + require.Equal(t, "encrypted-final", *metadata.EncryptedContent) + require.Equal(t, []string{}, metadata.Summary) +} diff --git a/providers/openai/responses_service_tier_test.go b/providers/openai/responses_service_tier_test.go new file mode 100644 index 000000000..eff7d0008 --- /dev/null +++ b/providers/openai/responses_service_tier_test.go @@ -0,0 +1,90 @@ +package openai + +import ( + "encoding/json" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesEchoedServiceTier(t *testing.T) { + t.Parallel() + for _, tier := range []string{"default", "flex", "priority", ""} { + for _, status := range []string{"completed", "incomplete"} { + t.Run(status+"/"+tier, func(t *testing.T) { + t.Parallel() + response := map[string]any{"id": "resp_1", "status": status, "output": []any{map[string]any{"type": "message", "id": "msg_1", "content": []any{map[string]any{"type": "output_text", "text": `{"answer":"yes"}`}}}}} + if tier != "" { + response["service_tier"] = tier + } + options := NewResponsesProviderOptions(&ResponsesProviderOptions{ServiceTier: new(ServiceTierPriority)}) + server := newMockServer() + defer server.close() + server.response = response + model := newResponsesProvider(t, server.server.URL) + generated, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt, ProviderOptions: options}) + require.NoError(t, err) + checkResponsesServiceTier(t, generated.ProviderMetadata, tier) + schema := fantasy.Schema{Type: "object", Properties: map[string]*fantasy.Schema{"answer": {Type: "string"}}, Required: []string{"answer"}} + object, err := model.GenerateObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema, ProviderOptions: options}) + require.NoError(t, err) + checkResponsesServiceTier(t, object.ProviderMetadata, tier) + streamServer := newStreamingMockServer() + defer streamServer.close() + event := "response." + status + data, err := json.Marshal(map[string]any{"type": event, "response": response}) + require.NoError(t, err) + streamServer.chunks = []string{ + responsesSSEEvent("response.created", `{"type":"response.created","response":{"id":"resp_1","status":"in_progress","service_tier":"auto"}}`), + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","item_id":"msg_1","delta":"{\"answer\":\"yes\"}"}`), + responsesSSEEvent(event, string(data)), + } + streamModel := newResponsesProvider(t, streamServer.server.URL) + stream, err := streamModel.Stream(t.Context(), fantasy.Call{Prompt: testPrompt, ProviderOptions: options}) + require.NoError(t, err) + seen := false + for part := range stream { + require.NoError(t, part.Error) + if part.Type == fantasy.StreamPartTypeFinish { + seen = true + checkResponsesServiceTier(t, part.ProviderMetadata, tier) + } + } + require.True(t, seen) + objects, err := streamModel.StreamObject(t.Context(), fantasy.ObjectCall{Prompt: testPrompt, Schema: schema, ProviderOptions: options}) + require.NoError(t, err) + seen = false + for part := range objects { + require.NoError(t, part.Error) + if part.Type == fantasy.ObjectStreamPartTypeFinish { + seen = true + checkResponsesServiceTier(t, part.ProviderMetadata, tier) + } + } + require.True(t, seen) + }) + } + } +} + +func checkResponsesServiceTier(t *testing.T, metadata fantasy.ProviderMetadata, tier string) { + t.Helper() + data, err := json.Marshal(metadata) + require.NoError(t, err) + var raw map[string]json.RawMessage + require.NoError(t, json.Unmarshal(data, &raw)) + restored, err := fantasy.UnmarshalProviderMetadata(raw) + require.NoError(t, err) + data, err = json.Marshal(restored[Name]) + require.NoError(t, err) + var wrapper struct { + Data map[string]any `json:"data"` + } + require.NoError(t, json.Unmarshal(data, &wrapper)) + if tier == "" { + require.NotContains(t, wrapper.Data, "service_tier") + } else { + require.Equal(t, tier, wrapper.Data["service_tier"]) + } +} diff --git a/providers/openai/responses_text_replay_test.go b/providers/openai/responses_text_replay_test.go new file mode 100644 index 000000000..e2150adcc --- /dev/null +++ b/providers/openai/responses_text_replay_test.go @@ -0,0 +1,85 @@ +package openai + +import ( + "encoding/json" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesTextReplay(t *testing.T) { + t.Parallel() + server := newMockServer() + defer server.close() + server.response = map[string]any{ + "id": "resp_1", "status": "completed", + "output": []any{map[string]any{"id": "msg_1", "type": "message", "role": "assistant", "status": "completed", "phase": "final_answer", "content": []any{map[string]any{"type": "output_text", "text": "done", "annotations": []any{}}, map[string]any{"type": "output_text", "text": "again", "annotations": []any{}}}}}, + } + model := newResponsesProvider(t, server.server.URL) + response, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + text := response.Content[0].(fantasy.TextContent) + require.NotEmpty(t, text.ProviderMetadata) + // Use the public JSON format that history storage uses. + data, err := json.Marshal(text.ProviderMetadata) + require.NoError(t, err) + var raw map[string]json.RawMessage + require.NoError(t, json.Unmarshal(data, &raw)) + metadata, err := fantasy.UnmarshalProviderOptions(raw) + require.NoError(t, err) + for _, store := range []bool{false, true} { + _, err := model.Generate(t.Context(), fantasy.Call{ + Prompt: fantasy.Prompt{{Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{fantasy.TextPart{Text: text.Text, ProviderOptions: fantasy.ProviderOptions(metadata)}, fantasy.TextPart{Text: "again", ProviderOptions: fantasy.ProviderOptions(metadata)}, fantasy.TextPart{Text: "next", ProviderOptions: fantasy.ProviderOptions{Name: &ResponsesTextMetadata{ItemID: "msg_2"}}}}}}, + ProviderOptions: NewResponsesProviderOptions(&ResponsesProviderOptions{Store: &store}), + }) + require.NoError(t, err) + input := server.calls[len(server.calls)-1].body["input"].([]any)[0].(map[string]any) + if store { + require.NotContains(t, input, "id") + require.NotContains(t, input, "phase") + } else { + require.Len(t, server.calls[len(server.calls)-1].body["input"], 2) + require.Len(t, input["content"], 2) + require.Equal(t, "again", input["content"].([]any)[1].(map[string]any)["text"]) + require.Equal(t, "msg_1", input["id"]) + require.Equal(t, "final_answer", input["phase"]) + require.Equal(t, "completed", input["status"]) + require.Equal(t, "output_text", input["content"].([]any)[0].(map[string]any)["type"]) + } + } +} + +func TestResponsesStreamTextMetadata(t *testing.T) { + t.Parallel() + server := newStreamingMockServer() + defer server.close() + server.chunks = []string{ + responsesSSEEvent("response.output_item.added", `{"type":"response.output_item.added","output_index":0,"item":{"id":"msg_1","type":"message","phase":"commentary","role":"assistant","content":[]}}`), + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","item_id":"msg_1","delta":"done"}`), + responsesSSEEvent("response.output_item.done", `{"type":"response.output_item.done","output_index":0,"item":{"id":"msg_1","type":"message","phase":"final_answer","role":"assistant","content":[]}}`), + responsesSSEEvent("response.completed", `{"type":"response.completed","response":{"id":"resp_1","status":"completed","output":[]}}`), + } + stream, err := newResponsesProvider(t, server.server.URL).Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + seen := 0 + for part := range stream { + require.NoError(t, part.Error) + if part.Type != fantasy.StreamPartTypeTextStart && part.Type != fantasy.StreamPartTypeTextEnd { + continue + } + seen++ + require.NotEmpty(t, part.ProviderMetadata) + data, err := json.Marshal(part.ProviderMetadata[Name]) + require.NoError(t, err) + var fields map[string]any + require.NoError(t, json.Unmarshal(data, &fields)) + require.Equal(t, "msg_1", fields["data"].(map[string]any)["item_id"]) + phase := "commentary" + if part.Type == fantasy.StreamPartTypeTextEnd { + phase = "final_answer" + } + require.Equal(t, phase, fields["data"].(map[string]any)["phase"]) + } + require.Equal(t, 2, seen) +} diff --git a/providers/openai/responses_tool_replay_test.go b/providers/openai/responses_tool_replay_test.go new file mode 100644 index 000000000..39afe7294 --- /dev/null +++ b/providers/openai/responses_tool_replay_test.go @@ -0,0 +1,109 @@ +package openai + +import ( + "encoding/json" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestResponsesFunctionCallMetadata(t *testing.T) { + t.Parallel() + server := newMockServer() + defer server.close() + server.response = map[string]any{ + "id": "resp_1", "status": "completed", "output": []any{ + map[string]any{"id": "rs_1", "type": "reasoning", "encrypted_content": "encrypted", "summary": []any{}}, + map[string]any{"id": "fc_1", "type": "function_call", "call_id": "call_1", "name": "echo", "arguments": "{}"}, + }, + } + model := newResponsesProvider(t, server.server.URL) + response, err := model.Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + call := response.Content[1].(fantasy.ToolCallContent) + require.Equal(t, "fc_1", call.ProviderMetadata[Name].(*ResponsesToolCallMetadata).ItemID) + reasoning := response.Content[0].(fantasy.ReasoningContent) + for _, id := range []string{"fc_1", "ctc_1", "foreign", ""} { + for _, store := range []bool{false, true} { + msg := fantasy.Message{Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{ + fantasy.ReasoningPart{ProviderOptions: fantasy.ProviderOptions(reasoning.ProviderMetadata)}, + fantasy.ToolCallPart{ToolCallID: call.ToolCallID, ToolName: call.ToolName, Input: call.Input, ProviderOptions: fantasy.ProviderOptions{Name: &ResponsesToolCallMetadata{ItemID: id}}}, + }} + data, err := json.Marshal(msg) + require.NoError(t, err) + var saved fantasy.Message + require.NoError(t, json.Unmarshal(data, &saved)) + _, err = model.Generate(t.Context(), fantasy.Call{Prompt: fantasy.Prompt{saved}, ProviderOptions: NewResponsesProviderOptions(&ResponsesProviderOptions{Store: &store})}) + require.NoError(t, err) + input := server.calls[len(server.calls)-1].body["input"].([]any) + index := 0 + if !store { + require.Equal(t, "reasoning", input[0].(map[string]any)["type"]) + index = 1 + } + wire := input[index].(map[string]any) + require.Equal(t, "function_call", wire["type"]) + require.Equal(t, "call_1", wire["call_id"]) + if !store && id == "fc_1" { + require.Equal(t, id, wire["id"]) + } else { + require.NotContains(t, wire, "id") + } + } + } +} + +func TestResponsesStreamFunctionCallMetadata(t *testing.T) { + t.Parallel() + server := newStreamingMockServer() + defer server.close() + server.chunks = []string{ + responsesSSEEvent("response.output_item.added", `{"type":"response.output_item.added","output_index":0,"item":{"id":"fc_1","type":"function_call","call_id":"call_1","name":"echo","arguments":""}}`), + responsesSSEEvent("response.function_call_arguments.delta", `{"type":"response.function_call_arguments.delta","output_index":0,"item_id":"fc_1","delta":"{}"}`), + responsesSSEEvent("response.output_item.done", `{"type":"response.output_item.done","output_index":0,"item":{"id":"fc_1","type":"function_call","call_id":"call_1","name":"echo","arguments":"{}"}}`), + responsesSSEEvent("response.completed", `{"type":"response.completed","response":{"id":"resp_1","status":"completed","output":[]}}`), + } + stream, err := newResponsesProvider(t, server.server.URL).Stream(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + seen := 0 + for part := range stream { + require.NoError(t, part.Error) + switch part.Type { + case fantasy.StreamPartTypeToolInputStart, fantasy.StreamPartTypeToolInputDelta, fantasy.StreamPartTypeToolInputEnd, fantasy.StreamPartTypeToolCall: + seen++ + require.Equal(t, "call_1", part.ID) + require.Equal(t, "fc_1", part.ProviderMetadata[Name].(*ResponsesToolCallMetadata).ItemID) + } + } + require.Equal(t, 4, seen) +} + +func TestResponsesGenerateKeepsReasoningCallOrder(t *testing.T) { + t.Parallel() + server := newMockServer() + defer server.close() + server.response = map[string]any{"id": "resp_1", "status": "completed", "output": []any{ + map[string]any{"id": "rs_1", "type": "reasoning", "encrypted_content": "first", "summary": []any{}}, + map[string]any{"id": "fc_1", "type": "function_call", "call_id": "call_1", "name": "echo", "arguments": "{}"}, + map[string]any{"id": "rs_2", "type": "reasoning", "encrypted_content": "second", "summary": []any{}}, + map[string]any{"id": "fc_2", "type": "function_call", "call_id": "call_2", "name": "echo", "arguments": "{}"}, + }} + response, err := newResponsesProvider(t, server.server.URL).Generate(t.Context(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + require.Len(t, response.Content, 4) + require.Equal(t, fantasy.ContentTypeReasoning, response.Content[0].GetType()) + require.Equal(t, "call_1", response.Content[1].(fantasy.ToolCallContent).ToolCallID) + require.Equal(t, fantasy.ContentTypeReasoning, response.Content[2].GetType()) + require.Equal(t, "call_2", response.Content[3].(fantasy.ToolCallContent).ToolCallID) +} + +func TestResponsesNilToolCallMetadata(t *testing.T) { + t.Parallel() + input, warnings := toResponsesPrompt(fantasy.Prompt{{Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "call_1", ToolName: "echo", Input: "{}", ProviderOptions: fantasy.ProviderOptions{Name: (*ResponsesToolCallMetadata)(nil)}}, + }}}, "system", false) + require.Empty(t, warnings) + require.Len(t, input, 1) + require.False(t, input[0].OfFunctionCall.ID.Valid()) +} diff --git a/providers/openai/stream_terminal_test.go b/providers/openai/stream_terminal_test.go new file mode 100644 index 000000000..356dba101 --- /dev/null +++ b/providers/openai/stream_terminal_test.go @@ -0,0 +1,82 @@ +package openai + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestStreamRequireFinishReason(t *testing.T) { + t.Parallel() + for _, tc := range []struct { + name string + strict bool + reason string + done bool + wantError bool + wantTool bool + }{ + {name: "strict socket close", strict: true, wantError: true}, + {name: "strict done without reason", strict: true, done: true, wantError: true}, + {name: "compatible default", wantTool: true}, + {name: "strict tool completion", strict: true, reason: "tool_calls", done: true, wantTool: true}, + {name: "strict stop with tool", strict: true, reason: "stop", done: true, wantTool: true}, + {name: "strict truncated tool", strict: true, reason: "length", done: true}, + } { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/event-stream") + fmt.Fprint(w, `data: {"id":"chat_1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_1","type":"function","function":{"name":"echo","arguments":"{\"value\":7}"}}]},"finish_reason":null}]}`+"\n\n") + if tc.reason != "" { + fmt.Fprintf(w, "data: {\"id\":\"chat_1\",\"object\":\"chat.completion.chunk\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":%q}]}\n\n", tc.reason) + } + if tc.done { + fmt.Fprint(w, "data: [DONE]\n\n") + } + })) + defer s.Close() + opts := []Option{WithBaseURL(s.URL), WithAPIKey("fixture")} + if tc.strict { + opts = append(opts, WithLanguageModelOptions(WithLanguageModelRequireFinishReason())) + } + p, err := New(opts...) + require.NoError(t, err) + m, err := p.LanguageModel(t.Context(), "fixture-model") + require.NoError(t, err) + stream, err := m.Stream(t.Context(), fantasy.Call{Prompt: fantasy.Prompt{fantasy.NewUserMessage("echo")}}) + require.NoError(t, err) + var errors, finishes, tools, ends int + for part := range stream { + switch part.Type { + case fantasy.StreamPartTypeError: + errors++ + requireRetryableUnexpectedEOF(t, part.Error) + case fantasy.StreamPartTypeFinish: + finishes++ + case fantasy.StreamPartTypeToolCall: + tools++ + case fantasy.StreamPartTypeToolInputEnd: + ends++ + } + } + if tc.wantError { + require.Equal(t, 1, errors) + require.Zero(t, finishes) + require.Zero(t, ends) + } else { + require.Zero(t, errors) + require.Equal(t, 1, finishes) + } + if tc.wantTool { + require.Equal(t, 1, tools) + } else { + require.Zero(t, tools) + } + }) + } +} diff --git a/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool.yaml b/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool.yaml index 5de0aa829..baa3b72aa 100644 --- a/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool.yaml +++ b/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool.yaml @@ -193,9 +193,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 714 + content_length: 775 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_z1COPRxqJjjzIcXQ8ghwnioC","name":"weather","type":"function_call"},{"call_id":"call_z1COPRxqJjjzIcXQ8ghwnioC","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_z1COPRxqJjjzIcXQ8ghwnioC","name":"weather","type":"function_call","id":"fc_00e5a268bd4f498e016a3c11837d748193871672cbe1407d2c"},{"call_id":"call_z1COPRxqJjjzIcXQ8ghwnioC","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool_streaming.yaml b/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool_streaming.yaml index 198f1a117..fcac7dc3b 100644 --- a/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool_streaming.yaml +++ b/providertests/testdata/TestAzureResponsesCommon/azure-gpt-5-mini/tool_streaming.yaml @@ -83,9 +83,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 728 + content_length: 789 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_zLPcxu60T5jzGjuiRIvlkoSt","name":"weather","type":"function_call"},{"call_id":"call_zLPcxu60T5jzGjuiRIvlkoSt","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_zLPcxu60T5jzGjuiRIvlkoSt","name":"weather","type":"function_call","id":"fc_08521e071015afca016a3c118a75a081958ecd832ff0e67b25"},{"call_id":"call_zLPcxu60T5jzGjuiRIvlkoSt","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool.yaml b/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool.yaml index a7d7f7bd7..0863d7d80 100644 --- a/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool.yaml +++ b/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool.yaml @@ -193,9 +193,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 711 + content_length: 772 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_IGW3vuAPuvzl8LXGlagSAxaT","name":"weather","type":"function_call"},{"call_id":"call_IGW3vuAPuvzl8LXGlagSAxaT","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_IGW3vuAPuvzl8LXGlagSAxaT","name":"weather","type":"function_call","id":"fc_019ff363f9805048016a3c1193bff081958dc43c8c346f97cd"},{"call_id":"call_IGW3vuAPuvzl8LXGlagSAxaT","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool_streaming.yaml b/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool_streaming.yaml index ca72382e4..dbe047aa3 100644 --- a/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool_streaming.yaml +++ b/providertests/testdata/TestAzureResponsesCommon/azure-o4-mini/tool_streaming.yaml @@ -83,9 +83,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 725 + content_length: 786 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_iYO0n3telKobYKUdU5SVySH6","name":"weather","type":"function_call"},{"call_id":"call_iYO0n3telKobYKUdU5SVySH6","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_iYO0n3telKobYKUdU5SVySH6","name":"weather","type":"function_call","id":"fc_050d33cc59b578f5016a3c119914a88194951101cfa0446ab6"},{"call_id":"call_iYO0n3telKobYKUdU5SVySH6","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml index 810ea565a..59e38a668 100644 --- a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml +++ b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml @@ -353,9 +353,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 793 + content_length: 3196 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_ylSv4Nh5Sjuh7A6vOintVfwF","name":"weather","type":"function_call"},{"call_id":"call_ylSv4Nh5Sjuh7A6vOintVfwF","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"encrypted_content":"gAAAAABqPBGr7nnEI4VIL9-IqFeO9pgvdt1Ka9HR0SFBoMVyCmLOv1ucLR5ImX-wNBUjoJ-kHw-7k-yBEm-ipXOd-nerxErWjTIDIMe9Txt7uVA4XnkPZuMNE1dw7cE6cffDvkmDhDPsAPTxWX6umBEucuvuPtW8ZWxnllKmeo5O_qj1q26hC_Oy8zXuyauOCw9IRhWtDvVePPLSDVY34ZXnxw-YL34Lnry0vBndPGHdFPThr4N-a9UNF3rupFZ3XrZG4PpjLC7pr4CWbCKTYsy1hNbiFiGqsA-DbEE8QdgMHLxcSD3l9-quBBDzo361DPJt013NVkKr2xSzoEXSVxKMFZYJURbpq8d4IVmruekC6TKO5AmqxeX-wL49RVZMDKmclf4eXyNIBSr41FXs1z4tRf5JdTqai2ZHU6h3pqa93-zQcM4R-muroaUKyxCp-HjpBQ2VtN-cvNy5x1XJovabzu5liAkdieGyqrWNELmWGO0ZHiw6PjlA5f6sFvDTOsNFqWdsWZI1k2y_16RmEKL5lCYHABKTx1Og_uahmwnblv72TWZZCgRo-0mJT7zshJUf_Qp_kgeDeETQly1JzGbsNRTYr8lQ3CZHmt_mZIGgJyXuv3A_9ms41XP1RkwMRdpFRF8qReZ3gTto1Ama0TZ3ciVHDEL83QW57soHeE-htKEDNFGVAJ47FPjyZ9GwvUu86SY3q-wC_NMgQ7PPlkRfW-3xmhWDS3etgYiru1AyPz_fEexOeNtbjB7Q9jfp_-RjJ32IIvNJPPT08cej5rJ58tHz6Di3b0nuVC1VprBQMVExfICI2n0kvxCPNYmz3mn4iOHdMYgFNURdI4OV6B8X-o1hLOSsQqn2hkDTlj5RuuI4H8SFw-8CAhrb4tHjzaVKvglSEJUtWJlgR1lkA-GQiO5CktJAK6GsOxye58pbUk6ZJMzNAQjKnT7M95_HkVZpjGaZhZBVFhvuUI357Fzp1ImYxscMkb3kAIVzZLNNHu8ida3oY4qdPHPtYDMezadSn6CPPdJ_M-JRlC9uWmqL__hCeRj90qkc8NCkRL7tTHsYMfGwvEkcCDDeN8p3R6Q2kBjm0m9bKJDqf1mF8L4jASdm6WrdaI3cDTFo0lS_9XLnXeWMPTI8kMZ4ml-LOa0ZMD6YgxlOn3VTGRrJ6Zk3tzik7a4JRJjS2VtgX-5FRfhSGcwluhSCHP_rgcFKgtU3AyzX1u0UUXuP3ePpWQ6M1jSo-ViavjaGLk1YO8CyriR6U07ITrbyHMeXJjgGc_a8M3wrg35i7SkhVGlGLyY242I7VNxebEvEjvIhBaeqa5wUlmGCd5_gk4Ay0MOi94csvigzWVwNe0LasWOGaB4Y9mgF1UX0urgfjkGO1gxZQe4Nn-EyGbPC9Kez5MLu2nzrFNloDtEBwHhp9ULj6JldiDy5H-5A1HWrSQZanHpTQSfp7DoXUoULrOEnVpSL_VM5jOP4NX_A6FwCj-dJfmVy-T2SavJb4WOQbrZOnCbZJn-f66DClWbUgHAfYezQ5jE6voP-vPBu1tWwatxrXeB5IHyckfE6GcS3KLIICchmYy3zyuIOtUOD2VhxEYNxPXnlooK4fBbwTU1yEBZ94jk4H_RYpOaROaWKrAStQ4pb5GtsAhI1ehMd8kybgwrzE-rzhKhE-vp-mlydvzWNyS9v0sRrQauQpS2ihRyU0-s3CnMp_HZZvmE=","id":"rs_06c839edbdd88254016a3c11a93e1481908acf9bbba9834b75","summary":[{"text":"**Getting weather for Florence**\n\nThe user wants to know the current weather in Florence, Italy. I’ll use the functions.weather tool to get that information. No need for complex multi-tool usage here. I’ll present the data in a concise way, including temperature, conditions, humidity, wind, and maybe time of observation, while indicating the units. I should also check with the user if they want the forecast or hourly details. Let’s call functions.weather now!","type":"summary_text"}],"type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_ylSv4Nh5Sjuh7A6vOintVfwF","name":"weather","type":"function_call","id":"fc_06c839edbdd88254016a3c11ab9f1c819084fd5aef02a61a57"},{"call_id":"call_ylSv4Nh5Sjuh7A6vOintVfwF","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"store":false,"stream":true,"tool_choice":"auto","tools":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false,"type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml index adeb586db..90c16abca 100644 --- a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml +++ b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml @@ -199,9 +199,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 779 + content_length: 2952 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_vV0VlY1cmzQxHRify97kgtE0","name":"weather","type":"function_call"},{"call_id":"call_vV0VlY1cmzQxHRify97kgtE0","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"encrypted_content":"gAAAAABqPBGg_398aCndRHh9AcP5uDVN4oXAq3utyyqzTqH51hOGXd3gfi95QM5K8Arn1QaF5woH3D58bUJyMmDWiU0ntSQb8kE1iiVegiTYGkHYMpUhpTbuZv1COOhjHhJkK07TJIKm8_uAswJdJYFeSfEAi1vBiBODUjmnzEhjQqNP_O4fpxZxrJG2INLa3kDrfOUyYx9hRejMMYDxSDroU9o7f13nF5mYENSAnJai6ZEMrDNGu3Ph93W2FEyb8PZp3MyrXBN0eFW9i3aZvzuqkRr-lwdsm-QRsITZDSNOjYzXjqTSB4rfWtgTE674NAsz60ArndPslDRFoOUEz2SJgWEsi4mVPvgXR-f72007WfE3sd_ac8IJn3P64QnGtapgKgjGdWJMupQrY80HsgNOUgxKn1kS-iQ5wz42CztYO9t3HvCYNOm1AtMRildfrRB3-4n8JzK5k4ah-SnNZoUoK5N5jCCU9dLocGUHFqaGadr5kcFDdy4__otSDyz-02p6Ay9yydWJ9zHEL4yPhzP1clCkih_deaGeDjnWNPQw0jsoVr1QrSL7FMemmZt8MLoRn7s0ZJM0UCQdzIKl4diLdZTPhGZrAFZttMij6ocYQNFXoEFi9NBWqUiacRsDInvWe3vimvnKOnPD2iYPzW_YE6QPBfz5nHH5GPEm0rsSbEs2Ht013zpEwTDHfa21P1rEaE6NzSTPLT5_92hW1tBZGUIdom0ZlDDBNmoBfy536la6qJn6Ty7eQtq1Iqow4kBbOAG4VRVv3Lrc3DD39gBIij6aqxtRL1-SuI0pQA1bgFHdJjav0TI-d1R7ZGFIfSFh6xvCqrWccHWelzjdjbg6NEZegGNXzQCTEZ8xzwYTUifgPWwAyLD_ErbDXlVK9HXtG9Tufp-HI7AiD8WYsNJrGxvWEHRqwuUaGQMDOoLttZZ3vArk0rfkD_MNrcw0IjN0QzLU9f3PcOjP6LvEF8F8lCZVvtA2tuAy7od_XOnvpkomc9QWaT2bsp7j9XCtvYuR3rfY66i3CAi6V00-MU4ADAmgGjDVv4wN4y8v-gsqhnrKyIqcdYeoL2MtwV4EZnZwUlev14wVRMfOb0LApVelS3kE5cTAWRFrMhGiRg5-S4MqznC8U-Xz1fMsuWf2Bcn-zYhpGPMzLWlniJ1dWQCG1KZ0K-6b0m8P5riTPGjEvqov-K2gLu_6yruuALcN1lC3ONMYQtWr74K4NnnLSSPaOg9GZKOspQQNwLj4aFuUfEZKkwTjBuBHU5-iKtPapLjQJTax6nDlAQnBpEj_WABGxRbzI7Daho5JK7o_lsLgZfnQkOvOHHZNrSxKWbC0i0jbwVMT0hn1i7KVQwe-0RTKHonnhC3Vnqocu52MwE4n4hQIH5qGL2mswQXVCv9uVs-RWZrJ05_xaJqESb11KMIen8RZU41-wg_xn6megkBLJP4FmiQuhklbYcG1UQyUQuWiojdkCJ3abQgM7TOzuamyeSaICz22fCDyzw-1hAs-BTAyxA42Eh4=","id":"rs_01c32cb1aac1c6d7016a3c119b346c8197b37f47689a11a452","summary":[{"text":"**Retrieving Florence weather**\n\nThe user wants to know the weather in Florence, Italy. To get this information, I should use the weather function tool. It sounds straightforward, as I only need to call this tool once, so I won’t need the multi-tool wrapper. I’ll use the functions.weather with the specified location. After that, I''ll return the results in the commentary channel. Let''s proceed with that call for the weather!","type":"summary_text"}],"type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_vV0VlY1cmzQxHRify97kgtE0","name":"weather","type":"function_call","id":"fc_01c32cb1aac1c6d7016a3c11a02aa081978493f95d5da73116"},{"call_id":"call_vV0VlY1cmzQxHRify97kgtE0","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"store":false,"tool_choice":"auto","tools":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false,"type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool.yaml index d74d2b8b4..0cdb0a596 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool.yaml @@ -158,9 +158,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1242 + content_length: 1364 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_4duuhyRqgE5yacjdB7N3qLs3","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_R9NaXdicUFYsl6ROHrFdxe2A","name":"multiply","type":"function_call"},{"call_id":"call_4duuhyRqgE5yacjdB7N3qLs3","output":"5","type":"function_call_output"},{"call_id":"call_R9NaXdicUFYsl6ROHrFdxe2A","output":"6","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_4duuhyRqgE5yacjdB7N3qLs3","name":"add","type":"function_call","id":"fc_0080d7ac46927739016a3c1211ead881a0b79e8c154b90ea97"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_R9NaXdicUFYsl6ROHrFdxe2A","name":"multiply","type":"function_call","id":"fc_0080d7ac46927739016a3c1211eae481a09556917026b86270"},{"call_id":"call_4duuhyRqgE5yacjdB7N3qLs3","output":"5","type":"function_call_output"},{"call_id":"call_R9NaXdicUFYsl6ROHrFdxe2A","output":"6","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool_streaming.yaml index e754c0f41..cbc29bddc 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/multi_tool_streaming.yaml @@ -68,9 +68,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1239 + content_length: 1361 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_ZckkKeJQwcJPC27VXT61xFLf","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_M9h2AZgoLEv6q5gkex1QMtm2","name":"multiply","type":"function_call"},{"call_id":"call_ZckkKeJQwcJPC27VXT61xFLf","output":"5","type":"function_call_output"},{"call_id":"call_M9h2AZgoLEv6q5gkex1QMtm2","output":"6","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_ZckkKeJQwcJPC27VXT61xFLf","name":"add","type":"function_call","id":"fc_00483e9118f52e4c016a3c12160b80819db632c047c5399c42"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_M9h2AZgoLEv6q5gkex1QMtm2","name":"multiply","type":"function_call","id":"fc_00483e9118f52e4c016a3c12160ba0819d83931caa31f0a841"},{"call_id":"call_ZckkKeJQwcJPC27VXT61xFLf","output":"5","type":"function_call_output"},{"call_id":"call_M9h2AZgoLEv6q5gkex1QMtm2","output":"6","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool.yaml index 3ed5f9de1..e7669a386 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool.yaml @@ -122,9 +122,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 712 + content_length: 773 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_XX4zIshrJWNnM1Z3n6XsaSxP","name":"weather","type":"function_call"},{"call_id":"call_XX4zIshrJWNnM1Z3n6XsaSxP","output":"40 C","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_XX4zIshrJWNnM1Z3n6XsaSxP","name":"weather","type":"function_call","id":"fc_0d9e9b38807e0d8a016a3c120cb92c81a193e05ae6e58246c3"},{"call_id":"call_XX4zIshrJWNnM1Z3n6XsaSxP","output":"40 C","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool_streaming.yaml index fccdbe391..0b55373b5 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o-mini/tool_streaming.yaml @@ -77,9 +77,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 726 + content_length: 787 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_4TL7SrUyTg60nSUcfgeWLFXO","name":"weather","type":"function_call"},{"call_id":"call_4TL7SrUyTg60nSUcfgeWLFXO","output":"40 C","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_4TL7SrUyTg60nSUcfgeWLFXO","name":"weather","type":"function_call","id":"fc_0befc33218ec8037016a3c120f4b78819d83774530a8accd94"},{"call_id":"call_4TL7SrUyTg60nSUcfgeWLFXO","output":"40 C","type":"function_call_output"}],"model":"gpt-4o-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool.yaml index b407c37f8..b30aa1118 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool.yaml @@ -158,9 +158,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1237 + content_length: 1359 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_IAQ7c0mnAiAE89MUQa42HQy4","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_gXYDdXX5Ld6zWOSpIAh0QHPr","name":"multiply","type":"function_call"},{"call_id":"call_IAQ7c0mnAiAE89MUQa42HQy4","output":"5","type":"function_call_output"},{"call_id":"call_gXYDdXX5Ld6zWOSpIAh0QHPr","output":"6","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_IAQ7c0mnAiAE89MUQa42HQy4","name":"add","type":"function_call","id":"fc_0038f9f9083d2c12016a3c12036e2881a28509892751dc2fc0"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_gXYDdXX5Ld6zWOSpIAh0QHPr","name":"multiply","type":"function_call","id":"fc_0038f9f9083d2c12016a3c12036e3881a286625edab78f7ac4"},{"call_id":"call_IAQ7c0mnAiAE89MUQa42HQy4","output":"5","type":"function_call_output"},{"call_id":"call_gXYDdXX5Ld6zWOSpIAh0QHPr","output":"6","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool_streaming.yaml index 7910a74ee..4162bef89 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/multi_tool_streaming.yaml @@ -68,9 +68,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1234 + content_length: 1356 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_NnEvpiwdL8XrZ6F3T9VJyVw7","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_TQ8336oa6YnuT2leYzRDBBLz","name":"multiply","type":"function_call"},{"call_id":"call_NnEvpiwdL8XrZ6F3T9VJyVw7","output":"5","type":"function_call_output"},{"call_id":"call_TQ8336oa6YnuT2leYzRDBBLz","output":"6","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_NnEvpiwdL8XrZ6F3T9VJyVw7","name":"add","type":"function_call","id":"fc_07d2265248f742f6016a3c12065a2c819e8eb9b547f64a93fc"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_TQ8336oa6YnuT2leYzRDBBLz","name":"multiply","type":"function_call","id":"fc_07d2265248f742f6016a3c12065a40819e8e8a06cce489d66f"},{"call_id":"call_NnEvpiwdL8XrZ6F3T9VJyVw7","output":"5","type":"function_call_output"},{"call_id":"call_TQ8336oa6YnuT2leYzRDBBLz","output":"6","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool.yaml index 042b67466..a93a592bf 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool.yaml @@ -122,9 +122,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 707 + content_length: 768 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_6Y7U4KSBYYYDJIEL0QdvBtzW","name":"weather","type":"function_call"},{"call_id":"call_6Y7U4KSBYYYDJIEL0QdvBtzW","output":"40 C","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_6Y7U4KSBYYYDJIEL0QdvBtzW","name":"weather","type":"function_call","id":"fc_0ae18fcb02ae6780016a3c11fd4fdc81a0b19ad4db2c85f795"},{"call_id":"call_6Y7U4KSBYYYDJIEL0QdvBtzW","output":"40 C","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool_streaming.yaml index 8b7620f6c..18bee193e 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-4o/tool_streaming.yaml @@ -77,9 +77,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 721 + content_length: 782 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_PRiJm2RVAvt7IoRvjxIXxFVF","name":"weather","type":"function_call"},{"call_id":"call_PRiJm2RVAvt7IoRvjxIXxFVF","output":"40 C","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"system"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_PRiJm2RVAvt7IoRvjxIXxFVF","name":"weather","type":"function_call","id":"fc_08e0d5fe24768fbd016a3c120112e481928ab6e9c900d449e6"},{"call_id":"call_PRiJm2RVAvt7IoRvjxIXxFVF","output":"40 C","type":"function_call_output"}],"model":"gpt-4o","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool.yaml index 53365b140..d185b63bb 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool.yaml @@ -164,9 +164,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1239 + content_length: 1361 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"developer"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_R52CnFTPli0v0yaGZbZYrvYA","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_J4euPJS0XQZ9P3dO4Y7sCUF7","name":"multiply","type":"function_call"},{"call_id":"call_R52CnFTPli0v0yaGZbZYrvYA","output":"5","type":"function_call_output"},{"call_id":"call_J4euPJS0XQZ9P3dO4Y7sCUF7","output":"6","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"developer"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_R52CnFTPli0v0yaGZbZYrvYA","name":"add","type":"function_call","id":"fc_0adb81d1c2f6e68a016a3c122b744481a197df0b5a6edff94b"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_J4euPJS0XQZ9P3dO4Y7sCUF7","name":"multiply","type":"function_call","id":"fc_0adb81d1c2f6e68a016a3c122b745481a195d1638a76603374"},{"call_id":"call_R52CnFTPli0v0yaGZbZYrvYA","output":"5","type":"function_call_output"},{"call_id":"call_J4euPJS0XQZ9P3dO4Y7sCUF7","output":"6","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool_streaming.yaml index 8e40abdc1..4ffd6bfd0 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/multi_tool_streaming.yaml @@ -74,9 +74,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1236 + content_length: 1358 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"developer"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_inViAUr9eV0GDtyOywkCxp59","name":"add","type":"function_call"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_Op66UUnzuOoKmgGeFJQJFTUY","name":"multiply","type":"function_call"},{"call_id":"call_inViAUr9eV0GDtyOywkCxp59","output":"5","type":"function_call_output"},{"call_id":"call_Op66UUnzuOoKmgGeFJQJFTUY","output":"6","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"developer"},{"content":[{"text":"Add and multiply the number 2 and 3","type":"input_text"}],"role":"user"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_inViAUr9eV0GDtyOywkCxp59","name":"add","type":"function_call","id":"fc_0a7836d50cf181dd016a3c12307fa481a1a06adb8b03345a43"},{"arguments":"{\"a\":2,\"b\":3}","call_id":"call_Op66UUnzuOoKmgGeFJQJFTUY","name":"multiply","type":"function_call","id":"fc_0a7836d50cf181dd016a3c12307fc081a1affc9e4960f41492"},{"call_id":"call_inViAUr9eV0GDtyOywkCxp59","output":"5","type":"function_call_output"},{"call_id":"call_Op66UUnzuOoKmgGeFJQJFTUY","output":"6","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"add","description":"Add two numbers","type":"function"},{"strict":false,"parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"},"name":"multiply","description":"Multiply two numbers","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool.yaml index 5f0108eec..273ca1cf1 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool.yaml @@ -128,9 +128,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 709 + content_length: 770 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_ves1YcSxZVxr4IGeGzt3Hn6u","name":"weather","type":"function_call"},{"call_id":"call_ves1YcSxZVxr4IGeGzt3Hn6u","output":"40 C","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_ves1YcSxZVxr4IGeGzt3Hn6u","name":"weather","type":"function_call","id":"fc_02e6812e3c7ddb29016a3c121d5be8819287115edcebcdb7ce"},{"call_id":"call_ves1YcSxZVxr4IGeGzt3Hn6u","output":"40 C","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool_streaming.yaml index cd76edfe1..b29ac03eb 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-gpt-5/tool_streaming.yaml @@ -83,9 +83,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 723 + content_length: 784 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_nYgMM3oZuxort2H8Ky4uP5RE","name":"weather","type":"function_call"},{"call_id":"call_nYgMM3oZuxort2H8Ky4uP5RE","output":"40 C","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_nYgMM3oZuxort2H8Ky4uP5RE","name":"weather","type":"function_call","id":"fc_0967f4efea4061d0016a3c1223286481a0b6b3834cdd7c6574"},{"call_id":"call_nYgMM3oZuxort2H8Ky4uP5RE","output":"40 C","type":"function_call_output"}],"model":"gpt-5","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool.yaml index 99fe0e067..c19759f8d 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool.yaml @@ -128,9 +128,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 711 + content_length: 772 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_mNRPdaouMLQT0VFAO0oChvBL","name":"weather","type":"function_call"},{"call_id":"call_mNRPdaouMLQT0VFAO0oChvBL","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_mNRPdaouMLQT0VFAO0oChvBL","name":"weather","type":"function_call","id":"fc_0ba36516ed812a52016a3c1239f854819f9cedba1904c99cfc"},{"call_id":"call_mNRPdaouMLQT0VFAO0oChvBL","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool_streaming.yaml b/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool_streaming.yaml index d21da223a..b4d1b869d 100644 --- a/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool_streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesCommon/openai-o4-mini/tool_streaming.yaml @@ -83,9 +83,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 725 + content_length: 786 host: "" - body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_eK7Vcp3N6x11thqQ8JcD8HZq","name":"weather","type":"function_call"},{"call_id":"call_eK7Vcp3N6x11thqQ8JcD8HZq","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"max_output_tokens":4000,"store":false,"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence,Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_eK7Vcp3N6x11thqQ8JcD8HZq","name":"weather","type":"function_call","id":"fc_0b86a26c238e40a9016a3c1240e7f0819ebc9c2535efaaf360"},{"call_id":"call_eK7Vcp3N6x11thqQ8JcD8HZq","output":"40 C","type":"function_call_output"}],"model":"o4-mini","tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml index e618b8356..cb8402845 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -25,308 +25,404 @@ interactions: content_length: -1 body: |+ event: response.created - data: {"type":"response.created","response":{"id":"resp_017e85da2ae23b69016a3c12518cc0819da56cbbdd33f128f3","object":"response","created_at":1782321745,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} + data: {"type":"response.created","response":{"id":"resp_04a0755191a2e626016ac360538a6887d0bdea3db3b1d2e958","object":"response","created_at":1791189075,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} event: response.in_progress - data: {"type":"response.in_progress","response":{"id":"resp_017e85da2ae23b69016a3c12518cc0819da56cbbdd33f128f3","object":"response","created_at":1782321745,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} + data: {"type":"response.in_progress","response":{"id":"resp_04a0755191a2e626016ac360538a6887d0bdea3db3b1d2e958","object":"response","created_at":1791189075,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJRAhmec86Fy9tP-ivVhrv0x9ECGIiqBAfx7OXcUgKd9ho8SvUUUilI37luuawhXJw_LMabXdj3nuPiS9CQVA05zkF6OOO4s_4gQesGvvU11tf2Dj5Iv8veg_Ols7RFhSzoU-DuCjiKbr1RPyEvNWuKOcP1yNOw8gv6qREPEFigmdQLcHa_qgFUtXo6aWfP8_hvvBU50KPC2QtvEqB7ls2UehGkIyeAwv1LP2o1q7VBxTTcU-o7D3r9jH0FEoykiIgSzMaacN1GstTHMF4Oepho81GYojBfS-uFqj_trhMplvFpgHvW-Rl8u0MSdf0mqLtpsOKNlQrCwpF8lbNeyxbMx9ywPshtcXy_WuxUM43fVlvco_2_dBEZIVRID7H-4Ul3nhEx9VLfR1wHfLTWjqriGAj_pE3J0UfNAD4_ITG45S_xBQvc73_oL3A2Q4_M0eXzx_yh9vjvay6d7X18GcxCfF2jUSHJvmL_11o44v_zTOUWHFuE5VJ4x27Xxtc5sfbcl_5A7LS5g56I2tas4OuAeg-iXE5RkiXQahPVi7xGAnD_hELI_9zaJ7nHchqqOQRgU6IVdMNFoy3qUmuXFitsOi81BG6lMWThJxuqhGdK4r9bsIuotmk_9BzsW7JzPguAMZ6HGNwcQGNnL0ugZwDj04O6CQooakN4_agASXVG8mtKQW5k2_wZ9siYfuSdTfbG4S-DXB8ZLFy7-szf8x0xIChSDohKdS5BovGkdO7IG0pc8wr40W1oqLLOtXxyw3yB7Ynjp8JWF0mUclv4Q0yfOh5jG9uoXyIVVO73HAtxseT5Oqu6mXt2Ihm8FHMNkJnJYnRBjaBxXOHMax-_BNUnh7Accx7I8QLjrt7B9TwOAo6PbyPAMv2CGpw7r7_-7gxLZU-OfHYW5UC_Kw1uxi5Q4g==","summary":[]},"output_index":0,"sequence_number":2} + data: {"type":"response.output_item.added","item":{"id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BTwycsG7txbdX35DxrsCHUbQWZJdSh3cF_XJ0qtfO41HRB209zVHgBKRcoZDYt1NvP0HKNMC8W5pu7z9ySGYPBrgWDT8yZOKJj2s6wpcGO-YR2fz5qNwQ9LSIuh5y1_ONMiI-oXiXG4D43qezbNbTNMsq9x4aLvcIroofHzQKN1fD9mNXH82tuUbGihf4o9uovGAMm9BBD9xJFhBxbRpgt9bqPV4rOPOqeDQGGuadE1XMN-m1j6Ys4WYiJ7NRHVw0VEo4AXLCkDDS6dZIhe_6c__jW_6UxJvZPUy9a7gJSycQ4q1PHa9NS37poG6zOGZ3Z_4HlchDAso2YhlTb_WjoKRvpBtsJrw2s1bGHam29XfY97bSfwby1chc8eRWN5ThSR5FsjypwJp-UjtQvt_1PbmLvDUdfATNID3XUBpggcx0UeeWObTgDgf6nqIkMfB09VBRacpc4_OH56YTQQlab6ArCtpl2MU5rKh2yayxmiS2W1GgMSlAewrd0Rsu6f0Lpc2l5bxn-In5BPYgMRtB5ftuk3myAiSlAxdi-uxeF2QsGQktYuMEcyZonwPfpDwGI335OrHPOgOPAwvIhTsjWBVKZ8f0gQ3bRw3m7I3ThmQWD3Z_jqF3hfGEy0qh9hRR8I1DfdglRrhDv9HsmGmAwpwvq8oG77-rlcLeERhwn7Hjhxo0Y99TmvEtfngmfuFofrsxsR5aQEIW_Q0PAqIAVyqD2BtjCTWkztZ7Y1dF5kbwe4cMJf8iArreoyGpHbXwmSIhxXLPhK-4JVFuSc1eCV0kTyMSZ1mOH_6t4wMj1cc6PPLVwv-TFJhLxesEusj1JFO0c5CcqJZDvrMqDNMCnTPvU22jqHpZe1p7Dj7aa-skRMbLVFviyDHK84hMt2ozY0VLBQseeM87YCdT1Yso0jrZwNz5QDvEW5C0E3OWKnne1YVryPNJGmZArFSht_RbgVCX6V-cs4K1kfR37JLc6_FU3iwEbdxUO7M3qrc6zzIt-eUJIsl0GB0B92PAPKYyLrjyR-1CQV07twC8KNzRde-IEtl_hMwnxCSUO-LVaMeSCKwJp543w2Cj9RvKnkyz0rNAt54I-BMe5u7fYOZPJIEIBbsQuY-4VcGd_Fcj2ky3ZPUrBHucxbFiQEc2trGrA_sDZZdwU_YKBBFV_D9fT7w==","summary":[]},"output_index":0,"sequence_number":2} event: response.reasoning_summary_part.added - data: {"type":"response.reasoning_summary_part.added","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":3,"summary_index":0} + data: {"type":"response.reasoning_summary_part.added","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":3,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"**Getting weather info**\n\nI","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"xgdyp","output_index":0,"sequence_number":4,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"**Getting weather in Florence**\n\nI","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"KcyKx7KuzY1Ktn","output_index":0,"sequence_number":4,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"y4lUv4u4YwO","output_index":0,"sequence_number":5,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Fp5iwT9HFn8","output_index":0,"sequence_number":5,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"lliOCc2dfXwA6","output_index":0,"sequence_number":6,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"F6AY2L8fJCFwj","output_index":0,"sequence_number":6,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" respond","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"D6GXM0Jm","output_index":0,"sequence_number":7,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" get","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"vWU3jcMPA0Jq","output_index":0,"sequence_number":7,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"yl9uf5ygzKTZb","output_index":0,"sequence_number":8,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"kdsYRxr50A0D","output_index":0,"sequence_number":8,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"HxTq2wtPseI3","output_index":0,"sequence_number":9,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"PJvvJyUh","output_index":0,"sequence_number":9,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" user's","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"KxuNsGfuv","output_index":0,"sequence_number":10,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"rZLIWeigQVdloUS","output_index":0,"sequence_number":10,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" question","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"YpEYMAR","output_index":0,"sequence_number":11,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"ArYkkM16nyc1","output_index":0,"sequence_number":11,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" about","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"Z2MjMte16I","output_index":0,"sequence_number":12,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" there's","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"tiP9oNeM","output_index":0,"sequence_number":12,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"HIYMsff3dXzU","output_index":0,"sequence_number":13,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" a","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"MmXqiQYkgCfNZB","output_index":0,"sequence_number":13,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"KaNae1xF","output_index":0,"sequence_number":14,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Q0klSRUV3Zv","output_index":0,"sequence_number":14,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"wkm1dJKj4SJT7","output_index":0,"sequence_number":15,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Bp3k2SAf2We2AE7","output_index":0,"sequence_number":15,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"i8WwDDK","output_index":0,"sequence_number":16,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" functions","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"NCTE7x","output_index":0,"sequence_number":16,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"lcshuRPtuOB8bOC","output_index":0,"sequence_number":17,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".weather","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"eiMmRT4T","output_index":0,"sequence_number":17,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Italy","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"Roa9XuRLK7","output_index":0,"sequence_number":18,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"8vRUXsRVQUyygx7","output_index":0,"sequence_number":18,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"1v1JZBlVzbfHRC4","output_index":0,"sequence_number":19,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"ZboDYl9B4Eo","output_index":0,"sequence_number":19,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I'll","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"1danWAtitRe","output_index":0,"sequence_number":20,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" can","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"kZB2CuUJv3xG","output_index":0,"sequence_number":20,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" use","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"2Th4EywWoxz7","output_index":0,"sequence_number":21,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" help","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Zt8qUiORBVy","output_index":0,"sequence_number":21,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"mlOxGkP6nfKD","output_index":0,"sequence_number":22,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"HfMwnmdjfF80m67","output_index":0,"sequence_number":22,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"JeJwEflS","output_index":0,"sequence_number":23,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"B34Ku9PV8riFGL","output_index":0,"sequence_number":23,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"E1rk48CkAmE","output_index":0,"sequence_number":24,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"’ll","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Xa7cBOVG5tyYN","output_index":0,"sequence_number":24,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"J2P8Ej3NDfYHCaj","output_index":0,"sequence_number":25,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" call","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"t3WMFHDWFfP","output_index":0,"sequence_number":25,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" which","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"iOhWZcyy3A","output_index":0,"sequence_number":26,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"YVXuMReRs3opu","output_index":0,"sequence_number":26,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" requires","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"7oixLvr","output_index":0,"sequence_number":27,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" with","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"nJOfcR91mYa","output_index":0,"sequence_number":27,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"gIV0gimkyaaa","output_index":0,"sequence_number":28,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"891r5K80QfRy","output_index":0,"sequence_number":28,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" location","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"b4i2ahR","output_index":0,"sequence_number":29,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" location","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Ftd5mtk","output_index":0,"sequence_number":29,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" string","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"OHlqV86fB","output_index":0,"sequence_number":30,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" \"","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"nQCiRk3bUh3qy5","output_index":0,"sequence_number":30,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"hN2r6evghMOCdKS","output_index":0,"sequence_number":31,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"Flor","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"regPB2FYl8gc","output_index":0,"sequence_number":31,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" According","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"1rp4SC","output_index":0,"sequence_number":32,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"ence","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"SuwBHGbk7Z26","output_index":0,"sequence_number":32,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"ZEt4t1y975Axa","output_index":0,"sequence_number":33,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"1WuVJPk4vJcsqrE","output_index":0,"sequence_number":33,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"Eb3bp9txig93","output_index":0,"sequence_number":34,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" Italy","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"YhlsNK1COm","output_index":0,"sequence_number":34,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" instructions","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"AWG","output_index":0,"sequence_number":35,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".\"","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"q1Scoz9LOy2lYh","output_index":0,"sequence_number":35,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"8GZkMDfrS79adsj","output_index":0,"sequence_number":36,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" Since","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"1sNK4EozIB","output_index":0,"sequence_number":36,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"EGv6qrVUIME62h","output_index":0,"sequence_number":37,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"VnfhUN6lCAIWsV","output_index":0,"sequence_number":37,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" can","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"BWDcQY20sZx7","output_index":0,"sequence_number":38,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" only","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"gQOYae6LuwV","output_index":0,"sequence_number":38,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" call","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"g26ymDjVnBh","output_index":0,"sequence_number":39,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"81w2pYPNTiP","output_index":0,"sequence_number":39,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" functions","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"8s29zU","output_index":0,"sequence_number":40,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" one","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"0XKyBrVA2bhV","output_index":0,"sequence_number":40,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".weather","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"46U1feDT","output_index":0,"sequence_number":41,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"frEpEqPhFNJ","output_index":0,"sequence_number":41,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" directly","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"K0Rj0Ob","output_index":0,"sequence_number":42,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"PBCiISKqM61C9cJ","output_index":0,"sequence_number":42,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" since","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"78UzycJtPt","output_index":0,"sequence_number":43,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"CNIsq1pR86bUPl","output_index":0,"sequence_number":43,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"cruE5F3Hk5WMPi","output_index":0,"sequence_number":44,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" won't","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"i5mAVvGksD","output_index":0,"sequence_number":44,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" only","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"SMURURHCNsG","output_index":0,"sequence_number":45,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" use","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"ZDT0yhynmINn","output_index":0,"sequence_number":45,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"qUNx8D1ZYNE","output_index":0,"sequence_number":46,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Xb4uF681qliz","output_index":0,"sequence_number":46,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" one","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"s2UDubQdREu0","output_index":0,"sequence_number":47,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" multi","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"18yec23AcL","output_index":0,"sequence_number":47,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"xpmd1TMawwJ","output_index":0,"sequence_number":48,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"_tool","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"7umlymCardP","output_index":0,"sequence_number":48,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" for","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"3OwIof4ZGBjU","output_index":0,"sequence_number":49,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"_use","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"rvlPXValWi5M","output_index":0,"sequence_number":49,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" this","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"5Fy6FlRHB2H","output_index":0,"sequence_number":50,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" option","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"W73fKGTuC","output_index":0,"sequence_number":50,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" task","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"fPEpfp9u4CQ","output_index":0,"sequence_number":51,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"x7KfBDIHTXjw5i7","output_index":0,"sequence_number":51,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"R53KasPCdZO634w","output_index":0,"sequence_number":52,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" just","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"F9fQzWqPsNZ","output_index":0,"sequence_number":52,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" There's","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"tnhiQ2iI","output_index":0,"sequence_number":53,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" a","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"uaD4yrfznTlQgJ","output_index":0,"sequence_number":53,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" no","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"7oaMU6SPhZqEk","output_index":0,"sequence_number":54,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" straightforward","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"","output_index":0,"sequence_number":54,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"jktzJNPNJGe","output_index":0,"sequence_number":55,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" function","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"oSpKFi5","output_index":0,"sequence_number":55,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" for","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"R6hGyfehzHWA","output_index":0,"sequence_number":56,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" call","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"sAFhb1PL7if","output_index":0,"sequence_number":56,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" parallel","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"e6kIcHl","output_index":0,"sequence_number":57,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"lvCqQBF7dhPGlgz","output_index":0,"sequence_number":57,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" execution","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"Ecfc2t","output_index":0,"sequence_number":58,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" The","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Di9WsVcGiE3K","output_index":0,"sequence_number":58,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" here","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"Cfe4aM2uJAv","output_index":0,"sequence_number":59,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"w2Sjsj9tavO","output_index":0,"sequence_number":59,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"sp8rwAlHtxZXctf","output_index":0,"sequence_number":60,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" returns","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"2f2fTI8c","output_index":0,"sequence_number":60,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I'll","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"5vXczuTKaao","output_index":0,"sequence_number":61,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" \"","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"EPPeWprqKnSV2t","output_index":0,"sequence_number":61,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" call","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"wqjWV4uLWyF","output_index":0,"sequence_number":62,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"any","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"gD5FKFDinxLPd","output_index":0,"sequence_number":62,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"0j31yf9lk874","output_index":0,"sequence_number":63,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",\"","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"xdOKztlTPwk8AE","output_index":0,"sequence_number":63,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"JsljDoCByLh","output_index":0,"sequence_number":64,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" so","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"oTupS3MV69ixb","output_index":0,"sequence_number":64,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"xDOfcP7vT7D8D","output_index":0,"sequence_number":65,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"kF5FwUI84WHBnK","output_index":0,"sequence_number":65,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" retrieve","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"hL9Q0y2","output_index":0,"sequence_number":66,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" expect","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"FuJovfKn3","output_index":0,"sequence_number":66,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"piIfbEkFpw9V","output_index":0,"sequence_number":67,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"4vOF24YJ3NKmq","output_index":0,"sequence_number":67,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" current","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"ikaYVsNC","output_index":0,"sequence_number":68,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" receive","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"BqjXR9Jt","output_index":0,"sequence_number":68,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"nfM7wf8W","output_index":0,"sequence_number":69,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" some","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"yZVZSGVOBEr","output_index":0,"sequence_number":69,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" information","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"KpnZ","output_index":0,"sequence_number":70,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" data","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"NLiznYTvHb1","output_index":0,"sequence_number":70,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" for","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"M8lhREUay68r","output_index":0,"sequence_number":71,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"qx8biK0j6fCt8","output_index":0,"sequence_number":71,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"KbKJ8qH","output_index":0,"sequence_number":72,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" present","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"2yPltAF9","output_index":0,"sequence_number":72,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"cU8qzfF5FYSS","output_index":0,"sequence_number":73,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"zzdXkCYn9myhL","output_index":0,"sequence_number":73,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" see","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"2VHEU4dDxGid","output_index":0,"sequence_number":74,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"cQo4VGRm9wt2","output_index":0,"sequence_number":74,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" what","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"XaPfQV7imN1","output_index":0,"sequence_number":75,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"J6MGWVjFdg5","output_index":0,"sequence_number":75,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"59p29Zm0c0jFP","output_index":0,"sequence_number":76,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"QPIVD3sr1RMmEqw","output_index":0,"sequence_number":76,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" returns","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"G5hWBEHG","output_index":0,"sequence_number":77,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Mot3rkyz98ER8J","output_index":0,"sequence_number":77,"summary_index":0} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"!","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","obfuscation":"SGgiEwwNw9D3RMa","output_index":0,"sequence_number":78,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"’ll","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"ulXV7uRxgGncQ","output_index":0,"sequence_number":78,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" keep","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"3L9f532XkLU","output_index":0,"sequence_number":79,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"9DucboAvx1Bev","output_index":0,"sequence_number":80,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" concise","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"sMQxe1Zm","output_index":0,"sequence_number":81,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"kAaCs03NWBtenkd","output_index":0,"sequence_number":82,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" Of","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"kum0kfCiOHsRQ","output_index":0,"sequence_number":83,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" course","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"x8dA4BuO7","output_index":0,"sequence_number":84,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"uv4SaI4FV7oAbFI","output_index":0,"sequence_number":85,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"pfw7jQVl6rlYLx","output_index":0,"sequence_number":86,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" need","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"M4sFX9O0XOI","output_index":0,"sequence_number":87,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"uNmrsqPOSX9d1","output_index":0,"sequence_number":88,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" think","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"c3dBkbSMWI","output_index":0,"sequence_number":89,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" about","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"MXCtXmpFmt","output_index":0,"sequence_number":90,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" how","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"NWRiJZfaoG9w","output_index":0,"sequence_number":91,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Uj8PnFzqmoMBc","output_index":0,"sequence_number":92,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" handle","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"9AcM73txw","output_index":0,"sequence_number":93,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"VQghiP5AywcYO","output_index":0,"sequence_number":94,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" if","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"OhnUhnH0GVF5J","output_index":0,"sequence_number":95,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"86Wnq31DSoKY","output_index":0,"sequence_number":96,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" tool","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"r34zcezwC8u","output_index":0,"sequence_number":97,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" doesn","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"jb5wKDXxuL","output_index":0,"sequence_number":98,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"’t","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"mAJPJw50H5p7XH","output_index":0,"sequence_number":99,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" return","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"DVdBhbAmF","output_index":0,"sequence_number":100,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" data","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"wXz8tIFsEKI","output_index":0,"sequence_number":101,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"uivRYJkqcutf2Fy","output_index":0,"sequence_number":102,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" Al","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"vx37hBbC2OVVI","output_index":0,"sequence_number":103,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"right","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"xUASk2F1rms","output_index":0,"sequence_number":104,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Onf3U11s5XdJ2ie","output_index":0,"sequence_number":105,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" let's","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"1LyWnGzgti","output_index":0,"sequence_number":106,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" call","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"Mtpp60R598E","output_index":0,"sequence_number":107,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" functions","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"dRqH2f","output_index":0,"sequence_number":108,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".weather","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"CZt6U17P","output_index":0,"sequence_number":109,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"!","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","obfuscation":"6IrW764UCerDkTK","output_index":0,"sequence_number":110,"summary_index":0} event: response.reasoning_summary_text.done - data: {"type":"response.reasoning_summary_text.done","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","output_index":0,"sequence_number":79,"summary_index":0,"text":"**Getting weather info**\n\nI need to respond to the user's question about the weather in Florence, Italy. I'll use the weather tool, which requires the location string. According to the instructions, I can call functions.weather directly since I only need one tool for this task. There's no need for parallel execution here. I'll call the tool to retrieve the current weather information for Florence and see what it returns!"} + data: {"type":"response.reasoning_summary_text.done","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","output_index":0,"sequence_number":111,"summary_index":0,"text":"**Getting weather in Florence**\n\nI need to get the weather, and there's a tool, functions.weather, that can help. I’ll call it with the location \"Florence, Italy.\" Since I only need one tool, I won't use the multi_tool_use option, just a straightforward function call. The tool returns \"any,\" so I expect to receive some data to present to the user. I’ll keep it concise. Of course, I need to think about how to handle it if the tool doesn’t return data. Alright, let's call functions.weather!"} event: response.reasoning_summary_part.done - data: {"type":"response.reasoning_summary_part.done","item_id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","output_index":0,"part":{"type":"summary_text","text":"**Getting weather info**\n\nI need to respond to the user's question about the weather in Florence, Italy. I'll use the weather tool, which requires the location string. According to the instructions, I can call functions.weather directly since I only need one tool for this task. There's no need for parallel execution here. I'll call the tool to retrieve the current weather information for Florence and see what it returns!"},"sequence_number":80,"summary_index":0} + data: {"type":"response.reasoning_summary_part.done","item_id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","output_index":0,"part":{"type":"summary_text","text":"**Getting weather in Florence**\n\nI need to get the weather, and there's a tool, functions.weather, that can help. I’ll call it with the location \"Florence, Italy.\" Since I only need one tool, I won't use the multi_tool_use option, just a straightforward function call. The tool returns \"any,\" so I expect to receive some data to present to the user. I’ll keep it concise. Of course, I need to think about how to handle it if the tool doesn’t return data. Alright, let's call functions.weather!"},"sequence_number":112,"summary_index":0} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJWAIvEAmUTQCqLSmR9FPLSaCOTK3cpkKjorwAKVNzysthKw3djyrJ2Q0YC2MCprWw3B5aMyujyhSjp9ulmQZNuRfLtd2e_6eIVdk2Z4IXi9KUF9yMD6CyxZH9vCYUexn-EQK8eABozQY8jMF2WSDq-hy_sIzEUlIfD3kKbUhlB2fjRuk_5grBUfszpwiict_aqT29BuCHBXbnaOgcM4ggdU8zVPTnkc68GzVD0i0V7vneRSN7awJdrx6mn_4qdQPlis5LEr7n6xUOaGWUy1lXUKgAJtOIGFOoYJHcA24pNKdNcaeEqakKWCkdLfe07BuptmIwjhJK80-MEtIEKuq8vPAm50-BtBp3SoHddCtcMnsRhyQwiOLhbmPinSQXrX3JLFPJB-0PANRrUK1lBAcf75syUGwLpPEfZk1phkuCCAjobYQ423tQ5iffXi6HBj4sHlyhOJs7F31YrND44bQm8TsS0Zua1p4_FDSy5iAYhaJQs21XTRujZ2TX2nqL8aBEIC7KZvgsQCR1Q7DuK-7KCmX4yZPLoowhtVQfk3dT1glqvO_JEL6PH6TclHQDoc294vKXMSxrR7dlfkdLKV4uG16JV6mESV9PKw43uBCC2krwYI0oqk_WbDShjNsdp0Y6QZdBewIexb9a9H4DDF7tz3p2hNnW5ifVvT4D1lZydMGjSPUPi8cDtD59TN2re7JMs_NAMsGqpZeybacW-D-2epr2JTzefRLk92puMG-5dR1tGQNFDBa4YexClK8uDXUnCtIdHY_j9yTwJLXFibNbX7JWgios8oYh8SWOBLK2_5ggFAOv8oKvJ-GcPZtZlQSGVHPhMW68yI24o2VjIz9FqyfLkC9zSXdDPMZ2Syzwpx3Ovw-VKZ9OVrqeJftCJTHpZx-pl4Sx3k5JHp8ooY6_T4oaBM_bzsJ5qCWhMefS0xfoqVdWI4rNLTDJRQK9fYoDh8fybt4EymYV3lODHHx1RRORRNnvmsz2VvkhJxksQSyXH2_sGHhIl8hvrtxURGktyIyF-XW97FUto7KU8xFN-_K4yNvBqB7xt-8LdwqUsHc31juXN6891LDX2-7V12qVYN40ffTEHXekQupCC8Wy-isIJrbkg99BAlPu7XthWxXst0VVTcszeYL9AfRcP8CPqa8gshZCsGm7kI16lplJjvjFelqf15MjCTlzxlfDk5XFPddXPJyleAoOq9Ur7RQs_U0DA8hyF0HG64bPIrBpZ2kWbaZvPYBnKqXjGz8gptOg4xRRPcO-LgLBMvQUzixfwmBdOZYPTSo36OmRCQsld1WLM5QaSOwJp0Yio7piFC8UTCB4dQ7CCGRJ3i_mVK3185e1HZfknDc87BGpSFDEIV3G8Ze09HcAlRs28Fk9C__hHwc9rdthYuaqakN70A4E3cKDx-VT7dk9isO5Ww-SXPNJaGxGGDtj-hKF6YiN6Ewb7oIOkL5992PrtcSzPmjlAOmcXkHwwG-EniRn6ssBNMDEF70dWdqXEk4jMInUL7uQZHm1VDT9byGa6vrnOoETaCPT4YAP6tjmQE0XasRCHxQ==","summary":[{"type":"summary_text","text":"**Getting weather info**\n\nI need to respond to the user's question about the weather in Florence, Italy. I'll use the weather tool, which requires the location string. According to the instructions, I can call functions.weather directly since I only need one tool for this task. There's no need for parallel execution here. I'll call the tool to retrieve the current weather information for Florence and see what it returns!"}]},"output_index":0,"sequence_number":81} + data: {"type":"response.output_item.done","item":{"id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BXG9eLRs7-XYT6aDPfEHZo53fP0bjK1k6C8Y4ZxpYaw7JtOd7RwETY00txRCkWszP5vU4351LqvvIZEdTabPKcIi8GtVEfljwKkU9CdVO9zotqYBLfc-mheg8jmWQX_LUdEv0ySbD9V97UXnpwBoS0EbK81gg4YPU55RiXMgCKMOMGWyeV_Y7z2FpUw3fQ1XnUdaXu-IURwrCNHmDSL6jCA-p0lhP51a2vyX23BSmXP3XV5zhUUtOoh7diluxMJoKp_2NkSv9sMs5ASMyKZ7S737qowLvbosav_BTwkjWCYe35VJbsx6u4tgGQvIVEuv28SQPg-FwM8KXOIRtn-Fla9IHhKldEuDw9aIocr6fomb2rhaTVFYlDJ2r8DzQvyT_2cd6mxZp1emK9JzQKYFaIrjvnGUeJ-d8US61KJ0m168dlBELEqGDPk7uf5WPs_wOyQEEu7cfIpNSle7_iGEV924M6zWGio3Xd0SvE4jRgMmJtvWKcgupymNBPTYiUn5pG6Km2ffnblt99MPvU7TOA719uxgjKYEsBh-vs97oI0jqnuIh0u_ilvY3BG52yEp6CHbq9Rncasi6HaOn8Ar3zP5FNBmo5lTMORfAvVWEsfrr1zkgyaVHuDeOjcdh-IEUzybLuBwrY__M2Ushcrp1N-YAPZk25l6OVTUbCsZ8ZybSUxuGHQktwODv6uB6fkgweuNxS8tWq6-Fnn0Kf0obbZpywHriPyUHwy7QGCjYPnEzRjzpMnGJgjiluraRAsrhGBo0dcJJPal6awqfUVN3hMXVPFMIIQw77qxQoBLx2b4auI0yXOZJDrt9NZa3uYl3tnvn1ytZPbCq-98EySbFzlfgMc0Cv5nvsXTW0Z0QLOVBGX2YsPXlxhSArfFs28d_iUUTmHs4KJJ-8wG9EUL2mYWzL306OUMhwpRTPdabl60aUqa-WRqGJnOxxX50SuH3vPP5xLgn-MMUILZ9fzlRZ6GIg2YrBgP1D-INJF-JogfT5v1UJkWK98L2fGdsUr0vkoasnnOSvecYYY-eOG7iY4n6z9AgxwyAar3xLorU_Cds03kMR_uEQhrLEiPSIC99nbKHZt_XHEkcmqoPoQ-1hVhThog9XYa6Wps9SOhGcIYjv6mGVkGD1T5iWnAtQvobM4CyevHYGeCXC5iYtkGPn0uqIqGxZczTsP-SrFKWgc_M4U81PKq_0roCRjVPT4PCp0RbaS-Xfz3_alX1p3hFDuB5A70PquRnAUW7tNe5p2MFLqknv9ZYahzAinwfQwAt9HQ0ILUyGvmSsQBPhZrKtOdFn3sh5dzJjxfy92lXRj1GB44pcAPdcoozi44WJmqIWpaMPgbdFtxyVa0PLcSkP9QRIa1lXW-4mUBly2TDr1_8PaLkxcJJbQS78KdGFesftbKckHBhMcByj-pWMt8lw9AMRdMashTpVtFTy7Y93p1Vbrn-_PEm-4VtuNwv2x7nPVrBDDeQEm3lg9r5ysNRB53vHAtItDNnisa9-t_QjAOB9ZaPoG2M8DBvx24eyGaBCYB_uiz00_cMSAHxITNXiTAdI0TMl3C7K8E4hFJ2b6ptqsDoQRCAVK1hbq8HgTVNl1T0WuXGJv-sliGeX3NMKvz1PpdGoxtHd0zGko5yT0QKo7dCQov9CXkQR4OOVlNp-1vbZ3980WD2URIJhUyX-FG04ToP03fZm0pNPdjuAAo2eQJGiRdhR0gV5hd7zMJLpelC9yuBb8i_ycCNhBWIk9eA51_XXJr5qdw7ie3LBvncP8K2FUfIIvQaeYLx_ZfDxJz_bjV3E9DBioKrtsmjGC6UBZWi9blgd4vQK178b6N8gyHSY5AdHi8To5CicbG9vtwxsqGntTFfRTz1fhKu15NGXH7nh0wtfhFWsrQb-wzMlP-9wUtBR9MNl9haWFUAQvpsGJdY_-DeJj9jWEDKcHZ5dDrasRqZyLtOxwQ037pHxV-7EZ3zeYBO4WWw0Gh7GQ4HOsv0CNb-5argh3ka15PH8FWaRcNXKbEsYbG6EL8WQYq2G7CDnv1zp6wbgtN1idLFpt-Zb2RO8ggOxTRa-XXAJtvoTD1q9NeFE9gDUbL2pqcV7I3hy0LgB0LJXUewJ43bDX0OVvxAQ7FryRsyYshFGQcy_Hlu7RRlovD-bw7tRMectDh8_b_C2JQW7z85uoCFRuEzCCpVYMX7g1OMkpjXEY5_T1kGNB9xhbEkwYLfEw9BQOKbQF1_kExc9n4YG","summary":[{"type":"summary_text","text":"**Getting weather in Florence**\n\nI need to get the weather, and there's a tool, functions.weather, that can help. I’ll call it with the location \"Florence, Italy.\" Since I only need one tool, I won't use the multi_tool_use option, just a straightforward function call. The tool returns \"any,\" so I expect to receive some data to present to the user. I’ll keep it concise. Of course, I need to think about how to handle it if the tool doesn’t return data. Alright, let's call functions.weather!"}]},"output_index":0,"sequence_number":113} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","type":"function_call","status":"in_progress","arguments":"","call_id":"call_zgUaIBRPTwxxOusyyKw5NVMH","name":"weather"},"output_index":1,"sequence_number":82} + data: {"type":"response.output_item.added","item":{"id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","type":"function_call","status":"in_progress","arguments":"","call_id":"call_sJPwWtSGWMgzQOA2gIu6qoOn","name":"weather"},"output_index":1,"sequence_number":114} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"{\"","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"owUEioaL30uf4t","output_index":1,"sequence_number":83} + data: {"type":"response.function_call_arguments.delta","delta":"{\"","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"9bYDUmCQEWmqhE","output_index":1,"sequence_number":115} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"location","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"b204zJnR","output_index":1,"sequence_number":84} + data: {"type":"response.function_call_arguments.delta","delta":"location","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"4slHDGSg","output_index":1,"sequence_number":116} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"\":\"","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"m85gBokomQIUJ","output_index":1,"sequence_number":85} + data: {"type":"response.function_call_arguments.delta","delta":"\":\"","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"Z0zpdZj4T1odc","output_index":1,"sequence_number":117} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"Flor","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"rDa4h7sQxdeD","output_index":1,"sequence_number":86} + data: {"type":"response.function_call_arguments.delta","delta":"Flor","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"kusczm81lbmN","output_index":1,"sequence_number":118} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"ence","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"Ly52jo6qHdBz","output_index":1,"sequence_number":87} + data: {"type":"response.function_call_arguments.delta","delta":"ence","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"W7HzLHaytkFs","output_index":1,"sequence_number":119} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":",","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"5h3zozjOd8bBYEX","output_index":1,"sequence_number":88} + data: {"type":"response.function_call_arguments.delta","delta":",","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"8IyCTPOQrXuM1Yt","output_index":1,"sequence_number":120} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":" Italy","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"7zvofaLPXh","output_index":1,"sequence_number":89} + data: {"type":"response.function_call_arguments.delta","delta":" Italy","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"Sebn5MLi0s","output_index":1,"sequence_number":121} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"\"}","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","obfuscation":"c6vcvMxO169PvZ","output_index":1,"sequence_number":90} + data: {"type":"response.function_call_arguments.delta","delta":"\"}","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","obfuscation":"UBpGnVACSdMUJT","output_index":1,"sequence_number":122} event: response.function_call_arguments.done - data: {"type":"response.function_call_arguments.done","arguments":"{\"location\":\"Florence, Italy\"}","item_id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","output_index":1,"sequence_number":91} + data: {"type":"response.function_call_arguments.done","arguments":"{\"location\":\"Florence, Italy\"}","item_id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","output_index":1,"sequence_number":123} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_zgUaIBRPTwxxOusyyKw5NVMH","name":"weather"},"output_index":1,"sequence_number":92} + data: {"type":"response.output_item.done","item":{"id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_sJPwWtSGWMgzQOA2gIu6qoOn","name":"weather"},"output_index":1,"sequence_number":124} event: response.completed - data: {"type":"response.completed","response":{"id":"resp_017e85da2ae23b69016a3c12518cc0819da56cbbdd33f128f3","object":"response","created_at":1782321745,"status":"completed","background":false,"completed_at":1782321750,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[{"id":"rs_017e85da2ae23b69016a3c1251dcec819daf72930a854fd4d1","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJWmFz9tCTxPvUh6Qwqxw2cpGGbADZJW2a0Vpc_EJKs9PJ0Ex32Z6B2lJQuJX1QjxI9MH3fiKGq8bmZ5XyMRt78WQe48DqNMetnX0Mw3Xi5q4oxZTpNxjLE6w2ii65zrme8XmNZj6S6Judseay_YY1DT5bPG4M6scgFctbcc8n4rvgEy4DJDxtjnOmH5fl8UFF5S2zMLdnV530KfCBCplJqAU_3d4Ggcyv5Ey4UBtbEocBFpC9yY6L3f3JhDK3Bgg_EgOZMeQaDAhr_vLVgQZbJ0dCFYLjA8SKB9y9ffvlbeSwXsmPpTnjb0hBA3xFlyvWW7tm6BCVj0NTJnLngEJhrnQQmyFEPM8D2yEVOaZy695_njaBsuYyZWQNsA8NB-NAQCOWcekU6vr1Zn145zC2XOFX2MZuMuceIv97mVJS6jajKpNc_vOc716SwwDWOIsLfuYDk2sCiBDR0pBFos9swvmTEBDiu-EftNuXylYa-YGCCJV26op0vgoZslcwCJwn3owcGEkNEAP9pf2ndRGWl_QVh3t2Ed-a3Ns6PZG6cqlZaLs1mERRp2ClEYh72sxFn-_mr_DMWg1-WLj8J6kt2GnTZZMQIM9wcGC4_D0CTSP8Yq9Tm3ydEc3I9clhEWXpEoWwSeCPEvL-ngnOvuSGvyPtk6DN62LUdCBe9SCDY7DBMA5Tq0T7sc2e1torkZGqr459R7eU_ON94pjXiux3n9J7C5dvrsGyKpBhL09TAqjUmD6ek9Rry68sVj898G8LY1Ca0HrvjfF3QGtepcM6kSSgxQ65n46OtynGH0nuLA8--0JRT3A3fez7vIryTqt1nfZZAZ3-vJibQZHdIXh0XfVooU5hNTgCAPMxukppDViPI6CukSp88uwHSTsNVcs80YQeQgZu-jVlMFs2cx0-GzZlvYkEI880l2_-Utbkj5jCVEgtyUsnGNQIRvMzZcFtH9kSNOqmOerGeOPhbELL-zNFWM_Cm8bAHAC4H8cZWNTOSWU8GKyU1C3bjLm16OqR9YyVElaoQGv1Qf4FQIA0_KoX5p_yhphU6UAy2P3wOeegN5ffegZUBX3tDJ7ZNufEqg-OBByXmJOBDvkuWDNQR6ClJb1A307m7diqPw0JcB7jiYWxxdPQU1lNdcFqMCcSxdI_rZW6oHyPqiyEfW738_mWpQgyBZCY-w3abFtLIFBak4krWPYHxKyXbwuYTQcCOWdTpwXb8o2oJKGupQbtSLhmLg_ZpooPL28Su9bLM9kXTee01nXFFRVOgSYDxNKkFx5kMnE9d-YP8ML8xGUJBMLOlkNxbg7x3KP3TsfpN0UMfNj_DtOy_ywG4J2fCjWT5xigUfZZvZ8_YsHOyJcdKW8t4u_sUSmBNr0EUrVuA-eyR9DO1ieI5fFfU05DXb_sCd20KycWhG1sl7P8LSrJZj5it4_GNf9TP_Xum-lraj1-B52-ux1q9HPRjsNGt0KpDC4P_aEnuvpxXlGEnvb0AJZHxMsi7Bp-bJbJvS3xmL2rXPopGAzg2aYfMMP3SZIdOALbWcdyvN0SmPC7hp3BLWw==","summary":[{"type":"summary_text","text":"**Getting weather info**\n\nI need to respond to the user's question about the weather in Florence, Italy. I'll use the weather tool, which requires the location string. According to the instructions, I can call functions.weather directly since I only need one tool for this task. There's no need for parallel execution here. I'll call the tool to retrieve the current weather information for Florence and see what it returns!"}]},{"id":"fc_017e85da2ae23b69016a3c12560820819db3b6e8a38dddad65","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_zgUaIBRPTwxxOusyyKw5NVMH","name":"weather"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":63,"input_tokens_details":{"cached_tokens":0},"output_tokens":121,"output_tokens_details":{"reasoning_tokens":64},"total_tokens":184},"user":null,"metadata":{}},"sequence_number":93} + data: {"type":"response.completed","response":{"id":"resp_04a0755191a2e626016ac360538a6887d0bdea3db3b1d2e958","object":"response","created_at":1791189075,"status":"completed","access_programs":null,"background":false,"completed_at":1791189079,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[{"id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BXrYadw7QBusph-WgzoohlPIn9KwWt3Kb6KM5RqbnWfaJuPoLMbwCcjcWkEfNUCuVFe8jRGWOIVnk4oeMBG8eZ4Nktvk126hyIn1WYRKFV6_sADEIQI98dPrNB_0z2r2hFaW2iHt7i8hDD94FW1LM5Vw4pr9UTsSefWrFAztO7b7lgxoW-mt2By9SGT2WnV2B2PIE0UD0p--62bFq5dNliIx18zr90d9OuZsUg22gfZdPJ4mJIr-4sLN9PyYue_uJEkiw9Ykdl_TuHEijTbHQmFFbuZRfY9kCpmaNc_3VgxZrKlCY2wzNoTYrYl3O7VhQKbLvVCCuhLE_CFfPHdsW_--78ZmMScDGvax5K9RWQjrDZtPLdTg2rzGvyrDZd7DPTkoWNigczkQXYYB6uGIPNaWosYvqquzv0KroWIEk2DkdYT0S8_h9d3HBAgrhqGkWbIpdOXR7Exih0jaQ6agT50Uluv3ZHhFxulXqk9KdwP6d44lM_ZuEbL4neiSqTrwaWDwsEkiELpLIzVtl6_D3dAHnniyWPglLz2xb94m7aJqJyM-Hw9kDB2k0uQyfRw3ooup-8vkozWm-bOcQCiKz1l02JboRwy-EoHmMx4I2BQn-3exJ4vVMB4dv47eXpTAEIt2oSwyW2T9tc5BJ6BqfInVfyzvK9_qAj9ftzuJdC7L6b1z213GSNR8GpR4gRCH_hToE9y-mifQb5ZTYgkcJE2CHFA9CDEcZmCi57Y5vwTV_KxwmT0bbFmQAQUrtCqskIHhuuX9HBJOg9Q_aIw1Q7b3LBsLTBq22OyAqqXLvWcrGBMWTG0lXGcWWS0ARZZXW1hZcxQjjxIi9mJZFb6tjNtYsgTB6krmLXwBTRpEK3ehqzAgsq0Chjl-2eLm-KOsY6aFATPm66kZEG-ZsZSQhbZ16IFRez5TvW9ZxxlCtc1qk7Is5-YU9GoWMHg21G6yJ6myfbWQPdB6W26xClBuMPSSs34YUD_8mfcL_vTiWK_Dm7vMc7S-dpEu2bW4dvg-OZBfy2wRwC0IiPV6rFoHO4YeWVltBH7JdMqwV5IhVuTxrqrXBjEFag1wFpQvp9tZCTllE730Z-8Fdjc-mN-lhAuqLUGW0orE7PuqFhWi9AZ8sDaBDDyXh15DR2uxOMR9Uq6HdfTnpcZmYAjLyvrBd2YxiTgyunnBa0JPuk6hTRNDRBi6cNAw4dvpoZC9AV7Lg3lvva-HjxMPzKEG3DXJPXdXzP2OH8hpnLIlaG0o4BiqGr_pRVOgnleMnLmqUeQSoO4HfXWGrCjMAKIyuuDwPjXreDDd9IS_yK1UmkdqZe7If0QqJFnWqBwWizOGVUCdqbmlvAsbUJYJMr9lgsJCMFI7exyQdkd9HB1OxY--kStiR1uqpmsY0Jn0C3Q-4sV4jSe397oyvxJ0JVMx39i00Qdlyu7Aqkb-0CqQkeQVXAG6hjaeF1K9SwZRwnHxUsJm5hDAcstoWcmgmNh_OwcNaTxsLnAQEE8eAxM4NSEfg7SfRelrTRuvWa7mse-D8JxCZ5qOUI8aX7JfZAazmf1KNwTLCxtXD-UkIuoFWqpRgyO5ndrzQuxPgXRbdiVZMbQyrQ0Gx5-Pf9DTIzP-SfHvlnuyw8qEfcwVGpmvXhfaNuCFGWVRrJMkiofxfS8W7IaiynUMj2I1rKVFT2qZXSMWWHqnAm7GiMvYcTIQ5fqi27IvK1bMIsiVoJtvzpkbP9aFOVr32goMKjOpz9H07Z-27-L3pzQmbuXPc_Pyogn6zpCMj2oYJ4X1JzhxZE_FMJWQ6eA_xl1DyHyYCvi8MZF23F2hZxg9mJR_-ApNvhjdakCasAAwm-HvPOiwkWeGRqu-B9NG-SQYEFMdEtval7gax7Ke4o9ddysIXPDhx3dTNWJn_U3eKqupogAJWeVaFtCBQp8bq2P_qmYf9ZJpSu4pqnr5Hq5f4ModkDaxYFGvqs12w92gQVga01cMBPIF632s-xtV1sp7g-nUpIB-befZ_sXUL2nveXOlhwx4JnxjVEa57-0s72TxjSHvZjJEWWD0RgmSICh2qxDnQrNItGG-sa7FOrvE_8fHJwhQeMTQ_MRK0CW_t72Zjcb6xOYT1CyIMO5ew_4wsY-S5FHEXNuvUCDRDz5Fea0WisfhmVAkbMq1FoH9Jbo8YF8Z5LrspJBF3RpZZ1ZfKHfdXXRerEK4q385GVYLI1IYMgreyZBmlWQIyzns9rpw2MpAJOHZ0-FyOv","summary":[{"type":"summary_text","text":"**Getting weather in Florence**\n\nI need to get the weather, and there's a tool, functions.weather, that can help. I’ll call it with the location \"Florence, Italy.\" Since I only need one tool, I won't use the multi_tool_use option, just a straightforward function call. The tool returns \"any,\" so I expect to receive some data to present to the user. I’ll keep it concise. Of course, I need to think about how to handle it if the tool doesn’t return data. Alright, let's call functions.weather!"}]},{"id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_sJPwWtSGWMgzQOA2gIu6qoOn","name":"weather"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":63,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":191,"output_tokens_details":{"reasoning_tokens":128},"total_tokens":254},"user":null,"metadata":{}},"sequence_number":125} headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 312.0085ms + duration: 971.316584ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 788 + content_length: 3757 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_zgUaIBRPTwxxOusyyKw5NVMH","name":"weather","type":"function_call"},{"call_id":"call_zgUaIBRPTwxxOusyyKw5NVMH","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_04a0755191a2e626016ac36053fdc487d09bab8a4b008acc04","summary":[{"text":"**Getting weather in Florence**\n\nI need to get the weather, and there''s a tool, functions.weather, that can help. I’ll call it with the location \"Florence, Italy.\" Since I only need one tool, I won''t use the multi_tool_use option, just a straightforward function call. The tool returns \"any,\" so I expect to receive some data to present to the user. I’ll keep it concise. Of course, I need to think about how to handle it if the tool doesn’t return data. Alright, let''s call functions.weather!","type":"summary_text"}],"encrypted_content":"gAAAAABqw2BXG9eLRs7-XYT6aDPfEHZo53fP0bjK1k6C8Y4ZxpYaw7JtOd7RwETY00txRCkWszP5vU4351LqvvIZEdTabPKcIi8GtVEfljwKkU9CdVO9zotqYBLfc-mheg8jmWQX_LUdEv0ySbD9V97UXnpwBoS0EbK81gg4YPU55RiXMgCKMOMGWyeV_Y7z2FpUw3fQ1XnUdaXu-IURwrCNHmDSL6jCA-p0lhP51a2vyX23BSmXP3XV5zhUUtOoh7diluxMJoKp_2NkSv9sMs5ASMyKZ7S737qowLvbosav_BTwkjWCYe35VJbsx6u4tgGQvIVEuv28SQPg-FwM8KXOIRtn-Fla9IHhKldEuDw9aIocr6fomb2rhaTVFYlDJ2r8DzQvyT_2cd6mxZp1emK9JzQKYFaIrjvnGUeJ-d8US61KJ0m168dlBELEqGDPk7uf5WPs_wOyQEEu7cfIpNSle7_iGEV924M6zWGio3Xd0SvE4jRgMmJtvWKcgupymNBPTYiUn5pG6Km2ffnblt99MPvU7TOA719uxgjKYEsBh-vs97oI0jqnuIh0u_ilvY3BG52yEp6CHbq9Rncasi6HaOn8Ar3zP5FNBmo5lTMORfAvVWEsfrr1zkgyaVHuDeOjcdh-IEUzybLuBwrY__M2Ushcrp1N-YAPZk25l6OVTUbCsZ8ZybSUxuGHQktwODv6uB6fkgweuNxS8tWq6-Fnn0Kf0obbZpywHriPyUHwy7QGCjYPnEzRjzpMnGJgjiluraRAsrhGBo0dcJJPal6awqfUVN3hMXVPFMIIQw77qxQoBLx2b4auI0yXOZJDrt9NZa3uYl3tnvn1ytZPbCq-98EySbFzlfgMc0Cv5nvsXTW0Z0QLOVBGX2YsPXlxhSArfFs28d_iUUTmHs4KJJ-8wG9EUL2mYWzL306OUMhwpRTPdabl60aUqa-WRqGJnOxxX50SuH3vPP5xLgn-MMUILZ9fzlRZ6GIg2YrBgP1D-INJF-JogfT5v1UJkWK98L2fGdsUr0vkoasnnOSvecYYY-eOG7iY4n6z9AgxwyAar3xLorU_Cds03kMR_uEQhrLEiPSIC99nbKHZt_XHEkcmqoPoQ-1hVhThog9XYa6Wps9SOhGcIYjv6mGVkGD1T5iWnAtQvobM4CyevHYGeCXC5iYtkGPn0uqIqGxZczTsP-SrFKWgc_M4U81PKq_0roCRjVPT4PCp0RbaS-Xfz3_alX1p3hFDuB5A70PquRnAUW7tNe5p2MFLqknv9ZYahzAinwfQwAt9HQ0ILUyGvmSsQBPhZrKtOdFn3sh5dzJjxfy92lXRj1GB44pcAPdcoozi44WJmqIWpaMPgbdFtxyVa0PLcSkP9QRIa1lXW-4mUBly2TDr1_8PaLkxcJJbQS78KdGFesftbKckHBhMcByj-pWMt8lw9AMRdMashTpVtFTy7Y93p1Vbrn-_PEm-4VtuNwv2x7nPVrBDDeQEm3lg9r5ysNRB53vHAtItDNnisa9-t_QjAOB9ZaPoG2M8DBvx24eyGaBCYB_uiz00_cMSAHxITNXiTAdI0TMl3C7K8E4hFJ2b6ptqsDoQRCAVK1hbq8HgTVNl1T0WuXGJv-sliGeX3NMKvz1PpdGoxtHd0zGko5yT0QKo7dCQov9CXkQR4OOVlNp-1vbZ3980WD2URIJhUyX-FG04ToP03fZm0pNPdjuAAo2eQJGiRdhR0gV5hd7zMJLpelC9yuBb8i_ycCNhBWIk9eA51_XXJr5qdw7ie3LBvncP8K2FUfIIvQaeYLx_ZfDxJz_bjV3E9DBioKrtsmjGC6UBZWi9blgd4vQK178b6N8gyHSY5AdHi8To5CicbG9vtwxsqGntTFfRTz1fhKu15NGXH7nh0wtfhFWsrQb-wzMlP-9wUtBR9MNl9haWFUAQvpsGJdY_-DeJj9jWEDKcHZ5dDrasRqZyLtOxwQ037pHxV-7EZ3zeYBO4WWw0Gh7GQ4HOsv0CNb-5argh3ka15PH8FWaRcNXKbEsYbG6EL8WQYq2G7CDnv1zp6wbgtN1idLFpt-Zb2RO8ggOxTRa-XXAJtvoTD1q9NeFE9gDUbL2pqcV7I3hy0LgB0LJXUewJ43bDX0OVvxAQ7FryRsyYshFGQcy_Hlu7RRlovD-bw7tRMectDh8_b_C2JQW7z85uoCFRuEzCCpVYMX7g1OMkpjXEY5_T1kGNB9xhbEkwYLfEw9BQOKbQF1_kExc9n4YG","type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_sJPwWtSGWMgzQOA2gIu6qoOn","name":"weather","type":"function_call","id":"fc_04a0755191a2e626016ac36057b94087d0838652327a9de28c"},{"output":"40 C","call_id":"call_sJPwWtSGWMgzQOA2gIu6qoOn","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -336,368 +432,680 @@ interactions: content_length: -1 body: |+ event: response.created - data: {"type":"response.created","response":{"id":"resp_065915db01d8635a016a3c125658a081a38159e7d307d23d65","object":"response","created_at":1782321750,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} + data: {"type":"response.created","response":{"id":"resp_04a0755191a2e626016ac3605862b887d0b6222645c259bdbf","object":"response","created_at":1791189080,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} event: response.in_progress - data: {"type":"response.in_progress","response":{"id":"resp_065915db01d8635a016a3c125658a081a38159e7d307d23d65","object":"response","created_at":1782321750,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} + data: {"type":"response.in_progress","response":{"id":"resp_04a0755191a2e626016ac3605862b887d0b6222645c259bdbf","object":"response","created_at":1791189080,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJWnVbUj1Pc-lYHtqrXzHke4s_WmAOdIHTHWd7BaV6fwhTNd6aWTrOnHGPDEA5fbUzoCDIwoxBtGl5nBu8JXW2TzeknYlENMJHbJ8YQs__BSX6Fv-am1b-ZZwIvfE2nWJzDuaVwVFymjHg6ibiKtUgUks44fXFk5D2g0jsiRplEGSkx7pmCZ_EtK_V7nO6vNU9YFw-fH7hR0yR3_2WN5ipt4Vl4918HQVWnj7TBZmdOxs9p5Cn3-fiusw41eFNWf059vQ5VrGIBoEFqL4S3t551AfWExCbAVzLAc-1Hw_LlIc6HF9T93znZI-ZTQ6LfqvsQe8ccunYadl6DSUd0O6vMtZnoXZ7Kbz89Nzh6fOudZq4MFJytlZz0XqBLZnfoLl8IGBpmheDrKttmoAu_Rjg9vLHhXMi6dvljfjvl71zVwr3pZsWhgkX95_-TifAaQp2giufpOSfzqTIx43c0np5EmIz-vxegTYHEmzsmYbZGvVJLkE0EJJwqFJAB9Mn2tvXiB_np9pXxSpQzgpfOrLc6MBpvGyPaz2DbB9or91EzycuVUsSkFlGJ8sZPnF9LiYVAHoRAqqFctYRaNCgEdtE7d0QlRv2V_ngejFyYLRktjaGaXQi8hr0CxqsBGWqBTmYCClwAy4VJvvzDn-kMQQJXHLP70LJamPSfNTQ-pnbUPBiNJiIuwweU84YulC0fXPJpkRJ4ilr3tu6MrgJFxxoJUMvcNc8NvZ1ag9gewQ_QKfeh_A5nFLgIlFqcqSBsuWGCZU44-2W9bDtdypFomCuu0l15OffS0lCjJHuEiq778KTKeeB_s8mDQvwdq1Z-FRC_HrxcsyizKZARYA1jkdG-5XCZ70csEYT1U8DA1umCPofOOl6tOgDsXJ51Wm9IvcK0MwQJ5w6K5KtBIqMGYFbocg==","summary":[]},"output_index":0,"sequence_number":2} + data: {"type":"response.output_item.added","item":{"id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BZU-LfUYjFqsd2IhfUBOtDisVn9qAf3OFy2fi_voiwu4CA9C9PvXX3DrSdESP0du1ZqmtXrOtMCzlsV229eLl6MAM3Xja_6rb1LHPfOj4t49xjsuTuwSA0ZzDmRzThh-cz9hJEwYhBtckeOS1ht18EZmoBDY8ZgQjeobCjqWEKlMjuXn-DcRabDfTqxUXc2ulb0V5T3eaBWT3gaXgQq9o4eb22AIECPOECCbIyWi1iArQHKqzArDsZPefv-hDakSxB4MI6Ypq6C3pJjFiKbrKFvaHBnOYmmLUBJkGNgIdGaUZQDnD1Ex1pdPsQdvBEY_Ha6AMzGiUYoXN8Mi8x5CujB0ZHntnFmM_0AkWFP9rsO-qctyvdV1UwNr0CdQl76tJ-dfMXKbblmwLnLBIteQ8uCOgtJOTdzFv8-URyYb1aDONw86Fnr-ho63hB0A0Hb7mKNeB7fbPqlIo4txJ7Gm6ryqvtvFARbLq68MlyAXLofIeG_H8EXyweX8B0L8C9Cj1FyDekn2WNtVucxSh-juM1ybAtlE3KRWdJ6DoToNGhI0a_SXkKI0M_AVYHpk_D4z9aAnHocwJRDIyJQ_wGSeVSqV9fOsB88zNhcNhFkxMyyRADJRdx-DweiSOugwfAUmj6-31VWUus9hOjeqmbu1hNsFaOGjZYf-k29hVc3D8kekuicEFF98-9Vq8RRDUKUPHwlUENSIGS-pjU0ysPnKEOFhgZHxj32tsAR-y7oKrBf4uF2iwdamtzkS3ZA3cNBu745ZyX4kvKuiBnOb7amSCTHwdSk8-JAsIDwtrVh0iHdticbX4meCzI4MuiBrpOjlMP5lrdmiK7El-18ntqfy8Hw0Cp4SGxFmigOmBJASpN-ec4a4tKbORY6nKcCIn7IIy3j0Mo_JPaMcKjVEiUG_Enck33Cmfk9e9Nm4QGfBA6KU_wa71_ap1e_mTgxfhplRX3hPgrPUuLX0FW13bxCot_4wJfs1C8M0k_Rwxw5WGZBloAKJNhHWWG69AnWeIe7bTpMypCcmrv2XQQOAQShaGLdFWmUdRmnX2Oqc-LeCx6AQq24529EK4wlO6RlXvHLK_fe3ctW2mGB8mEN-EOY7rl7VQQEyq9LN0CkPpG2FozeSJ2VSfFcuvCj9gOJ67kT_64dmfzY7c1OoF6D7wYFyfpMg==","summary":[]},"output_index":0,"sequence_number":2} + + event: response.reasoning_summary_part.added + data: {"type":"response.reasoning_summary_part.added","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":3,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"**Reporting Florence Weather**\n\nI","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"kiSRjljfXPReRyw","output_index":0,"sequence_number":4,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" received","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"o2FvmN6","output_index":0,"sequence_number":5,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" a","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"MCrQIhEuHSsdam","output_index":0,"sequence_number":6,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" temperature","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9Rra","output_index":0,"sequence_number":7,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" of","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ihKu45CABE1vm","output_index":0,"sequence_number":8,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"mkWQba4su19DZ","output_index":0,"sequence_number":9,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"2IhWZhWJESbcvE","output_index":0,"sequence_number":10,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Br1ALFuy9Rq8DLe","output_index":0,"sequence_number":11,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" which","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"TPNFrv0hwe","output_index":0,"sequence_number":12,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" is","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"1feKDrhRDd6Mo","output_index":0,"sequence_number":13,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" extremely","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"2Rh6ie","output_index":0,"sequence_number":14,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" hot","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"YWKXQBHaZWCq","output_index":0,"sequence_number":15,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"!","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"EhjCSfxGWJRg5KV","output_index":0,"sequence_number":16,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" However","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"oKBDEoOJ","output_index":0,"sequence_number":17,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"mfgHkwYdHq5NCBp","output_index":0,"sequence_number":18,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" it's","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ThPWnk4XhNa","output_index":0,"sequence_number":19,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" important","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"6ftJfL","output_index":0,"sequence_number":20,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"a9ArRTF02ehOO","output_index":0,"sequence_number":21,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" note","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9ccsxNNS0kF","output_index":0,"sequence_number":22,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"STAtRUDM62w","output_index":0,"sequence_number":23,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"kXyVTByLDIvMXi","output_index":0,"sequence_number":24,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" only","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"EkykFMPlRh9","output_index":0,"sequence_number":25,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" have","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"RoelX7fofhA","output_index":0,"sequence_number":26,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"HQCTbJ8vEQoJ","output_index":0,"sequence_number":27,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" temperature","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"koeP","output_index":0,"sequence_number":28,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" data","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"VFqvH0ECmuz","output_index":0,"sequence_number":29,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9D1FFvvOQQW26sm","output_index":0,"sequence_number":30,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" not","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"notIgmAyEvpw","output_index":0,"sequence_number":31,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"5DdTAuN9pjxs","output_index":0,"sequence_number":32,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" current","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"eogbDDHC","output_index":0,"sequence_number":33,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"1buRl1Ai","output_index":0,"sequence_number":34,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" conditions","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"NCLfj","output_index":0,"sequence_number":35,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" like","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"GSJj735cakM","output_index":0,"sequence_number":36,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" sunny","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"rcVkPoGNe9","output_index":0,"sequence_number":37,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" or","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"jYjYhrSQMWtb1","output_index":0,"sequence_number":38,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" cloudy","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"QWxbHCHWn","output_index":0,"sequence_number":39,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"XJKZr7JrRwbkS2n","output_index":0,"sequence_number":40,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"VshKRPA28uu0kN","output_index":0,"sequence_number":41,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" should","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"kcSeydcY0","output_index":0,"sequence_number":42,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" communicate","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9ANX","output_index":0,"sequence_number":43,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" this","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"EW3clAJB0JH","output_index":0,"sequence_number":44,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" clearly","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"t7wfll3x","output_index":0,"sequence_number":45,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"OHxpLfxmdpcGDrs","output_index":0,"sequence_number":46,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" stating","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"27c1UXVx","output_index":0,"sequence_number":47,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":":","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"3cFG0zam0gbQiwE","output_index":0,"sequence_number":48,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" \"","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"1jD9rEx8Pbg1lJ","output_index":0,"sequence_number":49,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"It's","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"cU2b6ZNAb5sf","output_index":0,"sequence_number":50,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" currently","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"UkPKPK","output_index":0,"sequence_number":51,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"QVqqe6Rqv58sD","output_index":0,"sequence_number":52,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"bDw8p2rbRHCMVQ","output_index":0,"sequence_number":53,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"T6L2T0Qi1nwTz","output_index":0,"sequence_number":54,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"7GPLMj2","output_index":0,"sequence_number":55,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".\"","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"oRrh6W0GxduzJT","output_index":0,"sequence_number":56,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" If","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"SDnvVCLoMfllJ","output_index":0,"sequence_number":57,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"8fK6mHxYAOcR","output_index":0,"sequence_number":58,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"l05m8Jul6Xw","output_index":0,"sequence_number":59,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" wants","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"19kpC2iFBe","output_index":0,"sequence_number":60,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" more","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"IUthB9iO1hP","output_index":0,"sequence_number":61,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" information","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"I5D8","output_index":0,"sequence_number":62,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ElOCEFYj64FQXMf","output_index":0,"sequence_number":63,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"AEHczEwFd41Xij","output_index":0,"sequence_number":64,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" could","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"1BxdOUzxrC","output_index":0,"sequence_number":65,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" offer","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"JY9c5Buf5q","output_index":0,"sequence_number":66,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"xjrryh7xBp76D","output_index":0,"sequence_number":67,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" provide","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"AInlSnUK","output_index":0,"sequence_number":68,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" details","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"4jeA2r45","output_index":0,"sequence_number":69,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" like","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"kpOpyDkHF07","output_index":0,"sequence_number":70,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" humidity","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"F0WqQbG","output_index":0,"sequence_number":71,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" or","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"0siV9oWAjGKjN","output_index":0,"sequence_number":72,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"x0OV1Tf734yd","output_index":0,"sequence_number":73,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" forecast","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"L7zPXXw","output_index":0,"sequence_number":74,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"FGmdkNNJuzROzhG","output_index":0,"sequence_number":75,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" but","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"mrOVeqJlw2ds","output_index":0,"sequence_number":76,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"SjzsqQp3GMCsiI","output_index":0,"sequence_number":77,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" want","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"WKFnjzW3zOa","output_index":0,"sequence_number":78,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ZFP5QWZArZ5fn","output_index":0,"sequence_number":79,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" keep","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"AxSH8XRkI5P","output_index":0,"sequence_number":80,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"yvyafKkHO6qIL","output_index":0,"sequence_number":81,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" simple","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"YopZUzis2","output_index":0,"sequence_number":82,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"4lt8yGf0RiQVCUf","output_index":0,"sequence_number":83,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" Also","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"CRuETteiOGc","output_index":0,"sequence_number":84,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"2ehjlL3RwzmlVwS","output_index":0,"sequence_number":85,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" converting","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"JRSZP","output_index":0,"sequence_number":86,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ql9kYSVvHyJiz","output_index":0,"sequence_number":87,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" Fahrenheit","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"avFaU","output_index":0,"sequence_number":88,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"akZOn509sNKfkRU","output_index":0,"sequence_number":89,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"OqxfvQ2n1dm9Q","output_index":0,"sequence_number":90,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"qjSar0ma05wB5I","output_index":0,"sequence_number":91,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" equals","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"bWWoDYfc2","output_index":0,"sequence_number":92,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" 104","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"U6s9LEnOCLag","output_index":0,"sequence_number":93,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"°F","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"keEBOmlJWOUcYo","output_index":0,"sequence_number":94,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"BhyTWwypWd4LHUS","output_index":0,"sequence_number":95,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" which","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"CkXWkZVscC","output_index":0,"sequence_number":96,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" is","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Tdb0uuDMAypCC","output_index":0,"sequence_number":97,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" useful","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"OaLDBLbBS","output_index":0,"sequence_number":98,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" for","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"HEdDqPhT7sJl","output_index":0,"sequence_number":99,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" US","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"XMM5z7Een7fx6","output_index":0,"sequence_number":100,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" readers","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"KiJTMuVV","output_index":0,"sequence_number":101,"summary_index":0} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"PpIk6hDeJN3AEuj","output_index":0,"sequence_number":102,"summary_index":0} + + event: response.reasoning_summary_text.done + data: {"type":"response.reasoning_summary_text.done","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"sequence_number":103,"summary_index":0,"text":"**Reporting Florence Weather**\n\nI received a temperature of 40°C, which is extremely hot! However, it's important to note that I only have the temperature data, not the current weather conditions like sunny or cloudy. I should communicate this clearly, stating: \"It's currently 40°C in Florence.\" If the user wants more information, I could offer to provide details like humidity or the forecast, but I want to keep it simple. Also, converting to Fahrenheit, 40°C equals 104°F, which is useful for US readers."} + + event: response.reasoning_summary_part.done + data: {"type":"response.reasoning_summary_part.done","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"part":{"type":"summary_text","text":"**Reporting Florence Weather**\n\nI received a temperature of 40°C, which is extremely hot! However, it's important to note that I only have the temperature data, not the current weather conditions like sunny or cloudy. I should communicate this clearly, stating: \"It's currently 40°C in Florence.\" If the user wants more information, I could offer to provide details like humidity or the forecast, but I want to keep it simple. Also, converting to Fahrenheit, 40°C equals 104°F, which is useful for US readers."},"sequence_number":104,"summary_index":0} event: response.reasoning_summary_part.added - data: {"type":"response.reasoning_summary_part.added","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":3,"summary_index":0} + data: {"type":"response.reasoning_summary_part.added","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":105,"summary_index":1} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":"**Presenting Florence Temperature**\n\nRight","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"DX8L7P","output_index":0,"sequence_number":106,"summary_index":1} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" now","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"53QQNtWeBptU","output_index":0,"sequence_number":107,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"**Finalizing the response**\n\nI","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"ub","output_index":0,"sequence_number":4,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"v8K2ijkR5k4jl","output_index":0,"sequence_number":108,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" can","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"SH2iuGiuaSit","output_index":0,"sequence_number":5,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"swUg279","output_index":0,"sequence_number":109,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" mention","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"TM4kUnrn","output_index":0,"sequence_number":6,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"XaazMXCMMmEBfjP","output_index":0,"sequence_number":110,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"ufbZYu7sWFEZ","output_index":0,"sequence_number":7,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" Italy","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"OokagSFN5A","output_index":0,"sequence_number":111,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" time","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"kpW5Dcq0c4f","output_index":0,"sequence_number":8,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"2ECPWgEsuGNPUDp","output_index":0,"sequence_number":112,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" of","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"KKCjni062c6c5","output_index":0,"sequence_number":9,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" it's","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"h80BrzhpNZs","output_index":0,"sequence_number":113,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" day","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"zvQA0vRgQpTo","output_index":0,"sequence_number":10,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" about","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"dC8eQoa3CL","output_index":0,"sequence_number":114,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"IYFXMN1b9tDmSSc","output_index":0,"sequence_number":11,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ljoJ6UnugKEVL","output_index":0,"sequence_number":115,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" but","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"Bc4K3wbuwVmE","output_index":0,"sequence_number":12,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"R7W67rRSSJMFwt","output_index":0,"sequence_number":116,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" since","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"62wAw5q2yb","output_index":0,"sequence_number":13,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" (","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"hhqhL690dyo5Cv","output_index":0,"sequence_number":117,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"Q5kb3bO3SF0","output_index":0,"sequence_number":14,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"104","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"t4i86Yskw3FIm","output_index":0,"sequence_number":118,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" wasn't","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"6Bv4KMm0e","output_index":0,"sequence_number":15,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"°F","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"FhE86YHbf3PkN1","output_index":0,"sequence_number":119,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" provided","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"EE7AeUA","output_index":0,"sequence_number":16,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":").","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"XofsKeOUmgKZ0K","output_index":0,"sequence_number":120,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"aWd77flcLmDFtiI","output_index":0,"sequence_number":17,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"uVIVchvDcGC8Fe","output_index":0,"sequence_number":121,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I'll","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"PyQTETV0KZu","output_index":0,"sequence_number":18,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" should","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"GNYbXOQ20","output_index":0,"sequence_number":122,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" just","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"cV7b4X5L723","output_index":0,"sequence_number":19,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" make","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"5IjjRKSd4WX","output_index":0,"sequence_number":123,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" stick","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"39A03XWUhf","output_index":0,"sequence_number":20,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"jGPsFrky1b4UN","output_index":0,"sequence_number":124,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" with","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"dXI2xnkRlzS","output_index":0,"sequence_number":21,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" clear","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"U5BDJeqleS","output_index":0,"sequence_number":125,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" \"","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"QbG9NxFiircApr","output_index":0,"sequence_number":22,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"WATbYzv0ECm","output_index":0,"sequence_number":126,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"right","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"BhYVmfxTlfD","output_index":0,"sequence_number":23,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" this","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ExratKfOKzB","output_index":0,"sequence_number":127,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" now","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"kj8q4GtKTmeu","output_index":0,"sequence_number":24,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" is","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"id0LemnNafDVb","output_index":0,"sequence_number":128,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".\"","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"GXe9uxjJC6kIQx","output_index":0,"sequence_number":25,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"N9i0VQ0Ou8RA","output_index":0,"sequence_number":129,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"daEgbfUXTJOosf","output_index":0,"sequence_number":26,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" current","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"vBjmrEfr","output_index":0,"sequence_number":130,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" think","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"HGkeVOhCFo","output_index":0,"sequence_number":27,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" temperature","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ZmU1","output_index":0,"sequence_number":131,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" it","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"guwoYnOxQDfdz","output_index":0,"sequence_number":28,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" only","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"P32ooC4NGPk","output_index":0,"sequence_number":132,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’s","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"qMxfeZtkMEyg7x","output_index":0,"sequence_number":29,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"lfebyIxahuN4hm7","output_index":0,"sequence_number":133,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" best","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"yEwhjIIgMHb","output_index":0,"sequence_number":30,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" If","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"z3r7uaWI7rxhc","output_index":0,"sequence_number":134,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" not","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"EaHLCl0AlcSd","output_index":0,"sequence_number":31,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"LqocqUXV9OIx","output_index":0,"sequence_number":135,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"NIo6bcMAyk98M","output_index":0,"sequence_number":32,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"zArfTFauHaz","output_index":0,"sequence_number":136,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" over","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"IoR3LurRzt1","output_index":0,"sequence_number":33,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" wants","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"JbczYDR8mD","output_index":0,"sequence_number":137,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"comp","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"nu6g0PxLOCMY","output_index":0,"sequence_number":34,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" more","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Pt7ID5ObVKd","output_index":0,"sequence_number":138,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"licate","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"lr3qVQ1jSJ","output_index":0,"sequence_number":35,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" details","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"WFzpLCPx","output_index":0,"sequence_number":139,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" things","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"IH5MS1u4U","output_index":0,"sequence_number":36,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" like","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9BdWx9fESA7","output_index":0,"sequence_number":140,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"TVa9yACT18eQePB","output_index":0,"sequence_number":37,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"BGSLfGKsIYEK","output_index":0,"sequence_number":141,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" The","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"5y8NJvrFctXk","output_index":0,"sequence_number":38,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" forecast","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"xm5B5Zj","output_index":0,"sequence_number":142,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" returned","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"NcUOvYL","output_index":0,"sequence_number":39,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"D4Fsjba7RLLNkz7","output_index":0,"sequence_number":143,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" value","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"ziara07Ejc","output_index":0,"sequence_number":40,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" humidity","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"EHfE7Gv","output_index":0,"sequence_number":144,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" could","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"hWRGxvLGTD","output_index":0,"sequence_number":41,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"1ICmmZDb0YdJchD","output_index":0,"sequence_number":145,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" reflect","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"XGZB0Imv","output_index":0,"sequence_number":42,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" wind","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"73eEXtd8fUF","output_index":0,"sequence_number":146,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"flcWmWgY4957","output_index":0,"sequence_number":43,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"trAzjy9TsfQMGF5","output_index":0,"sequence_number":147,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" midday","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"h03eTfyOH","output_index":0,"sequence_number":44,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" or","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"OwKmp5bHIcSSx","output_index":0,"sequence_number":148,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" high","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"HMTS8lmr1Ma","output_index":0,"sequence_number":45,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" an","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"3zIG5lfWzRP5V","output_index":0,"sequence_number":149,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" or","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"GSxcSOIdOAyU2","output_index":0,"sequence_number":46,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" hourly","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"JRwEObZ5r","output_index":0,"sequence_number":150,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" other","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"ut2M1XFmlF","output_index":0,"sequence_number":47,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" breakdown","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"kPjJTz","output_index":0,"sequence_number":151,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" specifics","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"ImLUJM","output_index":0,"sequence_number":48,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"0pFjsrZelm2K4eH","output_index":0,"sequence_number":152,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"lpMpoTyoEZhOUWf","output_index":0,"sequence_number":49,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"8VlJzyAQ6IJrIh","output_index":0,"sequence_number":153,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"S9RtjfjYJhY0HP","output_index":0,"sequence_number":50,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" can","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"wYYJytwY7bCY","output_index":0,"sequence_number":154,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’ll","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"usyZ3caHxfBOy","output_index":0,"sequence_number":51,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" offer","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Q73mTfLbXc","output_index":0,"sequence_number":155,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" keep","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"oOAtWGGkcGF","output_index":0,"sequence_number":52,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"dGA90OPMqax","output_index":0,"sequence_number":156,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"RPbYrhUgn6lV","output_index":0,"sequence_number":53,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"cs88zp4IhOG17n4","output_index":0,"sequence_number":157,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" tone","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"GuMY0xlR0gs","output_index":0,"sequence_number":54,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" However","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"tyQhCuQ3","output_index":0,"sequence_number":158,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" friendly","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"k30OEpx","output_index":0,"sequence_number":55,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"9hkyEOe9Cdqsach","output_index":0,"sequence_number":159,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"Yqwn7cOg8W7T","output_index":0,"sequence_number":56,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"lVy861w41qQSVE","output_index":0,"sequence_number":160,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" straightforward","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"","output_index":0,"sequence_number":57,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" want","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Dteta484uzY","output_index":0,"sequence_number":161,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"7P7PXqQvtN4EicY","output_index":0,"sequence_number":58,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"4ziWiEyzJAhXN","output_index":0,"sequence_number":162,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" It's","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"FdmqlaktFHW","output_index":0,"sequence_number":59,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" keep","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"tIUrklwC2fg","output_index":0,"sequence_number":163,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" important","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"D7GOan","output_index":0,"sequence_number":60,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" my","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"jMI9ekRsaQknS","output_index":0,"sequence_number":164,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"CiPdv3YEIaZ7H","output_index":0,"sequence_number":61,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" response","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"KgIooM5","output_index":0,"sequence_number":165,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" me","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"gnDR5OwsUlYP3","output_index":0,"sequence_number":62,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" concise","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ohReHFR0","output_index":0,"sequence_number":166,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"4yJTQqjUD0J","output_index":0,"sequence_number":63,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"IhUtYRDzqWkq","output_index":0,"sequence_number":167,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"3d1aHYVnFcNP","output_index":0,"sequence_number":64,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" avoid","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"jA194shCzb","output_index":0,"sequence_number":168,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" final","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"RwzM3phpc2","output_index":0,"sequence_number":65,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" any","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"NRFRgpQ1royS","output_index":0,"sequence_number":169,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" response","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"SfReASH","output_index":0,"sequence_number":66,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" unnecessary","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"SODC","output_index":0,"sequence_number":170,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" is","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"8AwIvG5ltB6ET","output_index":0,"sequence_number":67,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" disclaim","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"zTRlZnt","output_index":0,"sequence_number":171,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" clear","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"tEFgG73zNF","output_index":0,"sequence_number":68,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":"ers","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"5eIApLquDfHaW","output_index":0,"sequence_number":172,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"pGu6QKg3wUJN","output_index":0,"sequence_number":69,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"QxI7S5BakiDMowE","output_index":0,"sequence_number":173,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"PMRhObOgDKo","output_index":0,"sequence_number":70,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" It's","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"XSN5IsNnkKH","output_index":0,"sequence_number":174,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"-friendly","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"xjvojXc","output_index":0,"sequence_number":71,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" important","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ootV0e","output_index":0,"sequence_number":175,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" without","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"Bq2p1MZ7","output_index":0,"sequence_number":72,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" not","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"0VBxVL8AfMwN","output_index":0,"sequence_number":176,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" unnecessary","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"Cqn0","output_index":0,"sequence_number":73,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"jqd9T3H98Biod","output_index":0,"sequence_number":177,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" complexity","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"YsQeD","output_index":0,"sequence_number":74,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" provide","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"LGnXuqss","output_index":0,"sequence_number":178,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"30ok7zuT6co8AKL","output_index":0,"sequence_number":75,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" fabricated","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Giv20","output_index":0,"sequence_number":179,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Let","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"2HHBuNiEQB2n","output_index":0,"sequence_number":76,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" conditions","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"YBPsX","output_index":0,"sequence_number":180,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’s","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"dPZyHUMeZC4UvK","output_index":0,"sequence_number":77,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"HHbH6yDrf5g43zr","output_index":0,"sequence_number":181,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" get","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"gwPtLsRCDczi","output_index":0,"sequence_number":78,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" just","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"10PWsITlQlo","output_index":0,"sequence_number":182,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" this","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"rUDGmc1Itks","output_index":0,"sequence_number":79,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"Tbnre9Vzv3ht","output_index":0,"sequence_number":183,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" right","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"NDB1smEuvl","output_index":0,"sequence_number":80,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" accurate","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"ssZhIJ3","output_index":0,"sequence_number":184,"summary_index":1} event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"!","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","obfuscation":"zP7MzU8YbJOlNTh","output_index":0,"sequence_number":81,"summary_index":0} + data: {"type":"response.reasoning_summary_text.delta","delta":" temperature","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"m3KY","output_index":0,"sequence_number":185,"summary_index":1} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":" data","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"r2Z2bhpbG0B","output_index":0,"sequence_number":186,"summary_index":1} + + event: response.reasoning_summary_text.delta + data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","obfuscation":"CK7wHzhy2Tir9Hg","output_index":0,"sequence_number":187,"summary_index":1} event: response.reasoning_summary_text.done - data: {"type":"response.reasoning_summary_text.done","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","output_index":0,"sequence_number":82,"summary_index":0,"text":"**Finalizing the response**\n\nI can mention the time of day, but since that wasn't provided, I'll just stick with \"right now.\" I think it’s best not to overcomplicate things. The returned value could reflect the midday high or other specifics. I’ll keep the tone friendly and straightforward. It's important to me that the final response is clear and user-friendly without unnecessary complexity. Let’s get this right!"} + data: {"type":"response.reasoning_summary_text.done","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"sequence_number":188,"summary_index":1,"text":"**Presenting Florence Temperature**\n\nRight now in Florence, Italy, it's about 40°C (104°F). I should make it clear that this is the current temperature only. If the user wants more details like the forecast, humidity, wind, or an hourly breakdown, I can offer that. However, I want to keep my response concise and avoid any unnecessary disclaimers. It's important not to provide fabricated conditions, just the accurate temperature data."} event: response.reasoning_summary_part.done - data: {"type":"response.reasoning_summary_part.done","item_id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","output_index":0,"part":{"type":"summary_text","text":"**Finalizing the response**\n\nI can mention the time of day, but since that wasn't provided, I'll just stick with \"right now.\" I think it’s best not to overcomplicate things. The returned value could reflect the midday high or other specifics. I’ll keep the tone friendly and straightforward. It's important to me that the final response is clear and user-friendly without unnecessary complexity. Let’s get this right!"},"sequence_number":83,"summary_index":0} + data: {"type":"response.reasoning_summary_part.done","item_id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","output_index":0,"part":{"type":"summary_text","text":"**Presenting Florence Temperature**\n\nRight now in Florence, Italy, it's about 40°C (104°F). I should make it clear that this is the current temperature only. If the user wants more details like the forecast, humidity, wind, or an hourly breakdown, I can offer that. However, I want to keep my response concise and avoid any unnecessary disclaimers. It's important not to provide fabricated conditions, just the accurate temperature data."},"sequence_number":189,"summary_index":1} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJc4a19bWzRV5X76yoaKtnXWnU_ys5oZz-xUYk19AAi86w00Y2six2ZdiUatgIyDmTpukS5LkpbkUVvyLydHvPc2NG0Bb4jS8wz6KKJhK-RtEuNdC-5jbfEGgBYWotWfNoL74qdRD6GzhA8vW6-TKxbJf6lK7FZtwMVzj4r9a4mgtp_vB1gm1irF17GoK2SJUdv9qxlZtyX75uT3g7CYSumdfVu0p9l4gefbRXmmfohMHDnG8UuvW2JF5lpVJ8B0Icg4kLUoTiU1k1GmM9zrZHeKocONPC8X1V6xyMw8vEAtmDLTlILK-qDJICUCDE8XI7zCfU51yeELuw3KZnwIMa9-liSuI2_zZ2FNkeBwh-i_IOeGctmGixx09tPRu4JsOFKEORvKY_epImn3Pg_AOsjx2c5Rt99TibtA9rVNZz_Dq6nezsu8tHklqwZpit5DNLcvlcMchQWkWYcjNSVvWsA7B9-zdaEIOucKmiFDJC8vd9fABRxuaNAtTcw-taaxKafU6g2fUlPKZ7NGwZ3RqWgFIGOAsukZ9cEzqOhRB0XYla0qJrBMjjyADLt51--5_qHDbOnsyDBZUdTLrV6oQd0KXjbiyW7k7ynuCy-THbX8Lg5q5fW2u83-aq9n0Uce8_F865c661gUDWxe_pfYiw-_ENszr_e9NUG-ieSREVDWrtiuKHHPEpC0EfusjtSBdfTFKG6XrSoMYgAPnhrTssYLbQoHM6M7x_dnMffDLJi9sYmxl0Wn5wTgo_kHTKsrx86GSKhd-KuqTprl6BTLXTEnoSxJQkQk_uOtoKkGxmXBIj6ZkYNkh3QQmv9qV13qeGqrkgwpUm1DFHOSL5Tf9L5qrdWbpBjJ_Wzz6lxQIxTzYk3kg27o6uF7_WAEIiiU61O2-wvfwfFjH7BEFKrcyIv6WjFpPZwvsMP4basKARBA8z-JfAlxZTjCr1vBSjiNvyWIANtAp94oaRY18-IY0YS_7Pi7wZCVddU22M_LV8-FnbTzkryRweJhRds5eF5yitkAjWZQXtN4Y_CnqhubnKCCj788mg3JKcdpPR92ks72eWKYKPrixGNNo1Zcgggkg3QadQZLRK76KddU_bIF2FqwnyNpDYWKeHbezDavO1Ajw-SS0ioAlSvTBFxRlmQUhd2WjTjAee6sK_cQg2Hl26oNMY_bBiXHLc_Tx828Xr3BOyWUIjffyz0MBVvu9bTyC-t-44871Bv6eQIKL9xbV8LCeNXp2vwptWDa1QCfTQO2VzQCpgK5BcM-LBwp-ms_0Pjybq1mwfFniCylEgIKZ2VXgJoDcoOVJURe3AnyrGYgkXcRvJWybqMZD-BaAkOsp9PNhYyiW54wAJBXpgbhtJZeQ8NDo8YAzmXoFnuuIDwTdo0VV4-vE2LMSm_OINmYJr-GluVkNuxrEeVsbSsmcOwVSqKBqfLMorsmrVFRyMglYebZgjx6e7dSAC_vLLT7nxvrsLUvNvSJrgNecRk-YjrHm14bpDts9VUTei1xkEOPok4JD_1EdzfmJwf_-CGh4oAqzkMuGDa6OP0lOvC6B-lUjAJFWNOrASheFMhMF_phgiKsIKDoDP7VgxCnfNJE6oEsOK7jfEv7SGyodWQS0hKYBhDopVQEmmAfCDkqo0wAWSw_k-5sSEEAP-Ytyn9ZVmrriaq7AiYKiko_K6S49IQrhAZJRtSdETBojyQsDMKli4j274UDnNPfI4PTrRHNKPULeGh5qra2tXCA81ctrPeMzSbATDLDX90uxr3Iq7StFSknLQnLkvIcZvA5R7oDEhISMa1LJSGI534hIAao2q5YVs90Q52mbfhk4AYbxJyZ9_9gxb0x9FuRFLoFN-m4YZ6SAxonF4r8H0T29wvPFFXzxRs1l5sa3J83WBCmpBR_ugHyQdAUsqkY58xqbyXQgIApCwtMnoT8p0mx6j8epHPmXMj1GYTqoFP_EC15Uqr6nLcY4AkrSVAQgaaA17tYEEPDuSukrJ7fZCyBI4x4ToYk4Usf1QafXpLzWc_20RD3U-lkyTfKGVLwBMLJ2Sago9iR179UotGNgR_JWPGbdWygQgLhsg0qViRXEyl9bk0o0Mi91Su3uScRvPGDNi_dew_KMLF91Zy4pNAYJ4ySsRkHyu-qbU6NCs_XFswM8iZc3zRBCCNfd57aUYhYVU7duE6NOGpZwp4HwnOnDVcneCPLHLUAHEiqBk8xoQLIm0F8-Pglj8bSZ630vVzVh927I10y4Z1A1YablslFN-KwktCBMNOJRo953bG3_7pAMGryRjfsUa-ymxXv0Yt10liVzFdNo_DJeR2xN3HwZz-u30Pscu9oF1NVVduMrWVVqJAo1FnXgXFEmbCiKQImX6gjB6aqT66vb43VZIus84lS0fafkb-a4Zdi5gsn1QCWPx1zmPpuegaNf8KYKB8bLsHD1msvxLW4RlwkH94at9QuZ0zlewAbF8f5ZBsbphYOee8_vZMw6c4ilpwvM_vD-690vLJGu3c3PKsuraRjPQZaSrONtYx8YVmKFXKec2WP6O5PTmw_TYpz6hG-gqlI6CHYEy-KskQ1zP6-FwrPYL_sFkxCtW9iNyQ8D2SXqo0Y1FhFBmwpTUO12im7uhEXN37np-V7DqCdHypazofFUOEu_p5ov8SWYpwydFadatmvPSNY3pe_f1eG5qbzHp2ewsytCeA7f-lxAnFggt-GHoW1tFbfMRPhhdvXhUhZCraJ_pyVL32zrwOheEsC7agQ3lBwfvw7dcbyBL2jiGG51roiAYBmg9uL5v439n2klYJspqVcEgS3cy87QVBUz-RPQiSX_-Oz6TY7NH9M8oFPTQM3oNGsohnoGpDPQZuHy9iM5VyWy9lVDCFHSLFfg06FlT52QLtJ1zE-NZiOx3G6QPGXJ06oU8pYep7alvYRsHg4Ca6jpCxhhJGngLi-xUWUtmetQjvu99--egOlz0pLf8ImYp9Rrl3cEXxR7KDQU2Gz3hgljH_VObpMbXL0Jm0X-ntCAvF6zsbaZN3BpRPz9BDE3xjdZ7LvcbmfBjfbRhF3JlGFlJYLLc9MU9wXHf5FZgI_fQubcHtK16v5YHJTZXP5CFohwd4e2E2h47aB7G27CtqaN0CUf6aLOWG1c6r9yW_1joSCIfrdpfZCG33f4YsYLzRLc75L-mG8S9byQhr0bOvXsJM4a5K4wSDl6okG9ucjCja5Dt8CX6QGlreQQE8SvoJ0xQEQWmUvcA64ppysDLecYLssqlUqyfA_WNz0sx5asOP8Yc5vZ0UrJMWzHIiKqFyboo229jQvM7sW3mUogiaOIFzL3G1zi5sSytwNQh_BQzTPw8pN6P8-4QfvKKZj7YlPgN4sWFk0aavf5cHIudXtSLiRb2ClibaUclbjDU9Go98PhHNlUEq-n4hy1cH3iG4z9D8FLfVNil1yLjEmmFHhd0Yr2Nt5z3wzJ6ZOdBHjLf5SZ3f65Yb3kyIrZPzT7JJtEmcCF8ESjn5WO2M5L83ikLFeyZMc9GbmP9Q_-QU9OVJJsrqnnINlk8RjE4owhLjIgV5xtAliRJQDU5jqHAEZwNWpJubPzcAueIRIwP9I_5s","summary":[{"type":"summary_text","text":"**Finalizing the response**\n\nI can mention the time of day, but since that wasn't provided, I'll just stick with \"right now.\" I think it’s best not to overcomplicate things. The returned value could reflect the midday high or other specifics. I’ll keep the tone friendly and straightforward. It's important to me that the final response is clear and user-friendly without unnecessary complexity. Let’s get this right!"}]},"output_index":0,"sequence_number":84} + data: {"type":"response.output_item.done","item":{"id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2Bft96Uc3jMvF0wv6bx2ojB308cam3Ca0JDGkU7ry22xzFrEYpPBNuIoXstr9bSk95ibm-JG4uZ1O2cb5dWiw7KENNaEyxfxj-bj2BeFuUU6xmLluxCwavx-nFgJ7oE3YSOiAuJw3q7Ev5GBKOgQdOB4w7Dz7SPqd4CvGoAPhyx3HgXmgSP_FnzxmXByU1dwQvSW6pHZ8e-97MnxtqPdgYMgsieBGpXH6ddpfhEFXjymgIArVleZl9_2qJd2QLxU4EAcaviuZRhGVMyxAsUQDsOgWOr-ajs7jl7NiR_0Ex36B6pk8CsU7MyNebDl-RJWnvCIbdUbNXfqcNpFgogsaNg49Ht2mNdal5QmHMf-57RyUoTmfEv2x26kfL-aOGV_Um0lNko9Iaop_R8iTWYORmHB5fQon-tQazm9CXuftHSdRq4zTmGt-9KeBDRF79xaV89uIs4oKUjd-bc84feGQCJ82iUgUAY4gpo15vB-ErWMMcPAJgFyaFv6FwkYDhmPsZ5O0PmQo-R5G0JYVZrU8WGpZ4BNT7lEz_uDhKzx_8RZVGST3eyd7GqVwpA-t5Qj8F3c2oIkoHVxD1aa2EFrGmq2SCAQWb7pM2NSDPp1T4S-L3HfkcU4-YBEX5uorviw5FMF9I0bWAP4PlJTZJEiwNoapDhLtY8NFXzTt5j373a1eRraBI8tbXp0pWletzDAM07NdHtkwJVT9rqBPi0XxtmFsbkDp4YRmLq0NoLEQDf5krqUCx7XRkJZ_Jx6bXmRE_XPLEBiFbMFSH3Zm4ZvMqIhxvQm3UbLVaFieDYNDEfw5ToWawNaKnjjIag-RWOCTF5de9oXnC4sngstRU68pvY6_g1RXdkP8pn5CwR3A0n1AwiRxxg_UVzjeapeadOmbBnMZMv7I-ylg_-9kMLzl6wCQP2GPjB0aK6n1QQUQm2WKAgfpPf0-hGVlOTUjcDYx21nZwFzAYuDjzFI_VFVBmqd8XJVZlnuQqg8B_7PfC_CdOBKh1cFqx_z3U1hi-JpOBtw_U4cxYkAgw5RgUsTECuzAN2Pd43AaeUoo4OQn8sBS5Ddgs5CLqzQUSnb4ME-jAkPOyGQAuM7oR-RXKhDEhfWYZ9bZRVRZWfph_DT2033q6b60R2vB_NZSZ2geb4ZnETmdGi61vc7sWMBiugePSUnPzXqv8mMtE82LyMYV6vOfG7FYIzPENpMPsfQGGJ6euhPow6zYtqCpYW9LbYsirQY_mGHf5OqKH3ggfEpQlatAE0fVZUmsYO1ojHliK_KO0iduObSVPOGl4UNDGqO5Hpx8GNAkweeSwbcQD2aaNGGiw5bAPhmZ9w493nZkiAzhtmXPTO6aowyLk6WrTfXuRMllzr-wKew9LUqmIDw-ibtRTTxqk7r5WBwU9RRSxC-CyP0VyIzZkElx4T4VjlRcNp88QkTG7n6rCxO9k6Q123SYZuWEmQeOizNU0X3JKEMV2CUpJyJ5Mlz60kfzFvupf2ruiXMnpGSgmu8nBd5nhnyWx-Q_EVbZOKarK8JGpK6Qqmip8-OqQFXhuJiNN12Crs_bm-ZR8av8FG9Lr759W4vC_qsFKDsxzhp6srWSbhoeYOxh2QikEjx7r0f0HpQjhaNxnOoweOW5rLzRigHOhkksR7p8As5-w-VAT9QSUTxTo1NjiCdG4VdRZUqw4b0r63Jv0GyFJm284cAoDSLGwS5unxZa6wEFzt-N6DQVs2sciypNvOTziCoZ_X9p5MEgubHclcCcPdHRMBWYCGvZ2ZkC9rzSH4zpal9g3VCTE4N134mpvUTWWdJh-IvxNCWotf5V2CPBRFHIEe9zfJN-xnWAUZJRzqwmAPhD94mkp1HQnuH--zdR0MsDlnw7qU029aIjsDnN0MzdUUHLWuZglILmcl0uC3talKTTMW-nZidV9L4CI_xR18cZQG43C7std5C30oIr-4JfYLuclvQuMtoPs4HXzuQL9VjPNXg5mynnj0BoUwTmMLNC6Vkl0nP_7yI7pYXqfSZgIW2ngifYixy926S_4uBIAmC2vdI_1EzZqpfPvdD3-wc8toqqLN4etIzyfQCb23NXWF08InyVDJF7LA1FGrEyxt4yK9O8USP7FF6DAqwIyUG8CREnWvDL1WeVWkV4x6W1gJn2w7PWNUcFzgrV_c5qPbNxgp3-e4xOYdrP3L0p3xWnoNDyAAldH-8wG08hoY88IjRlwmgd0cw3dp8BDd59wqMEO7o-9z6aWe6fOVvsA6LRKDQXjpXrFWNho_qRevCDnwFcRm37moqfCT2SGhJ-UT-XnaLqOwX-UGTefxb67ScvIRtZwJaZC49Q4J7a84KnsAPEE2hpimdFLSVY3U-MRTGuVT3sstAVogq5pNzPgd4VcVe33h20zQjdLW55YTSak7_waVmWSGUMDs7fLnMPunhV9ivM9-jHVZ67IMv1O3qobpzzgDYC_zh_NtJ6Wtp8pK_rgAs_EZfpBFhf4_uAp0r8cQeo1w4imgcdFX9pWap7vooqtmY9gluFuxnbZ-aEd9kBUbL_aJ2ePAeWUqKhe8F8A1ET6sYReVvPgkbn8KN9BEDuV7uIsblgUSY9dYXTUSgtKEsEOpBwRO2OnJ8O8C_Pk9oAX8lWAuMzMSr6ktvj1Ff1f6d9Klp7A8bG9VWMU5XRUscOqcxbOu_ArQK1nzpMYaK0InTdNqRknptM0mkhVdMfFb8FwGWh4eK_1T9rvSU_UVFZ8YaxfTXCQuq9FbPnaR8f9-XnFoubjVV8yNyNiCN5i2WtxwWMrvOO0dBQKcz0fyYAWbzf-kcOTYqlnP9Th006oxJVBIkCmIJEtlrcqWSeTKho97ew==","summary":[{"type":"summary_text","text":"**Reporting Florence Weather**\n\nI received a temperature of 40°C, which is extremely hot! However, it's important to note that I only have the temperature data, not the current weather conditions like sunny or cloudy. I should communicate this clearly, stating: \"It's currently 40°C in Florence.\" If the user wants more information, I could offer to provide details like humidity or the forecast, but I want to keep it simple. Also, converting to Fahrenheit, 40°C equals 104°F, which is useful for US readers."},{"type":"summary_text","text":"**Presenting Florence Temperature**\n\nRight now in Florence, Italy, it's about 40°C (104°F). I should make it clear that this is the current temperature only. If the user wants more details like the forecast, humidity, wind, or an hourly breakdown, I can offer that. However, I want to keep my response concise and avoid any unnecessary disclaimers. It's important not to provide fabricated conditions, just the accurate temperature data."}]},"output_index":0,"sequence_number":190} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":1,"sequence_number":85} + data: {"type":"response.output_item.added","item":{"id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":1,"sequence_number":191} event: response.content_part.added - data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":86} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"Right","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"bQHwqldZeg0","output_index":1,"sequence_number":87} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" now","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"oUuEh3DiAb9G","output_index":1,"sequence_number":88} + data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":192} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"eDjVaXxC5Nxqw","output_index":1,"sequence_number":89} + data: {"type":"response.output_text.delta","content_index":0,"delta":"Right","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"IPxZvyOhrDL","output_index":1,"sequence_number":193} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Florence","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"q1m3IAl","output_index":1,"sequence_number":90} + data: {"type":"response.output_text.delta","content_index":0,"delta":" now","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"4fsgBCPjZsCb","output_index":1,"sequence_number":194} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"avobKV4bQ0tEMIE","output_index":1,"sequence_number":91} + data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"90RSjGTgUB3GL","output_index":1,"sequence_number":195} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Italy","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"y19bj1t7ij","output_index":1,"sequence_number":92} + data: {"type":"response.output_text.delta","content_index":0,"delta":" Florence","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"2VSKbBN","output_index":1,"sequence_number":196} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"ee98EyYKZh1lVFB","output_index":1,"sequence_number":93} + data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"etM66Hae5ngq7iR","output_index":1,"sequence_number":197} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" it","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"csp6guiFfjklT","output_index":1,"sequence_number":94} + data: {"type":"response.output_text.delta","content_index":0,"delta":" Italy","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"7e0YaxP06Q","output_index":1,"sequence_number":198} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"’s","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"hY3g1kQJgu4aYA","output_index":1,"sequence_number":95} + data: {"type":"response.output_text.delta","content_index":0,"delta":" it","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"5qBXw1L4oZKOh","output_index":1,"sequence_number":199} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" about","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"BtREGyuB32","output_index":1,"sequence_number":96} + data: {"type":"response.output_text.delta","content_index":0,"delta":"’s","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"K3MjeW330ZIzly","output_index":1,"sequence_number":200} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"EoBhWiXTUBvo7Cf","output_index":1,"sequence_number":97} + data: {"type":"response.output_text.delta","content_index":0,"delta":" about","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"xSBvF1BvOB","output_index":1,"sequence_number":201} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"40","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"4kFxHyosozR4lb","output_index":1,"sequence_number":98} + data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"DTKpPcfm9fkasL5","output_index":1,"sequence_number":202} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"°C","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"zzHqoSJeWvzGv8","output_index":1,"sequence_number":99} + data: {"type":"response.output_text.delta","content_index":0,"delta":"40","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"zrKH8oi2Tgf3Xb","output_index":1,"sequence_number":203} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" (","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"OsaGFPCHRSkByE","output_index":1,"sequence_number":100} + data: {"type":"response.output_text.delta","content_index":0,"delta":"°C","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"cgcZk8mEfvsgaZ","output_index":1,"sequence_number":204} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"104","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"jyxR2J9TxMv4H","output_index":1,"sequence_number":101} + data: {"type":"response.output_text.delta","content_index":0,"delta":" (","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"5CaE6lk0ipfzlR","output_index":1,"sequence_number":205} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"°F","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"Toy1pS3ghygp5N","output_index":1,"sequence_number":102} + data: {"type":"response.output_text.delta","content_index":0,"delta":"104","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"MdaYjn1Gptabw","output_index":1,"sequence_number":206} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":").","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"XP6TdnXLGiDysp","output_index":1,"sequence_number":103} + data: {"type":"response.output_text.delta","content_index":0,"delta":"°F","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"UfUAVfKm7DZW75","output_index":1,"sequence_number":207} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Would","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"MdEEl50thq","output_index":1,"sequence_number":104} + data: {"type":"response.output_text.delta","content_index":0,"delta":").","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"GfbDaof2h0RCO0","output_index":1,"sequence_number":208} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" you","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"d8tr08WIWvuT","output_index":1,"sequence_number":105} + data: {"type":"response.output_text.delta","content_index":0,"delta":" Want","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"kcqsdd40it4","output_index":1,"sequence_number":209} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" like","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"fnoZxIURtQ2","output_index":1,"sequence_number":106} + data: {"type":"response.output_text.delta","content_index":0,"delta":" the","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"cANzOTSRYO76","output_index":1,"sequence_number":210} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" a","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"hUUFFJjWlBkekW","output_index":1,"sequence_number":107} + data: {"type":"response.output_text.delta","content_index":0,"delta":" forecast","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"0HjykRp","output_index":1,"sequence_number":211} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" forecast","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"s4VT01C","output_index":1,"sequence_number":108} + data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"zKVU41uDN1U02S2","output_index":1,"sequence_number":212} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" or","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"ySdPzww37T4V4","output_index":1,"sequence_number":109} + data: {"type":"response.output_text.delta","content_index":0,"delta":" humidity","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"JRO254u","output_index":1,"sequence_number":213} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" details","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"YMZAfE9G","output_index":1,"sequence_number":110} + data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"2wqhe4UNdDTzp7h","output_index":1,"sequence_number":214} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" like","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"xwfL3vNTotA","output_index":1,"sequence_number":111} + data: {"type":"response.output_text.delta","content_index":0,"delta":" or","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"RvEzosqtPTDpn","output_index":1,"sequence_number":215} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" wind","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"C2OzUYFxofD","output_index":1,"sequence_number":112} + data: {"type":"response.output_text.delta","content_index":0,"delta":" wind","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"IdrVVXfMLj7","output_index":1,"sequence_number":216} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" and","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"9TUezPrNAMWo","output_index":1,"sequence_number":113} + data: {"type":"response.output_text.delta","content_index":0,"delta":" details","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"9H1KVEzY","output_index":1,"sequence_number":217} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" humidity","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"IMBbDeK","output_index":1,"sequence_number":114} + data: {"type":"response.output_text.delta","content_index":0,"delta":" too","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"Zkfu6hlAOAQO","output_index":1,"sequence_number":218} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"?","item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"obfuscation":"MDZnVmCa5QRk96J","output_index":1,"sequence_number":115} + data: {"type":"response.output_text.delta","content_index":0,"delta":"?","item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"obfuscation":"Msus8S0NyUolQ9G","output_index":1,"sequence_number":219} event: response.output_text.done - data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","logprobs":[],"output_index":1,"sequence_number":116,"text":"Right now in Florence, Italy, it’s about 40°C (104°F). Would you like a forecast or details like wind and humidity?"} + data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","logprobs":[],"output_index":1,"sequence_number":220,"text":"Right now in Florence, Italy it’s about 40°C (104°F). Want the forecast, humidity, or wind details too?"} event: response.content_part.done - data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy, it’s about 40°C (104°F). Would you like a forecast or details like wind and humidity?"},"sequence_number":117} + data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy it’s about 40°C (104°F). Want the forecast, humidity, or wind details too?"},"sequence_number":221} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy, it’s about 40°C (104°F). Would you like a forecast or details like wind and humidity?"}],"role":"assistant"},"output_index":1,"sequence_number":118} + data: {"type":"response.output_item.done","item":{"id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy it’s about 40°C (104°F). Want the forecast, humidity, or wind details too?"}],"role":"assistant"},"output_index":1,"sequence_number":222} event: response.completed - data: {"type":"response.completed","response":{"id":"resp_065915db01d8635a016a3c125658a081a38159e7d307d23d65","object":"response","created_at":1782321750,"status":"completed","background":false,"completed_at":1782321756,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[{"id":"rs_065915db01d8635a016a3c1256d2dc81a3a6206cbb8ad411b6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJcKfP7v0YMwSxc8wKU2ENQiAD85ZKhtt3Nnoew5TYz_F6XMiSk-RRoH3I2d8fIHXALYQzvCayS6FsAf8-VnXrEJL8d2fF6OLBbXI3DERkcebxt8D53I7vds-1er127wynKn9QmtbvsYppdNWszxVH1wNogPLc2ajE_jtA0wArqG1uSbUgIlzM37KJjSHdoBrY6HioDQilmHg3hr5h_ssSvWvGYl7v3TFprPE7bgagB-oyCmNO2CQRAuBHtXn-BXGbXvS7QFmigr2VboyzPr1iTcLHWy-VqXf92fICuCs7NekfONRr09EoJjzxONZVrqurfcTwvwc_OpH3NQHl7pO9C0WnxgJpaQQ6d9CAlincLhlYQ17BkubQ87_oFjxfZpZsb9zBcZDmrzutRJ-m03zuR6m9azzeWV08Ca873zVupjzDM0SyiT5WSfQ8vbZ9xfumRs6_-R3sD7_mMBG5AZT7ns3sFKLzdSbPNR10UMgdyIHdkEx9ZA2uWrvfDMxI1L2KsSXHquca6WlVxmwcpsPTZWtqvYJFdqLoMFmCKBschJZ2Jizv12OwE-iUIbKsE2rLppHc8IXGLqKgW4arXM4Ir1Cd_CnyAkNiXi_MAs4mD5PBelppLsAHYoI2b4uiqJMpeG1XQfd2Aygj0NBBvJmG7BwtLbjak90GhLBkuIJfopXrSBYR5fgKslvd9ac1DjYNY3OmZyTcpdj19rTaicN-qEsMYfVxxoDvZHiC1EMt3Mn9jls7CYRewsMptL5EN6fsvitRw92mXYlX5Z9-gjP5JloPRXxkeHXhqHzWzVeSW3jO3-DJnZqaDESN55jS9h_yONT7jBOggNwecGVJ4d74cfZ5iLj8bZSQGDYD56qyLlpI4ek0ujZGdP8uzUsvHQ1QxyFL-KmNsRe2l47aX-tT-fu3XfwPBdsV7OXBV3jzDnwIBF4tThEzKDh_PLrMw3AaN6INS7tw9sbkMNUPCw2VGM7GtxNJ02YNYYiFtCfFBbRGwsPoK5RwGQi3RucyO5mcUz7oyuCBgm-qhwkFVCRT0fUzu7jQswCOaGq2iAHxrgONCMeu6FbFkgIK3kyy84g5Tzq14nxUBE0gNZ8DAOaH9RVOwurdVpSidk8a5SOiDAQqarKUdI0DHWD91YVJnm7IKTQK4ZrMBhRvetgDS2wRvavoJ8AxbI8CHTMNtD5waaDi_DPw_G5yVqK2-axjcVgjSgvQcxM4Fm36_PC-3x2i1tEe2bI9UhKKPmQkpwJQ99DCfTZlpNvDseH76bkjThUabDGl5fzNAhnF11CubLjm56cco85-NHzfqj60EUN83T_8ILfXrpdyks_-RnfaARtaeIAgYLtAUzIstas6Srx2Eu2TvqvzQ_VJKEyPoi9UhqYNDSOibHSddwOJXalW9cSmHgxFl4CiN7IjgySFEKWjXI-DaIcmyOF0ENXQ4ERgNjEAfk29HnXPML1F20pLDcDLwpGFcxwvRSGvsAq81N793nhEbxQJnHAoD_Kr2IyulKTTEh-enueof6YWilp5RxQ7MY2Kzkeg5AaWoNg1JFqicH92aif8is8gn_660c018bsir0MwkEVLjVuvuEDRoA0dDDN0olMl7cCSNp_PJD5LTWkYUlLrKoSaCHiUUGJLb8bLWUiUbte_YS3G_wcmInId5xSpnSZOvA5io305_nxZ389tzqLtAlXvjsvGmczkVpacfK08u0_NY02bUv4TqkwlITKyyo9WGRnu1NCuptqetpuyF70qFM4CbwgmuY_8wIJoQNAZ3ALWgNDgUB0Gt2oBN8xNw2CFEPscRFX8y2Z663HunfneXvi-xKS0ZzhZ3AXOC2ZwbjR9WjWP9mxD6RzDRM5Q5FXI6OGS4D_mEt_tcI_DHZn46LokfOK8Lopdc9N5doK9sP-tAYcVjiJd-hvI-sPXAYzDqHdWEPdR_fDVw3hrLeVZqe9zWnjRhfcnGGu4S5jLtknpFtKVNNO6oyJV1BzaMCwm0RUEmYazYxRa0yCSpDH9xjnYkwrSSKNk7xQyOgi2WRabjKR2n9FDUR1Ju-jE61pbZwlsh5RwH19Su1dgld9LfR6bpg90r5hwR0OlaZR3wra6CE53SjqHZQsC4_eRNApPju6YHwLaisVCVzT6vFC19_2tCQYCtErEdW2f6yv6qLt9WnDkZyUuhzs29DkB70Htn1HmQIe13zUAyPI62-ViIUattWIXL8vlICWIcRH229Zgr4pHc3Jnr7RE6vqD0EaTa2-RBxHiDF9So_70Isham9MoyoMYveUU6gfTg-wviffRH5M-gRg4AeGm5cKHLHS3oTnJRYzVzMliUW_5ZgcN_wGMsGwTdMyW8kuvGyClFWF244BjKGlMIuq0CUg7vR8Zi03RZaHLEOCLo29HbWOGroYfqvJbgm-kjw9y9yZQPGuURHjQ_92dNJIhFXjOSpjleIRZNreSE1_CyxBGzwe3YQP4kY7syLV5M0c0Y-tse2y4evzLUxqI-07R3cGAeMFw57Lt-3E8CpcpTbMyaKMPYSjJQcEmBeuwqlgf3nji8WIii5ZWZ-RCl-o7v4nplX8jKm6_Cr22CVh7NIqZiibF1M-rRvXeln-x6sRtBNwMv2nmp1eEhnmhDVDjSkhn72PQadNTHXo-zJNuQv332zDQm7KV0fCyCSf2a2qALaOMovXHYbdJrtqk77IfRA6lFzphuNhE0pSg9vbLYw1QhECYYGQnX9Oav5El47XjFry-7qz_FvShOhur8grzxNJFcdTrxtuWFDJRZCJRJ_8RmTbas3nvhylbgAK6pSLiJyM7BVKLiA99zArRmQquoJzlmv7awACKq3kFkXBZvhGAwbn1rrL-G2g9Td7YRNn5RB8zdd8s8b0cH-wPnPOslcnnsODZvj3b1yWTRZLJy4lA_VuZoTi5R4zDzGRhs1DSTjx2em7R0HTbZ3_bKs47e0fmXgtZzVNBQxFRZhXpAm9msyUNvZPoy78nzE8F6R0asdgd9rkdGmYqe8KRpSAUbab_an3_r7SpCLYLVYSgm3MfDrUAibeXCSGCobVW8sP_SCBl_bMkwEiYPmUIvteAaYM7XMx_TxKV3v9xTdPVS0vuqmOWcNUXKe1IJisR8aPOSLTrkizUMgsJEgHkcY0_qn3I8lqKhgCaxRQwfi-O5L_VVlZekBNqv_iE2DqKoET3pELTePeMgxAtuDdL7E3dB3ftU1cwDRYF58UcQmIn0khe_0TK5vqr6Lg5iOels7Uf6DgGodLpT7O09_mTmZGvpmc57r2OVvjbJVoviIcqoZhJHYuPK9Cl-JM1Al0evi4lRGfzznDogFJjeOngCKrjs-YUeAkXQsDX7ktTxe8axGpsAnpnwgv8A99VZa5o4tAGl3WSkTSdnmYhYc1VaKeMBS6h3aKSAMyHzRUEEXiF6zhpO6QR1esRSVn6Vn2qjDmqZkVe5qKllS2zIskWlksv7kD0RuTxEi--i9nk8ijEjxoPlNn8_7MTrGJJthDJ1TxCfbEhWuvHwuLpVuRCfhVkCIK2tWGhYInlzgvWpTwm9akbNq2LWKTZJRwcthUEPJayVv3iFiadgAeRHhnGqLwvY","summary":[{"type":"summary_text","text":"**Finalizing the response**\n\nI can mention the time of day, but since that wasn't provided, I'll just stick with \"right now.\" I think it’s best not to overcomplicate things. The returned value could reflect the midday high or other specifics. I’ll keep the tone friendly and straightforward. It's important to me that the final response is clear and user-friendly without unnecessary complexity. Let’s get this right!"}]},{"id":"msg_065915db01d8635a016a3c125c524c81a39e48ac0ebbcb6b30","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy, it’s about 40°C (104°F). Would you like a forecast or details like wind and humidity?"}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":92,"input_tokens_details":{"cached_tokens":0},"output_tokens":456,"output_tokens_details":{"reasoning_tokens":384},"total_tokens":548},"user":null,"metadata":{}},"sequence_number":119} + data: {"type":"response.completed","response":{"id":"resp_04a0755191a2e626016ac3605862b887d0b6222645c259bdbf","object":"response","created_at":1791189080,"status":"completed","access_programs":null,"background":false,"completed_at":1791189087,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","moderation":null,"output":[{"id":"rs_04a0755191a2e626016ac36059243487d09bf91802adc1a2d6","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BfxlZqdZZKDHyTeT7rpzXddEeZ0FSlyr8nNCQ4vj868EiQsUdsfe4ipWJ78TR5gFLH27RJUoGlD9DPkLepgt-rslF3JXcWqt1McO5RV7zx9DVkGyfjN-BgbOvpAETraBlTmoM0iwmZe8z9j8vMoxH9Hhduuy2W5MxAIRgbBZDB5Sjk0YTaFYs5Kd3C5z_UbxxPM7Q9CD3PeJb25mD6-97s4s7z2kv_NLyXEvaLeXVWmVMS84XoGSkmxXfdwdj9XWlujZP83zS2JhasESxLPp1LF9yClKumvpawa4LzAVKq7qsn8hmB7wlnQKDnHlxnFnK-9UNR2tFrGGOCEh4oscizE0gvayC-yFy-4wb6q-7aTVLlYtKy9u0BQBtcyRXwvnDBT3bYSBHQpAXJAY6gcNjrOkhbSGvLYsADky2zpXXJfbU1LQSymc5mv6yTm-IywfeZkG85HoB93MMwRvhNIvNFreyNy62MTSgP2uJDr26OqumA89GG411x2pVlPWtz4eTKaIeSfX0lYq5EOoZ3cn71WXbpjGhjsJnahCZba1xz9zmmkC1Nm8c7UpcOPu7L5h8uARTE19r4rWQ6MIecxKgU1_4IGZwaLi3DIc8MKmx2alBOu-5vqaCabfiCcTbd_3QtanSIpZn2vv-sqNGoKEputvCh0LVYA1ioxa6pRkvfXneusVy9aWB2Phhiy_YALmhFNvzdw5yqP-zDEwBXS_RJjYvKjxI_SZutDCuQSXx8pHB7d1oAZwJd-wNwGUjC6tUg1dCOfMzzHaJE5RuhcbPKolXqM8S8B1ij-CzUkcmePvKHwUAlEGA01Ech-Wbmb4SC-WKLLOOYmFK8XUB0s6rorTTYID6LRb96LLnasTOtnWx2PItUEUmoUL2dCZjU7d1H2BeAn8kGQ2OP_P7rhdSWkl6Sz95VcVtToMlSkCXvCPkex8jvmdUQlyAftH6PJS3NuSFdFQFqJZz_R631m-qHdHEA9D07Mw0T-EVaJwQ6WaTLB94bUzExo4_BKspFNoCOj0ueg5dEBC07qc6exKrAT6gsTKHOdWMpSxXH9YdDrEmmq7tTIG9Mw5hX-jzHOg-PXDN3SnqRMXd7JUQpEg33cdOLX3kyfUWl8jcWeU_2zGBRbnvFVcLls6867nhwMFzeMKjLnt54h8M-QXWzBncCLiXi0hm2eRUz5b0Aa2fFyPYyvq4LliBEQ8os1RvxXIDoTbS9tt-YgRvqbgU5j03VPuGJsseqgKG0eXOxiYKoqTmI2bkyDgex7cTUhinzkZhU9gEdHyXfCC6jEhcbtyNP5lIqk7MX12wzfbI3zn7ZbdZW8vPToNGp6p0jH7T0-RuilWY6d-W9eBuQ1AdAXW7BKnOZMJAmwV1p4_qxd5ZUBXs8p3Cex_h9iMAYxpHfyuPsef-hD-miX9T70gI1EQ0sNjjOolLKmOvioRRbcXcbZttuaZ68ywB0DzJf9VVQLF9lvrPjSo3VF4GQnR6Pu_nQPwURdkNwxozBOcnH5gkJCQNGZO9Mth3uPZJXD2nY-KCPufaPLmEd2NCoxvs__xg4lP3zZ2lE-VSZ44MAc2LoCAYr-wWS8Kn4HNa07mcipbgZSZGxrp6mJJKriN9RjraOwDOGbU0oSMXzHR34hpHJbzOX9jQvhsKmpo8b12A8jREO23dzTg-ZdqL91kaf5uLRukk_ff2xOO3f75cwGEIQQFalVrHMpdKVm2XTfmzO0Hi3wUA6mVBGS3qv7gzhBS6h1vcoQNp3IpuJ9limggt1Q5j9UBIzRrI4Ot4gQLaj8FgATUxUCYR3To6muzF8saFpL69jNyqB4BknROWN5UVIWKYheQ9kzPaGFD5Ia9qA1OIFINrSsMuV2jNYg5bogrXVU3UhZbbxaSliha0D-uUO4T_Q6OERBcvZEvb73z0iAdReqcQSregYPCwPKdpgfzOpgaGQ-ZLu1l1FvpiOMFjrkpYSWm8sGKD2DmV32EwqP3HD9us7tPX4xL_D-U1vw53EC6EfyiHpydSmIMQbKT-9N45Oe4rVlbuo3mAehaoX7O4Oi6RnpwA7esxz0_die0wFbt78ZpWd6fORvu5SrSqSq-NMfqzreOqH-8c8ZucfaIaJyGwXIemlstZFPN2efgsSUhCK7gbKrWE6r6PoSCuNOxFcXLdv43DT54yHDnLUKObhMYeAQoMlMKhPdYxk0zRk4BRws2vYUZf2VBBZEmY-fF_Isw_kCMfASaR_yN5Cf6Vaq3SXkt0942C9cDw66q6HkCaHQg2LkDfYF87il0XKpBlnMJZTxWn7BdTQZe2SWqCCpa3An3oP0EH47hqr1XzF_i2eevwXVE8DVOZg1Sihq-aINSTE7NgvJYr_2NGXiAUG_NeUmkP6IOXw0W58BKqvb_ozDUJZEjUnWfvqBJQjQz7X8P8mpRghu35tyTAxzqHkvJXgPsQ0lq33uUGkhYWUKCvkw5VWp9JeJsORsYy6eyGWjNwhNfyBHvvCQymplsnF_iloIAtF7zU4m4wZSpPx8KmRwLDhd87lHGX6TQ-4AgATIQsYk7c3iLBDtZWKGwMmqErc2HqDsOf5GFSy031NNtqffNTkwHw8RM2DHo9sKfSDKhFy25FcNc40dRFmUPTNJ_7MLOBmT5PPZq8x97eJWk3cyfyKfHzFO6Z5VTd0-7vUnuWK4IWq_SqZXCnqWIgRIhMPtypm6CdbXw6NG3LPa6xaRGI7U4Is9bT4Wz-L0v_fS1qJ0Sx4MXnqe7oy_4KnZKESdVCzQPZpM_bOJq6a7x41JO7Eri92-qZ5TOlLxl62WIB56fqxD2SPBEz2zuhbBG03PCgNxwMAVnFAq_Suiw==","summary":[{"type":"summary_text","text":"**Reporting Florence Weather**\n\nI received a temperature of 40°C, which is extremely hot! However, it's important to note that I only have the temperature data, not the current weather conditions like sunny or cloudy. I should communicate this clearly, stating: \"It's currently 40°C in Florence.\" If the user wants more information, I could offer to provide details like humidity or the forecast, but I want to keep it simple. Also, converting to Fahrenheit, 40°C equals 104°F, which is useful for US readers."},{"type":"summary_text","text":"**Presenting Florence Temperature**\n\nRight now in Florence, Italy, it's about 40°C (104°F). I should make it clear that this is the current temperature only. If the user wants more details like the forecast, humidity, wind, or an hourly breakdown, I can offer that. However, I want to keep my response concise and avoid any unnecessary disclaimers. It's important not to provide fabricated conditions, just the accurate temperature data."}]},{"id":"msg_04a0755191a2e626016ac3605f96e087d099344f2fff31c49e","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Right now in Florence, Italy it’s about 40°C (104°F). Want the forecast, humidity, or wind details too?"}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":263,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":304,"output_tokens_details":{"reasoning_tokens":256},"total_tokens":567},"user":null,"metadata":{}},"sequence_number":223} headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 338.27775ms + duration: 846.615292ms diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml index b5a65298c..4ebb85642 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -26,15 +26,16 @@ interactions: uncompressed: true body: |- { - "id": "resp_0d8949369356df9a016a3c12432020819c956937a00dcc1a84", + "id": "resp_0a49c1f61a091c66016ac36047a39c87d0ad93179c0448f484", "object": "response", - "created_at": 1782321731, + "created_at": 1791189063, "status": "completed", + "access_programs": null, "background": false, "billing": { "payer": "developer" }, - "completed_at": 1782321735, + "completed_at": 1791189067, "error": null, "frequency_penalty": 0.0, "incomplete_details": null, @@ -45,23 +46,23 @@ interactions: "moderation": null, "output": [ { - "id": "rs_0d8949369356df9a016a3c1243e5a0819c87655df5f53e767e", + "id": "rs_0a49c1f61a091c66016ac360488e5087d081b16c438cb1b383", "type": "reasoning", "content": [], - "encrypted_content": "gAAAAABqPBJHBSKG_nXh83EjSbUBB9eggmyznkwZRs4IUnoYzx8pqWme8xiPKPConFGIXMh8itxBDReAXMM3jSl96JfpmY6F2yGE23HWP-lugk2JGIWFOH0sRWQ0yrenoEiz2DiRZPJRRYroUJJcOIQV29aFyDdJeORQDsoaxo0RKlLzcohfNnbi-8HfA4G-j_bz9mUUiT4CfEUDQLMBQogTqKkNizJcSGZhEJLPwerzxs1ZpihTvZMMZxFEcmB3pdqfLL3nUrwgPbnvzKTCK2UQPm08dxHZ9Cgg7irWmVsBUhAgj_CFCzPwXYiHgcO9_U7kj6a6z51pu2el3-Q9XRX1Y_56Qkgm8bI7-PRcklwhMNG28efNmkx2kAHdwguI_XXvDaHQ6o6owcAUU5gums8r-6X1_7yfjD62pRHCcnwIleCBdOS1vudfeWz9eWo87vMc3uEi_JY6EiJweRRy3oR8b0m-zDhKTK4uWaInsFJOhpy-HL3oDYGH27Nx78rvt2yDhKTuoLZ_9Z-FnicMgdC3ijSF0nERHgxewbeC3mA4nAg0iH3Z71I42HsvzJy3bDvlCScrjdhxyuo1_RyLl8CxleNCJp9LZcg-FLC3l0OCSO71VKFjb_9ZPKqaZcnxH8PF-cv__NfZ7SjvgxsHqeNZ-mE5-eEAedqVNMEGhGXSmK6xkcpqAe3XLFgjl_xUrmD7QHEYjbe1K3PYw7u3y0aDH_Wdcaa_Iif2ZqvwOHeH5ssJqFme3-kIQyo7GqmVvLXQ5Dwb4uI5jXC_T8kfRYLaf0T1cOGzvq1p2zR8CxIzdiP1wBLgxTiHHSu9WZEeIMiDw4YsmFubpKLrrIs24H0DYl_Oovsm-j7sSrfDARyWtCNhDqKqcZ8FSQuhb2tnGk2kW4IAynktLRk-fDym3nyDowxjiaUWlKfOjOWVZQibwhKTnuWShCLvEu6ouCrjaW2Jw1Kg4tqCsLYCpBCKWndN6CB00BrMpCt4f3oT_VBH-DdcWNsQooWsZQDzIfQxH0MFQGqyNl9iRr-6qVlZ2boREdZP8HwF6JvMHyZcjbButvDHOhM_e6qiwVVghrjvDyUX2zPYhdL_lQEEZXATz4N0bWQonpxJzT2Z1hSQNhhlpQcHpyFLa7rTMbuPkUqWJAYzliFVMmpa3vrRbpVjl3dy5Gb43H2Jre7-_JI62HrpgXlbwd1xr6wA7iapeYkh_9ElOBTbXl4mbt6WQkTLYlq5ZzYdH4uUC2kzciHfk2XekzSM7lVciD9Fnq-0KViZ8jD7NqQwo2vKY7zeRLfuO1hCrAH0SxiTEXcj4fHczDcgO8Ia3f5E2F3_rreQWAx_tlYUqVeGKpLEdgKtiIva0fdHME_Mz0oaQTSk2shjXwzoeAW8LxWUMKt_WFXoZOuigbmuMPHHq0RxDFgy3Bdyp4tr2LO6RUlgZnrvkm_A_tsxHP4-sb7wrsYMKTrGKI4mZoEokaoKINhBM-Ty0GnerQMePgi23WxNEgf-vq5pYphP147jtO5JoOeWvq1HZdjECHuko6lJ5zrHv0J70ecMhiLTiXL5RmXfYOvTZTGNJ4kPJ-ahE1GxsduEMCiuKpsTlcblp_JVXUagIL5TQ6v4RNNg-IFAy6jjV1DVOYiUukpULXkVf9LRECdCxJQ3Tyy-sn6C5lPHyC0gb9ePxwFntZ0wpKZ27N0-at9-kgO8vm3nNu83yIUIDEXdZ1-uK07DDUCL37KJaLmvrbW6YyZ2g-bxtdoAVRgLzFoWP8K8tJPolofFIUVWREbiM2Hz5toLmfi5BBOAM9t9613BacUiBpBZDRubyMra4qXIGFo-EZTHnuGezfjNSW0NnRqQpCs7Q32MgH9E5KWMDdmnsGbKLCvod3XdOnJqfP2yhI0koWkkqP2Uo0bguhtS10qGsNcOV3UfBh1V5MTLs275JaAKy66bthgGE2LTNzGfiwPdTkfEp-0VBJ2rE-dY-M3thKXR2BC65_SggyIeqPltzTapdxSrQOD80R7iq9wfl9R6CCmW9IipMW-rtT4waLjmQ1o3pRVlBuCoxOS_FUFp-WNrTbr3nhidFN59OUjUaqCjvqGzvedTLBoDHm55lkVthaDrQNdlt67deXErEO4wc0ea9Tf3cQ5M3TNwmSE5waJcaBPxZPYXcMg_Dorx4V1lqLEjPOj2hEVJFuRK", + "encrypted_content": "gAAAAABqw2BLpeQlz0Rwi0STiqZRd0pCA7bIqvt9P7MMUgLWUUi1hdHfZ3qHSZjwTnuGONtT2uLlQ5d01ENsYo5JP0ceSexZZ9Eq1qCEVVbu4XWxvJFm7367xne_B8_d33qfY3sQtVlLMZ2dvL9mVR6xJ3SUElkSo1p5SvuDOrPyeRMs0jaNqWQ6nMhFctwTIhkUi0iWA946hTetkYLJrVOJ3tbJ0t8ilfUm3PX9qVpe34fUWTk-MrPnq6DGGs8r4PhJ6_fNQYuLNXDZBhWYjYqDNTBJoIK8FayKTCz6lyCFKxo4NodwXdiof62Tb3KKPX5YQsFQoBb37Ulel8FGdzgvw59ZEbJxx87tQ0DgMYBa9f-k1YT8JvGfBrA31I3JOrl4QAfMlAPAmXvlYob461jUKhofDJWlBV4OZiN2dXnXCtjAxcUf7XkHJsilHXyBWUC0VLtZMzsEAZ52nxL5Z-8TThRD6w6Mc7gnJNWe1kOr8_1B0oUtu-2W4XdpWbjReMVbvylniGwFkbkaJ6Z16dc8C8Rwydh7ITh1jRRGNJ4uR3sk-iNT5jIhmxsoqXBitScazQ4AoCso4PdFQSDpq3wKpDoTWDIgLyZiOJrWpcYjpjst86OB22zeT78ahF6za5tWQFJATcS6SDFKdpPz3gTmknmxS5qOec49k4Il46Yvx08wRbP6nZLd0TJ0ugtYs126r2aEI8qQb8iwAUUVqA9m-rNFnTBfrSRI-dF2gID3Sq7OHGTkOVBxj_lZd-qPs6dbedRxJZ3Ew1qaDNWiiF2_sM5qgi58BLecJ4PV1TyHG5R_Ik8pLz0Ngmz0glcgOoW2Wwypx-snqEz1aunrvCw3J9pjcqAySyuhv-8QNAKD3Hh6twbOI2HYQbWJ-5r169SpUMGdbuSULvo3413Zj51DIvcMXcbpw42_frXHVio3889irAdSdgB4KwoPaqdvqbDZlx-Tnb4pH8XxeU3V-o2KqKG43TWQbPOWPv3m9HPJgqN9CVNu2JwWTGLNtyEOhagoFAdvpl8BZdzu0A7ZFwFWsGBpkYGgNnKi-3BPvCRhc70SM8jn3tgYt9NqY94jNwqCXj0kR_aRwIW-Mau65lDf_i4ilzFbkZHyvlOKnEtCtGsh4Zro9FBvoVfDPBx0CvPA-1fijTgtAbbrF35Dh59sDaqzuR3jZEF0Tu89FB6EYuJjqbU017b__HZ9lq7t8T0FEh1WrXm7NbWnR7UE8aIcK-YFlQz7njsYaJeljqDB1aqx68FHTfYyJlO6E31GZp2a8ALHPPQo_UPtSUKbVrhR2nOKEUwSJc56VWgb9QuWUiiJdC4RsneUw6AhctlxuB7BxVQFUn204Xo3fWxn6bTE2GTSkfP2Kfs5GDBVECe_tiBaoZ3S3k_-mEQ6vtcAyE4N7sOjfjSlw7IdJ-qsnSoJ2TnIVGawMphPxx3Za4q3Wujs2nF0nkqCM866cGUCr9qGZuojuWmICeeqf36xrgwCtwAdWBUe1Q1REZ5Tx7ctlMGRvrdiHTAApOjSctxKMmU9CR-5k0Ll8nXhlk1J9Z9lbmOOg7dfQUN6DA9J1Y_e45A_kDAaijWd60WLATBD_SyaAKuN3zmF_r0YR8zbYkTadRq-znZxnTlleO-0DWEwrFMDeHyPzTpdVp1J5jYLUpd2CQK1iYPgevRzmsWaLVFBy5oCdjXHTX9QWWQHSVX6Zqp062Nzrk8UCLoyPP3y5CdlNkwLfThCubv1HQi26JpBRx0PzLbvO0ECzfh0ck3s5jSY74VoT52Er0PThpYgIHusEqGcIdCzV6ZPokdKs0z2OuJ0N1WBgg==", "summary": [ { "type": "summary_text", - "text": "**Checking weather in Florence**\n\nI need to provide a weather update for Florence, Italy. To do this, I\u2019ll call the weather function with the location specified. It seems that I only need to use one tool, so I\u2019ll stick with that. Once I make the call, I\u2019ll need to handle the response, which might come back as a JSON object. I\u2019ll aim to present the key details like temperature and conditions in a simple format." + "text": "**Getting weather information**\n\nI need to fetch the weather, and there's a tool available for that called functions.weather. I\u2019ll call it using the location \"Florence, Italy.\" Since we only have one tool to run, I don't need to use the multi_tool_use.parallel wrapper, which is meant for multiple simultaneous calls. So, I\u2019ll proceed directly with functions.weather and specify \"Florence, Italy\" as the location. Let\u2019s get that weather!" } ] }, { - "id": "fc_0d8949369356df9a016a3c1247af3c819cbf1cd335423c29d9", + "id": "fc_0a49c1f61a091c66016ac3604b315c87d0b5c57cec8763bf76", "type": "function_call", "status": "completed", "arguments": "{\"location\":\"Florence, Italy\"}", - "call_id": "call_4QfIn5gPKIOWzKqBb5D2uuh4", + "call_id": "call_0hXrtjfpUMh5h1Scq50Lw5B3", "name": "weather" } ], @@ -73,6 +74,7 @@ interactions: "reasoning": { "context": "current_turn", "effort": "high", + "mode": "standard", "summary": "detailed" }, "safety_identifier": null, @@ -86,11 +88,30 @@ interactions: "verbosity": "medium" }, "tool_choice": "auto", + "tool_usage": { + "image_gen": { + "input_tokens": 0, + "input_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "output_tokens": 0, + "output_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "total_tokens": 0 + }, + "web_search": { + "num_requests": 0 + } + }, "tools": [ { "type": "function", "description": "Get weather information for a location", "name": "weather", + "output_schema": null, "parameters": { "properties": { "location": { @@ -112,13 +133,14 @@ interactions: "usage": { "input_tokens": 63, "input_tokens_details": { + "cache_write_tokens": 0, "cached_tokens": 0 }, - "output_tokens": 212, + "output_tokens": 119, "output_tokens_details": { - "reasoning_tokens": 128 + "reasoning_tokens": 64 }, - "total_tokens": 275 + "total_tokens": 182 }, "user": null, "metadata": {} @@ -128,22 +150,22 @@ interactions: - application/json status: 200 OK code: 200 - duration: 4.997731709s + duration: 5.174662s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 774 + content_length: 3263 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_4QfIn5gPKIOWzKqBb5D2uuh4","name":"weather","type":"function_call"},{"call_id":"call_4QfIn5gPKIOWzKqBb5D2uuh4","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_0a49c1f61a091c66016ac360488e5087d081b16c438cb1b383","summary":[{"text":"**Getting weather information**\n\nI need to fetch the weather, and there''s a tool available for that called functions.weather. I’ll call it using the location \"Florence, Italy.\" Since we only have one tool to run, I don''t need to use the multi_tool_use.parallel wrapper, which is meant for multiple simultaneous calls. So, I’ll proceed directly with functions.weather and specify \"Florence, Italy\" as the location. Let’s get that weather!","type":"summary_text"}],"encrypted_content":"gAAAAABqw2BLpeQlz0Rwi0STiqZRd0pCA7bIqvt9P7MMUgLWUUi1hdHfZ3qHSZjwTnuGONtT2uLlQ5d01ENsYo5JP0ceSexZZ9Eq1qCEVVbu4XWxvJFm7367xne_B8_d33qfY3sQtVlLMZ2dvL9mVR6xJ3SUElkSo1p5SvuDOrPyeRMs0jaNqWQ6nMhFctwTIhkUi0iWA946hTetkYLJrVOJ3tbJ0t8ilfUm3PX9qVpe34fUWTk-MrPnq6DGGs8r4PhJ6_fNQYuLNXDZBhWYjYqDNTBJoIK8FayKTCz6lyCFKxo4NodwXdiof62Tb3KKPX5YQsFQoBb37Ulel8FGdzgvw59ZEbJxx87tQ0DgMYBa9f-k1YT8JvGfBrA31I3JOrl4QAfMlAPAmXvlYob461jUKhofDJWlBV4OZiN2dXnXCtjAxcUf7XkHJsilHXyBWUC0VLtZMzsEAZ52nxL5Z-8TThRD6w6Mc7gnJNWe1kOr8_1B0oUtu-2W4XdpWbjReMVbvylniGwFkbkaJ6Z16dc8C8Rwydh7ITh1jRRGNJ4uR3sk-iNT5jIhmxsoqXBitScazQ4AoCso4PdFQSDpq3wKpDoTWDIgLyZiOJrWpcYjpjst86OB22zeT78ahF6za5tWQFJATcS6SDFKdpPz3gTmknmxS5qOec49k4Il46Yvx08wRbP6nZLd0TJ0ugtYs126r2aEI8qQb8iwAUUVqA9m-rNFnTBfrSRI-dF2gID3Sq7OHGTkOVBxj_lZd-qPs6dbedRxJZ3Ew1qaDNWiiF2_sM5qgi58BLecJ4PV1TyHG5R_Ik8pLz0Ngmz0glcgOoW2Wwypx-snqEz1aunrvCw3J9pjcqAySyuhv-8QNAKD3Hh6twbOI2HYQbWJ-5r169SpUMGdbuSULvo3413Zj51DIvcMXcbpw42_frXHVio3889irAdSdgB4KwoPaqdvqbDZlx-Tnb4pH8XxeU3V-o2KqKG43TWQbPOWPv3m9HPJgqN9CVNu2JwWTGLNtyEOhagoFAdvpl8BZdzu0A7ZFwFWsGBpkYGgNnKi-3BPvCRhc70SM8jn3tgYt9NqY94jNwqCXj0kR_aRwIW-Mau65lDf_i4ilzFbkZHyvlOKnEtCtGsh4Zro9FBvoVfDPBx0CvPA-1fijTgtAbbrF35Dh59sDaqzuR3jZEF0Tu89FB6EYuJjqbU017b__HZ9lq7t8T0FEh1WrXm7NbWnR7UE8aIcK-YFlQz7njsYaJeljqDB1aqx68FHTfYyJlO6E31GZp2a8ALHPPQo_UPtSUKbVrhR2nOKEUwSJc56VWgb9QuWUiiJdC4RsneUw6AhctlxuB7BxVQFUn204Xo3fWxn6bTE2GTSkfP2Kfs5GDBVECe_tiBaoZ3S3k_-mEQ6vtcAyE4N7sOjfjSlw7IdJ-qsnSoJ2TnIVGawMphPxx3Za4q3Wujs2nF0nkqCM866cGUCr9qGZuojuWmICeeqf36xrgwCtwAdWBUe1Q1REZ5Tx7ctlMGRvrdiHTAApOjSctxKMmU9CR-5k0Ll8nXhlk1J9Z9lbmOOg7dfQUN6DA9J1Y_e45A_kDAaijWd60WLATBD_SyaAKuN3zmF_r0YR8zbYkTadRq-znZxnTlleO-0DWEwrFMDeHyPzTpdVp1J5jYLUpd2CQK1iYPgevRzmsWaLVFBy5oCdjXHTX9QWWQHSVX6Zqp062Nzrk8UCLoyPP3y5CdlNkwLfThCubv1HQi26JpBRx0PzLbvO0ECzfh0ck3s5jSY74VoT52Er0PThpYgIHusEqGcIdCzV6ZPokdKs0z2OuJ0N1WBgg==","type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_0hXrtjfpUMh5h1Scq50Lw5B3","name":"weather","type":"function_call","id":"fc_0a49c1f61a091c66016ac3604b315c87d0b5c57cec8763bf76"},{"output":"40 C","call_id":"call_0hXrtjfpUMh5h1Scq50Lw5B3","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -154,15 +176,16 @@ interactions: uncompressed: true body: |- { - "id": "resp_05e35f9a375fc3bf016a3c12481804819fa1f19c7594267c8a", + "id": "resp_0a49c1f61a091c66016ac3604bf8e887d096f3c9a1ff84c326", "object": "response", - "created_at": 1782321736, + "created_at": 1791189068, "status": "completed", + "access_programs": null, "background": false, "billing": { "payer": "developer" }, - "completed_at": 1782321745, + "completed_at": 1791189074, "error": null, "frequency_penalty": 0.0, "incomplete_details": null, @@ -173,23 +196,23 @@ interactions: "moderation": null, "output": [ { - "id": "rs_05e35f9a375fc3bf016a3c12487890819fa2d595493eb1ce5c", + "id": "rs_0a49c1f61a091c66016ac3604d386087d09e59a87025f0b648", "type": "reasoning", "content": [], - "encrypted_content": "gAAAAABqPBJRqcvGx5J_ZGligZTix8qLAVmVv1vM7Esg1D-4TkgljY9-cFocjYQcKEeYwshJ5YJOp34NRhMuZ-T8RsE6sbSNPRfzVgN0ELLjMyfJ_NuSFF_AZDzyn80KWicMU8YxYF67QrXn1klP8S5c2Y0UWhqn5CT8rM5kTVLNRsTnWikgg5ZfuIL0uQ_s-VlgzKhq_utXmlrTfRpePdRxsrc8mQAY_9Ym7vhz-fjYnxs3KOsZbADxxSWn7EMtb5Au7Pmzhf7Y-0QQ2dErK2jruaFKTnR5oGRMqGYitDcv1oIzRI4p_luHVRD0k8x9DujCtga3b8soxS65RS4FbFHqgCxx1HkOf0cCbCJ2JG30VmsoY-TZV-728TBFK3SM2WOYeXL6W5SmuRpXrF_4dhq8qAlVE8O-iCRbV5OkWTu3QoAbIAiZuEaWmq85O3UE90WFrhypXzTMHC685cLR_fGi57W2gNLga6I8zRZrcT4riPpnBLErgmLUJl_MO5OgIFVPuH90SdQxWCVY1qN4HjenMjyHRYRy7_y1NQdQJd1emYLrLHsXZVmq9VVCYpq3lZOgXeTfNbq3tNlxMC_ZKq0n-NDBdgQtDg4hgB31_GU_K_BGuL8CheU8Zf1se0as6h03tIXK18HnFnHjnuTMzoBBkWF0PgbmP_L2mfquKCZJ4B6YCYh4PvO0xCRJXMnXi3y2stn7RZ77jRzkqirxx3znp1ho6CAFNFu2IYtCoefPDDR8hpHpSpS6tZXWRJlW4ieLTg7xYeDshnnoy2PknReLERuYDeywiWJembUEq0ZtXh8efLkpw2XHlKW5QOa00sJL_whw5zurovyOPhHbKIusRr5YXxX9ZeerNBhAv-uUteNGKVyJbROQu4b6Ihw-YIduAtcurbzaiVgLyn9FRDsDhAhDH1-rBBB6atfvu198yMG7bRtnuLKZ4_6CfqZWtZ66zH1DfyBmb8v1unh7jsSUhWfGby8Uv-UCivUuExJQJx1zCbFd90rFt4wO7Y8JDQzlBTFq_VUrRkdpEv41un-YLRcL0Hl6H3T0exJK-4SHy8ijauHyyvG9MdrxZ9XXfPOBgHq3eIFIF_AYc4bK1Z3jDT5wbJATQYnU9A9Ep7hLh-tfvuzWUQbZ8qmD_QMr3XcYmAfosHGD4CpqbzKAuSloD8gTVVYeLdz_aQl-4q5NHZIwozjkaw6Pt3sZjDOvE_ovJvXmWdX8zROk6mSfPqumK4d1V75K_ZcIm3EoU7SU9Ymor441rs7Q4vq8oFGCliYWT5Bhv2xg0Hnc_INMnG1u3lV0Lclxv46YVUdUmHwxjCB4vFhU7ar5kEjDtcjI1HIRKaM0hNbN_VTURMFpq0E2HFakXQvp40_0VTnhBscL-q7_z7TSRvhjOcX3tvbqlMLuw2JD8ow1rmLv5OtD-nEGtTyUjQjOfXG5YI2xpOqiyPhEkKAbx1ESWaLmr8W7T0Cjx9NQI_Wc5kv8dKaliXPyN1RSjzqh42QuzsZ6eJ7GUunFx5XqQDpmnO-4h5UEYopPBBAtTknesE6vMHxs7Zss6j_qF2lA6OlfjKRkJYoLCu0kW-a0nrIUCdlb9MXxP6d3FcVWpnTNqoX0mXX113PIRx7sE4CfX0FAW4Zm5k5YQdsZ5iX5sXD35RJXy_PL6oYcfAXAxsN568w1ZuOS-2hqT-dAZKhxWywnudLSHQsvPah9VYHliENXnWr1MQltADE63liF9vkxpuGAX-QnqpigpHHH1E17of0GsF3BVw7GcGnp_t4DvsZl9VfMHs5Em32dd67Gf3N9B--E4zBiXOKn6NdQAICy3fzYfYOrfGdLlZJo60UTjYIjCFXTYpOKuj_LvE--GWoC53dFS4KFN-zKczAzN3H43XOCyDL8Mkqr2Uvhfcxt1ebf50DVUvRw6df8GWT7QBHIdQbFNIFMC1FUy1DjMcIJxXlh09NBzaeG88FzU2fCzHNH2biEET24anIKZ5CMXlJiq53opbhvkgB0P-Zm4TPCaHVhOYi2Z_wS1d4hXyA0WFeOQivQKxC-J43VU6ZxmDSloXCJtZnR3QoUgS-6-vki47xVtLWsJnJHVHAI7Mj_TMSczr5op_MQlnlWTYf4zfhR_pUgPWtDOK_GxB6SXHdtLto10ov5xp326b1huVIJWpbOfJecQ60NXKPiyEl5pd2IZOWxVFHOSdQ88Ei4Z76XgFt2z1WEWcJgvANkOJSbQisp-gHxv3f1ZlWqN4Ft-ChCOcZ7FBMhBakPwRalID_epcqDZ_iRJEptCNtHPywJPQpGrT8EkCsgmEyrt1RUjRriFlnrESCCo7K0r-Revwa6xZ3UOQuJ4a3dgvSmxBjpf6dJKxJ_PlcNOhqX1OfvY10ZFa84BZXxvXidysCMVA0SaLcFvH-fdS5m9fvrYEHjgvGDcrNoq1uUI7CHlpR2oYmeYeeW7ZxrMhZgOdQW4nHpFjwR4aSULg7bJ2Vw6G0LLBewTGK3l682cF514htgNmprditQlY5zrRYiQWmgRo0Zaa3ZqWdlpwNOYGaCZxuLj15GE-fWtxcIal0-fE4uvgAUEHNGHd46aLqvCJLg0usF1GS5k6mqsKhyWPKcdAm4JWhexZtTaF6rUORhlB_fNt410OXjIgo_hmjB5UTAjEDnlJvG8J5zT7KRPNitgftxxSZNHWHw283qI8y9ce9s9Uqk7-PBM5qNSvACUCX9fcrKOJ3zxvMfZM8fSvCo7uPQZw40u-rCP2xLF9Bnv6_OTDlR_45_cWKZEDjXk3bNJ1Mmpp8LNqIc5kX3dzhmQLb3JYZs_HCC9X0YTWnpAv8XdZ95FKOA2vq8KFCSd-2H7cvzNWUZmt5-OkFH9BlvlAdaZ01I4TXnxCuMSeKnNE2xVsPwZJk1omdlN5zv_OpM7GhWjJlAQ-dZT4HHuoq9pMCfT-Ka2YsOCYMH_SCY4tXOyO9-wpD7_7HqAs8XHN0himnTxOaRowTxXe6yO6h2ihxOT9LZmwC0jI_M8pBvFwyjkc-KLoGyLp05yHzVyL0rFCN_0HA4sBtZfhKr5cYqt_7eToxisPuuJfxbKYbULq24e58RoWZ0wz7AbM6MCbJlAeTP9jJ0j0zZt8YOyKgrPfu1BguF-cLIdEXMJ2tr3nNyGnrJjGIJiftTw0A_2wisZF-iRC_I9d8J1720A4LnuJYgE_rbiRUa-4xgSi5nXaASo1wjHvLAURFmyr-L_bCAam_9A39pGWPWfLVaBV-OsYiXsR6U8_CqH8CMKa6X8BS7eN3t5QXvcQYOmgerrumOroyOs-y0PlWa03ZF7VObEyZOyWyIkKPq5jPKJvErpLGAfztCQFjGdPmRhRW-lnE9TzXIvkIe-J5M0HdiCZbE0_LwMyODOg0hxHinv-v3ECLx8y1Giafj4jVA2ysV8oK3JVaFR5tvQXuTt28_3de99DaoFPE5RqMQ0exUmrfNE-TCb_1WSZC30n7lAwVMe8TaIz-Okyt3faaEXGWnSTrt4rj1UP2Vqu-LcdJgDLpS7NqkU_PAckfoZcW2ZV45-pF1OUSVF4XV-8BLGxzY_oLqrDjjOBfhLWXzkIEwZE8wrSR0Jgs-nmdsT8spsNuo0-Aqabw61tKXygeo2RR968F9zm600R8Z5ORZp8sSoKqp44wzEhtjvMVe8Y2DakO8KCDH_uKVOzLe7F1Y3ma9Y9dPQ6B5hHM2Nzvg9A231adCS3HuI5qEB8vm8XzV2F18t8I_BOfouGmWkXgrQc7NL9EmBdH_kPH7d9SQw1u16TwsYhDZGeBMwerXi9U-JQ9qhyAe8JnE02JcH7GLz9LhP6krxkDC5pjLnijH0pTnAQudRjfcDmpNekjhETpyUNkve32b3bMxgPSOJL2rR1JdbtdGVnzLA6l-XLDQkSlsGFIIoTcgbRJHCYY6zeN2HS4Wf9Sj-3jwvhG5iAemR5jYFZkDO2APOUy3x7phQP7th4CkA6r6AhC6DGyeGORZ_AEH_dB_hwZwJ2_ATCMUTRLoobEyiQvQRIT9MGx9BHfJWE9lWIletn0pw-Wk2VE7Gh61o5-r5emCT3qB-e-1UyN5jfFzp13MRetnt_H-vgDhY2hKkzHLHDmU", + "encrypted_content": "gAAAAABqw2BStTgO8JHelDxMif2kDpN9c48oIDt9jc3vaUEB6ZsucacBwtzFneqoNFzXE5uW77LpHDw-2aseoikEZisky6ABEfcwicCmNfqsG8euoU6-ww_QhkJWK56pbUQf9XdDGfzR-4eVFZPNi601Bjvxm0xtaUekq7BaJScESYM4dY2bONv5HAxxBRmaso4_pSqPPGoNHG_PcORVdmA12zTR5O-Oqv27Zw1YtoqMdhRPQUAtdldLY4kMS_eiM0R4Z_uCTNpATyCBi46LvaxX2nSrnVsCSj_nPZ5np3niRrL8U-fFFST2Gv_FpUPiUTMfvraWDv9x1xSJC1D2B5KObwpb4lOsUBNQpIoSyAJIxbDEwcJSJVfj4yPhbq2EZpbcraK_KvGyhEgrJOgi3ChRi3srsK68yrI7LVCaDBXt6bNfoxxsGBhpw60QdxjqH3BwVh7Zr8nf5ytQh9Fej0v6d4c4y0MPAOAYDfoh6cl_IgGkBNuFVuWaBUekoFBfsdE-8zsYW98ikWK87DdgHe0re4u4yKIqmncs2ZGxRi1PepxuiWHpSU4A6CKA5IrwKecohBlb814R-42OpwI-Jk0Z_LPEvWNMSH_x-1yAK0ToU03O8pF-21XHEtL82jlQqOXU14zhpBbGjt-e1BXbwmcWVX6uq86p-jPUNFWuwokJ9R07MRRMN0iozsGdWiSXpYxhtZuVXlPbdEbmpm0pLpc4lL02kztjL_1fGN_HeIBFfL_S64Sdg13ozkqtW5ygUrs8t5iuQ1go5jJxjqFMZZbK9NOkPkuFzvBWhf-BUGV7FoY2UJHKX4muFxZre7EPMauFPDCtpIFS2ZP2qsNs9tzLpvTll_ZQrS1QQBTx02G42yfK5IrQZv1WxypH_Df9hsQRsNr1HvDODxzBiN_s-oQ7sSXbWVoy6KdrBhgJzvJQT_txcRpb2tkN3J-mhe8WTO0RKzyBcdiJ-evkTmV4bU6whjheQiAMCohzMN3QeeduIr8yEto2-gmkPtXxso43s0Ra4J8ZQOTW9nTDT97Klwq67FQnsH6uwB7c_WhtIef5aJYfYd9N6Xqkq_sbr8WyfFEl-eAHjH63VB1E1K4bsSdDxBGdS6-WsbOEhGjM0itN66Mv-1MOHM-iA0vtLpV_Dwn53QCNVi5ErCZDLwXW3_QH4ebhR6bUN3BymhDEw8-mlTEuUIxQKoLU9QPeYV63AJorRRNbmyY8ohJVJEk6ob15BZVtnlXRWd8MmASoPcdrpB91yv7gNlLrvrUz_XFVtJdsNYLqEipmhtGNuwA5K-fuuBuDp_1zieD87PCeOF8E3d-gPNU4HYZ9VQQudZ3U3tboh1GopA1Wb-JEpNHB79d9OAYlVYwi1NundIUtmfSfbxHN5Ing-Th-vdWPwTo6AFNPRBVFwveUeBOIcHoQ_EZEKIKxGAaSsTMzYdJzyj-p4ItjgWA44iqOegPbIkJWjjSDV_sokwq3kkrX1Y1nEnnHRtiGkB7vklfoGXEJNOjHdFY8niu1z-V4flk-pa3-UxyekEad_30ESc0c-mzq05NaUr-kg9B-z_PUg6qBZvIPUuCL3J0OWAun73TXOUS70FbXedD-3iVQfr140zhHI02m8faPrCg4B_yoS-VnWKv-QijHaljDZYr3-U14qcDyUwSVe3VB47YuWEJZ1pfqFeVPUeRuaGZXavOVJ68CRuJ8EmKyousHrnzDlS46zKcdon8w4eRc5bxuRGGf0DxE94fzo5fFnUIX1IHgGDNFP9qP8ufwBzR34HpZgfjPHe7BDa2_OXY8QIw6B5iepO1-aPFJC_s142RnHDKbIiKq7QcAa8bTiTVh7U5W6rS10Fq-yACy1qSw-Gru2GJYBmOW1wPffhlA_F_nm7CY9xunfO03d31O5m_8o179pzyRkSGph4XrK1hWZL3nmDuYxVxGVuZPUH80fKdxKLC7gTkTrB493AMP7plWuzfe1-F2Oiv8i23FzapdNtk4cpw-nAwvJ5g9_8WDEf6W8e-fZdVTFLJtHNZE8Qtwvje7SikIsUJO2grHwyL3mTi1x0actmIXRoUqH4G5rAdHe8oPyAWQ-RdXtQzJepfrm7DOZUd6zBkJi-_4UFO0e1wiE0A17rmNeW4p8O4ROIw-SujvC75lI5lZWCEE7kYrAi83ad1Ifuv6zHfl83lgj-7PH-2m_cBgvmInf-IExlPpbMD0LOD99AzftB_nEYtIwBl3PFtRc6ZREosD7xa59cRDRatB6znqMrCFB2glzIuc905UMTtxln9eHJ1NESWv-_JJpMZafW5e6RJmXo-CQ29dwsH4HVoXVbvHQasDu1o1UwTERf6vPx_eovgXNegXYApjD3KtG8QRNOPqHfswPd10IRYSvznSbxZVvv4NlKPoexfoJ58ShjtsVHY4OJpAHe0EVEK6HJlaRQV1ysEtRan-JsfGDMDKkrnndcaBPaFyupRL09X6rso14feRA_PwpI-jT0xaOFrulTdCvngduHziEFCYtUf-lDtn8pV-LYDuYabiYMEhNtG55anf7n2hODPHj2wPH_NeQ3YhbINx6E1KRJQ9p_CXyFNefAQ4RlvV7svXg0LH13t7tdGPk3JgvlgcE-RPuAmGM2qpMSxDxHhRPL4TpbKJ928TKRgWNgUqoMJZ361Vji1BFIarynxI3dOalUgOZ2NyrrPFasVALLYL46XNaGIKwgU6G1MpYFnuvCy9XeDhKLMk-wd8wa1jTVBQthnIk5wCAoRop3sr_LBPTBAsFvsxw75iO5v-UPt2tE1fkENPG8tEbcBJEohxwXWNOytwP7cb28p1Ui8FHFazCLhH9WUYCy7IloFagSgtnafbnffU-7-LCseO7HQ5SQyx227YfhtsC65uAG1hT8SKUKaRQp-d9BKN0zleIUPg7Jgmn7MEBNnHN-4o-7cgC28=", "summary": [ { "type": "summary_text", - "text": "**Clarifying weather details**\n\nFirst, I should ask the user what timeframe they want since they asked about the weather in Florence, Italy. They likely expect to know the current conditions. Right now, I can only provide the temperature of about 40\u00b0C, which is 104\u00b0F. I\u2019ll say something like, \u201cThe current temperature is around 40\u00b0C (104\u00b0F).\u201d I should also offer to fetch more details if they want a forecast or hourly breakdown. Keeping it brief and helpful is key!" + "text": "**Communicating weather info**\n\nThe tool returned a temperature of 40\u00b0C, which is extremely hot. I need to share this with the user, saying the current temperature in Florence is 40\u00b0C. Since they asked about the weather, I should also mention conditions like sunny or cloudy and humidity, but I only have temperature. \n\nIt would be helpful to provide a Fahrenheit conversion: 40\u00b0C is about 104\u00b0F. I\u2019ll keep the formatting minimal and remind them to stay hydrated and safe in the heat!" }, { "type": "summary_text", - "text": "**Finalizing weather response**\n\nI need to ensure that the tool call is done correctly via the functions namespace, and it looks like I\u2019ve got that covered. Now, I\u2019ll keep the response simple. I can say, \u201cIt\u2019s about 40\u00b0C (104\u00b0F) in Florence right now.\u201d I might also add, \u201cWant the forecast?\u201d or mention, \u201cIf you want a 5-day forecast or tips, I can provide that.\u201d I\u2019ll keep it to just 1 or 2 sentences to maintain clarity!" + "text": "**Clarifying weather response**\n\nI want to make sure I don\u2019t misrepresent the information. The tool gave a temperature of 40\u00b0C, so I shouldn\u2019t speculate about conditions. I\u2019ll just say it's currently around 40\u00b0C. It might be useful to ask if the user wants a forecast for today, tomorrow, or specific activity weather. I'll also remember to keep my response simple and avoid any heavy formatting. Conciseness is key for clarity!" } ] }, { - "id": "msg_05e35f9a375fc3bf016a3c1251221c819f8d58814cc2f09af0", + "id": "msg_0a49c1f61a091c66016ac36052c4c487d0bd8897d1bdfd0786", "type": "message", "status": "completed", "content": [ @@ -197,7 +220,7 @@ interactions: "type": "output_text", "annotations": [], "logprobs": [], - "text": "It\u2019s currently about 40\u00b0C (104\u00b0F) in Florence, Italy. Want a forecast or more details like wind and humidity?" + "text": "It\u2019s currently around 40\u00b0C (104\u00b0F) in Florence, Italy. Want the hourly or a multi-day forecast as well?" } ], "role": "assistant" @@ -211,6 +234,7 @@ interactions: "reasoning": { "context": "current_turn", "effort": "high", + "mode": "standard", "summary": "detailed" }, "safety_identifier": null, @@ -224,11 +248,30 @@ interactions: "verbosity": "medium" }, "tool_choice": "auto", + "tool_usage": { + "image_gen": { + "input_tokens": 0, + "input_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "output_tokens": 0, + "output_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "total_tokens": 0 + }, + "web_search": { + "num_requests": 0 + } + }, "tools": [ { "type": "function", "description": "Get weather information for a location", "name": "weather", + "output_schema": null, "parameters": { "properties": { "location": { @@ -248,15 +291,16 @@ interactions: "top_p": 1.0, "truncation": "disabled", "usage": { - "input_tokens": 92, + "input_tokens": 191, "input_tokens_details": { + "cache_write_tokens": 0, "cached_tokens": 0 }, - "output_tokens": 544, + "output_tokens": 310, "output_tokens_details": { - "reasoning_tokens": 448 + "reasoning_tokens": 256 }, - "total_tokens": 636 + "total_tokens": 501 }, "user": null, "metadata": {} @@ -266,4 +310,4 @@ interactions: - application/json status: 200 OK code: 200 - duration: 9.456836833s + duration: 7.373643875s diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml index 6bae8ccff..2904ed010 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -25,74 +25,74 @@ interactions: content_length: -1 body: |+ event: response.created - data: {"type":"response.created","response":{"id":"resp_0c6e197b73d08e53016a3c126426ec81918293fa39c14f6d03","object":"response","created_at":1782321764,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} + data: {"type":"response.created","response":{"id":"resp_013cd160f2c0e6d4016ac36068371487d0bf389b0ac94b0b31","object":"response","created_at":1791189096,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} event: response.in_progress - data: {"type":"response.in_progress","response":{"id":"resp_0c6e197b73d08e53016a3c126426ec81918293fa39c14f6d03","object":"response","created_at":1782321764,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} + data: {"type":"response.in_progress","response":{"id":"resp_013cd160f2c0e6d4016ac36068371487d0bf389b0ac94b0b31","object":"response","created_at":1791189096,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"rs_0c6e197b73d08e53016a3c12649ee48191b28ab7a0e20a3eac","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJkfbXpQ205JdlqVjV2CzfhyWSam6N0oAGAa8Z3u4T1mtS7DLTGF1hBtg6lDv4WEDtqKIe7-gzRkviV7UovDkzjlWbWWvNvEAzjBmGhjspBNvzCPQERaz9ebqafwIpNMHJwl1vuGOIGvh1BlnSoSWzmVd7ZwL9ci1QY5NCI76hj7J10Z69_NoFv-_PxeU4MYcjj-fp7tME9RwBuwWpbbbC9zomcrvHXUPXS0rXVLda9cQC9nS86t8sDhwd-bSNWtuaQVEkGSuoZ8cchu8p0z_FCQKx9bbSf2l4kxOjtAAysmkkJX5Yd9DH-LmjJLDecyFV9pR05dsYsH8S1HKLEyO2Eprj8c6USPz7ZUpL9hRCryed0zfeFQt08L6U-73UrOCD58ei5BLABsA10Qmm7apl1GSunTxaoz_SjiqEF8SF4uWKpsm_IeALOdopPvA8Ss-od52w78ZnFAM2QBuEva9hf3SbUwqbG6ECX_5iJZgu-8lbJ7nViYNOGh2D-eEgTCVPx4bxuts8hiaghzLc9bwdhc7VImmLSgjSAziO7zjcAJJX1xA8yMLyWdjafzFjXaevA_pTBrDnjc8cZO2MhqJBTXxXfoHBiv45RmMQWbXd6zNkP9zwRq5of5TMr4i3B3zC-KklM3RM5G1Gsjlng3P3LCCQ-IG7oIuCZWmH6DhCopGywa1AxE8duCmiZS1LW6KoX73zYCetTH4FhAH5D1v6Pg6kVMnxdiTOq39SVwHKue_8ckBcLIfGp2UouEc2g_xEGmO1l-KheLUta_AuwF3BTiQyOqvVyNFvoAWd-gYqTkBJkZtOZ8fvrOZuQlPNQ-V8V4TB5TthFITzuUWcv06oN-rovuMJreQIRc4x09vPRR-ZfSHQ8LTValSMQcpjUZhaKnXuUBb2xf3MC--OqdWBENo-zhumAiBzUuTzrzs-BwbY=","summary":[]},"output_index":0,"sequence_number":2} + data: {"type":"response.output_item.added","item":{"id":"rs_013cd160f2c0e6d4016ac36068a78087d0aa09abe531709de8","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BoggTp0xUyMzpF-zNyE2Z-JocuoMwdYfTk3oUJDZjXzCoQ6uB5wVGSpVHQPJd-WkT9IM33gVdfeUcWVT9Y45OQVt0ufZcoZd4fPvh00HuMCSON9MeArFPt1uYZtGgj56KC8Q7DIicI789H9iwe97Nrx5QlIKvJRhXrdydBNa2LVVkyftMLYKvl3AsOJLq7KtSI-15iIVnf_Z9dZ252JlBVb_IuQT3499VxxToxOMtL7j1sa-twpQ5rBD93lQ92t6qoJ-tgYxMEIyBH2OKvC6kZepk_mg6iz4hHZyVBH9tu9tXOV1n3OemNQ3Tu19Bj_KfSttD5yic6JeJ6stkEf5vo3kVXB3c62dbOqtQryaNhe5XqIJiWfAVkDWyoWn2zGPVYgNwZNluqbN9nkEzbJJNkRnxsTQainGt8RO5LiKtKHU_JM0OLTWJaq6T5uy-h1r6Ux4l3dkQ_3dnfY8JgWMPl4mRIzvSVW1Y_NeHz3WTXg_HeJfk3yFcm9AEqeW6xpGT3GYPAmmP0f0Sc5wW1m_nXZDvNIhaLWUhoWRHc3bVYEAmnDR8onGoxT0HmadB9BkcibPRez_YZUdE982FasPwIH1SEuucgNzNfQKaVZDS9RWbeCmDEiwcXCRiEyctCaaX7LdydDGvytme7j4vqfpXLGbtWYBtyiOEYJ3zFnHwgpa2wXqICU8Q9SKb_Zt95O7mQby2CZf_CWOFSXbhpfMNZ1FdW66xtR7i0aeg-vj0zwyPzJgp5iPP1hHZphPIUy9tLa46CWBgZDLoWUGQCQolDicR6l6M4dqgZoUo03YXQhhVuptGKIT23R9EpnXMHTLoirZhjJDVDaTxlfcXEX2OqpCdwrFTapYxhDK_-ZgzqkOiVA1k4VLc5JqkQZ3759WeLJyB60QodnaAiNLhEvHfdLgof49KXWwLJqeoVUSvIzJhjZC0vYDfkKPWC9X2oyElA_X3rhCErTgwqbG7j5h8NJxAD6aneRBuy1yeHHUiRosTSnu-GKb_zZ3r2SMwYR6msv4Fn-jPMdNt1ywGsCzFUB1omdoXxLn-MFAyWQCmKX0TY9n5dQOdMkmYjV00OMk_TYtmWFM91J9st_-Qg7Xh3tP4kByTXriOX7MnrqNLTUe1sk0dmZ8h9fXfeNs2ZL7xSlPRylQqTBQN5iOI7SXjQsg==","summary":[]},"output_index":0,"sequence_number":2} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"rs_0c6e197b73d08e53016a3c12649ee48191b28ab7a0e20a3eac","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJmJTvJgPss_1zxH8E1qpCzpWfjk3KCUjvjwPEgI04ZFCAVfYQY6FU89vjWbxnA2DetSC3ARxET9fjg2gvVf4ujDMvvP2dXzaXE_BqmXnb_YVpSZEAX--iWtaQtwIUzKEzc-xiax0i0ivBKwG3qEjPw6ySMv-EqJFNzuMwu-zYCJSqrXrkSmWzowBw3JdRW97bqK9dZIv-2RUmXv8Nf39uIVuhaCXvSUu0L-cEyQ8Tf3fDHn8NvDLjO5H4QG21eHBo0TGzFsEB07X_M7PvzV5vFLRywHMnF25TxDnzJzRIa8BBaB7ecECqjc2NZbS4sKcY2C76hRdW_cc5wWy_wIbgo5-9XYMz8DJU-cXYhA71uLYookLitC4mJFTGCIXGOXt7_1iz9LLLa7Hbz7crNHkpqZ1q6aQphSN9umjvHD9Q3RejN0R7rSi9wQDuRPRgc7MhOqpEZxNeIdWcgqnLHG0FGqEAx37-AKAQ6tC1xFoqXH5Y4sCCbZMCLbrpcKwAylvY2T3-fbbgu7WEhUzrz2mm7weaM2novr_dc-sOrIWQIPozjZPyEytBBR6Y6G5a-TI5KkIw_KM7vzo2jKn5OZRnuaxDFaGpu1heTQ0YQjITyBquyMlHKxb6l1GAb19-Ws78sI0R3XbE5zVSSXbwNoJImLHhSEA2cFM7B1b_72V9M77q5eVgRsLeHamdEBPfTc4bo0N5-DBU0pz9qcK_eF8Cq_THK6ketneY0yLJ32I0Qj4-nv4kkEqXC5UVOhcOTe_KXdL9rxaOf0OiZBGbWFhuh9SAwZ8sT8SpxAxHuldQdUjTEWM3ymwNBcdxM41DK_zOdOuHQPpvxKYP1Wdm_XNfuwgdBfJy9ie9o1fOEbzjI7etPup7RNgF2prIcwVtRQGHxQRZI0t8ORigyMV3-FkbgAYjV6LZUc_8Hc_I4D6wD43c8dufu1pNaiCDr0o3JNFrmP6BJtGA5_0UqmFW43BHTrQ5jUPR-nnouXUX4sTOXwFO-C95jkSzi4zOTkdV_5S1F43iAQNbcFiMXbExBP4cECmt4OMq7a4dheUhGDmw9mcknS56ZMqEZVHLDbO692E4SvyDz_XbGpyXbPKcG09vPsLCAMhXjuoL3hdYQUT5vDu8JZqcmn1HAYMco8Sh8sALKwAUHtAArqdn4ox1FU-n6aIMYNWhsp7g7EZa1ElMYQxFDN3mIqzGI_EqjBeMC3lQO5yxIj21CUZvvXpTq7KFQ0nJ6NFuokZjgLhzZOe2NyPpzNPn37UZeyYCWFEhRgaSyTXRFgjFdLpBqlDH90aKb68HXz_3KXCMi-BEpt00Gq3VF17lWYdndJhMHXomTxfCqxsHjoU3s98e1mygzlRciY-LQ4bWrRsdeRsE1H6YWpQFpOaGKuQ1x_AStFZ4Bd4EAgHhO76ywkLkFD5bRbP-srnqgJaRkUTJZfujLxphaXigsGK2kyVXofsGS85fYDuegBSobj3VNMMoaiPSxw7sG8zLTx3OzPnE-R4boW9QUwjtgpCLKj887r6wZI5nIzH9bRYsRljMMyLc_vdZY9aM77U6jifbuuPFO0ZH7KpinuIuxKY39zCx6Z42u3m0NEyYPyQXWZz4qk3NqiscIpJjiY6143imr0mB8y7wGflnoQiZ837p5004k6UW27PHWBZOeBIRlENHw1iKM_hGifXdNMXPP6EZRjkbu7__12yxo8eNvPu2E2BQZUs6ojgMz3-f_-5bPezveaIKyK4Pybi11cgS9anVhN20kYxb2zbUV_PDnVzTE3Dq1mklNyc5fnxsMHqWYNLROKhwuPG5rAFfuTKScweersJ91euW8P6x0Hy7mdLFzyoPSOW6p5jotuP5K7K4KAgNfg1ye4URY3OMdFDriFnC-g77WZ40ZbkPJ-UN8L6zzjCWuYkIzNxoJwiVQZK0ZFqNF9mALHamXq16BeRrfOvUYQVsf1c76ge2UkLeafkO1ive1EaK4SazhS4SAZfc-lZd1AjnS_-yDzTCw434bJY9eK9HmmrFZLKcHHpQ-zm10zRhNnXfCVauUzoNj4LdBsjJiwPVBOqB-u9_3tFIJBbDyiCIYrPhKYZ6ACzQe1vMjKTxIHilxQIABhfDU8Vp6gZ-BRDYFVmsZrPcHBvxN7BIGi5YF3LWCc26Q_cd3VQpk8bfVxcEpy6HBLuQblCAcfmTjs-Yi9c4dv3L_pw==","summary":[]},"output_index":0,"sequence_number":3} + data: {"type":"response.output_item.done","item":{"id":"rs_013cd160f2c0e6d4016ac36068a78087d0aa09abe531709de8","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BpkJ9Bx7uMBPvDh-Tmj3_KETFj7qauSKWG3S0OmngvoKxMuef705bOhbCkirvXJWqJipfBhQFJqbesjJTyiAVtyhq_seNBrc5QgyMDyGYVLAw_1yA9D1KYPU5F5KiVHxP004OQxZJJ1IEAs73bNkBgQy_-S0Km7JqQCzs1dmAHEVKtZVuWrL0tffni6Mcc1uV5dfZbSchS0olXlnJnihuBEj3y2trItpfIT_vBHWMR4ZU6Or9DlcmoZoDAIVe5rICORPPsGUwvGdjxlRf9O2kJwbTn8cX2AtKVGc9va8sP5wYNv3POoWINDL8fYTsUAfhvEkJz65XeGI1MjFxYVlX9JlpUX7gBzLRq7RV-L7fptegU-VT5NQLPz-w7tH4v-IT7uj7as5MTS1X1xvoe9OkEPvjdnJ37Te-mUyhWjyG4lj4IdI-Eg49Zv2BquVqg3ncBkvMQsIo01D87RbNeheuj5BodMGBORjZ9QeId2NjtfDZPU47Tt9iEO-BI-LOQK_PqMu78t82Ao3e30l3vvKA-ojNMXWO9sUv3nV8ug89ygrK5KFZ1wzBSSJsLlzRRSKhLsnpO87AUEK2SuTHX3D9aAfKFZ6DPf43PsvvJ7tD9LifzfD0IFHw9hA11vDY047DLXrw-t8pUnBZA5HA6PXN6Wc278_yM6aAFIPSqpyHLlIoMpuzLkzbGQOdpHnI0CZcT91GP3o8fQqtghUFBkSlX2sJ543A6AK8wmtmCaxNN430jysbmcAYrUjO01WyvUC2_OC9kf8z5p5-drpzvsFfKal1vrSoHUd2dp_XDHl3e9R_qovFASYVyuVp6IyBC88beeCwBL1BdOM9kLeCrA9bLPC1QXhsOT3BPZLJTET2AEPn8GjO_G8VXgLS_qS1T4VZKFZHNS4knkRmHb5WrkjJpKJtV6sHuC8_9QP4OP_b88x5DFdKcRduORstQEnMH1moEXCFs3YH2iZKs_Xv-zpbrGvEJJ7ix7j1mM4Kn489U28Nim5YWiSd0dmJa6a1GlJtnGogdspaloBQcaKVXtTsTZyhueCkUiES89td4GdjwbBBxdE7pmPr2fNVpFrTA90xWQlM7VDVTmg0RIyPnbhj7FJBuqXKtODrKAVKVN-YdfpLsxhHqUFh5gZwt-7vR7bHoA5O3SoEDQCmAf4QIoqPKpPuaJaDMjZjbbvPQblRxGTjP7BhG-M2HjJ-j3_CmbpnbPOnWRH2cB6SlDD91fNYxN6uCn4h4LadBQQlNF587PM5rsaB4noPqScs6ln6H0Zz7Cos9qEYBc6LjiHtO2qjXhtlZZrbVr38N7yoTkQbp6rHujngH7MF7JGPONpNJ29x5Tv_qAgI0PXAcH19aYDHni-JJj4S7g3GWo2Alc6dQUbUo-RG9oScaUtPpb46TXB_7ISb4rMwCmXKsgEoiYeT7L1bM0ShtXPWDDsK9I9UAnyT5QQnLnm7V831vwAsvU-p9IzfqIJ5DAE-zbVpLAsj8z3i2r79j6OXVoKgFx25yvBx9Sado0Ovpf4V3a5nZzaYx_KmUjiF6bo9MwXidxrbeAGjc2bLxAwT9B7Hquq1Kdm-DrKSJvUn8-MVJP3lRE66RoSjVTzPgD1YN-EWM9mp2GwRbDqoEcsJ5ahObQ2A-n5o=","summary":[]},"output_index":0,"sequence_number":3} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","type":"function_call","status":"in_progress","arguments":"","call_id":"call_EDay3PkaZNpmYHDVyeY69wF9","name":"weather"},"output_index":1,"sequence_number":4} + data: {"type":"response.output_item.added","item":{"id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","type":"function_call","status":"in_progress","arguments":"","call_id":"call_43ZsAtxwfLdZeABXcOk4Db92","name":"weather"},"output_index":1,"sequence_number":4} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"{\"","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"ZHxImI89t45jtk","output_index":1,"sequence_number":5} + data: {"type":"response.function_call_arguments.delta","delta":"{\"","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"dpJ0sJwrYpx910","output_index":1,"sequence_number":5} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"location","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"i8kTwMq0","output_index":1,"sequence_number":6} + data: {"type":"response.function_call_arguments.delta","delta":"location","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"NBR4ie1A","output_index":1,"sequence_number":6} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"\":\"","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"C1aSu7jdfHRbA","output_index":1,"sequence_number":7} + data: {"type":"response.function_call_arguments.delta","delta":"\":\"","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"VIBCh3t64anrN","output_index":1,"sequence_number":7} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"Flor","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"DY8vGJBFc0Bl","output_index":1,"sequence_number":8} + data: {"type":"response.function_call_arguments.delta","delta":"Flor","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"TEymXGQKdo3b","output_index":1,"sequence_number":8} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"ence","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"7lxem9Zfdegn","output_index":1,"sequence_number":9} + data: {"type":"response.function_call_arguments.delta","delta":"ence","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"egk1e4SPF467","output_index":1,"sequence_number":9} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":",","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"5iDU6FeO3MpHuwW","output_index":1,"sequence_number":10} + data: {"type":"response.function_call_arguments.delta","delta":",","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"i0LOame3vPI9VZk","output_index":1,"sequence_number":10} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":" Italy","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"jjh9mVFHu6","output_index":1,"sequence_number":11} + data: {"type":"response.function_call_arguments.delta","delta":" Italy","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"yj2BK8hEac","output_index":1,"sequence_number":11} event: response.function_call_arguments.delta - data: {"type":"response.function_call_arguments.delta","delta":"\"}","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","obfuscation":"AdLfhfczPpgx2m","output_index":1,"sequence_number":12} + data: {"type":"response.function_call_arguments.delta","delta":"\"}","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","obfuscation":"z1QegxmWllEI1Q","output_index":1,"sequence_number":12} event: response.function_call_arguments.done - data: {"type":"response.function_call_arguments.done","arguments":"{\"location\":\"Florence, Italy\"}","item_id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","output_index":1,"sequence_number":13} + data: {"type":"response.function_call_arguments.done","arguments":"{\"location\":\"Florence, Italy\"}","item_id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","output_index":1,"sequence_number":13} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_EDay3PkaZNpmYHDVyeY69wF9","name":"weather"},"output_index":1,"sequence_number":14} + data: {"type":"response.output_item.done","item":{"id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_43ZsAtxwfLdZeABXcOk4Db92","name":"weather"},"output_index":1,"sequence_number":14} event: response.completed - data: {"type":"response.completed","response":{"id":"resp_0c6e197b73d08e53016a3c126426ec81918293fa39c14f6d03","object":"response","created_at":1782321764,"status":"completed","background":false,"completed_at":1782321766,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[{"id":"rs_0c6e197b73d08e53016a3c12649ee48191b28ab7a0e20a3eac","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJm6voeL1niy1RcJvIKwHXTysU9drj7ZS7mrbOhW_wJT3oGWVWPmVH3CVG2UuGzd14crVqge9qCpOk0trcYmM-MbBAwavqf0Et37EVdvOKKE077Uyr5AYLHmG7jkGUijE_gAPdZMfpjXDnirc2CNUocL4TbSOsJEXbG1_-iSW6N6kMF_khOoecNwPU7rQYmj_RSKU8yndwgUcSv1S3TigPpvvdTsZkELvLZAyjceYWtuTXRYKdlMEeK6oDHxUhUcOEIkbPtbARopDo9enhuKRahMkedzwL4O4dQ4lgc0h6RJNL7ZdPck3MIHdsMA8n52n7jSRCqoMa2pQxLUGQe_O5wK7lbDhAQUX-JxkVGv6OQPXue-mwoLxRa4NnZYmmcCqmm8OyuxSj4deizCX2Gg83-G0mHG5AFdvSOaNQO5oTK70xrWRrxqEpFJARQtxvAEwenndjTLo-0RgSkNkvSMLID_xOaqpmsCrqoUxV-37NZZvV3HgMuHW0HHPsjBRujO3928czeQjKYmBzqGLJOr6lU1E5cyP8Y50-a5j5ua9CMjrlVu_9I6h6bYxh0jRNOZ1_Z7lXCF1CDu4yLnLFHfkct5qhpj4qjtnf_igSV8GBusRfEI1js7fu3nJWywn0TiQCt_KSkP7HgYhVwojMds7nxUgOTetDAgQ-OXLeQK9ocTiP0PXshxALJB6iDTg8oNlY0L3Ce-NfAq5Mubi1_F3EoWj3c3xAio7JIE3WedT3g5f_lBf-Zbst6eZX3CNh0PYMHV6X_tWE32MBnSKj-4BmiqtVk9Fxhf3JXgepsL2wCcm41-jb84yfZIJe2H1jxFNwNcqo5apYHrVGcgamCo6K2ma9i6JOdV8uWQnJzNV3Khae1ROrZtD_7uV1XgA0WrzM8XZ-0Q-m0atDarQtE9eKHgFVwgOzJlN0FS4iUx5XB2EUJDfCNjT9O9uWvXDLXLMezgfZLQfkRoaK3UfAuLzKMolu7MvRDS3HUk4ct--GuYdu9kMQWdFbTmgpqOZb8nZ6rMVAJJ3lLv_qP628uDCB8PzpNOC2ibFjzyqvwVnRfht1PBlllKGiCiPEQRNm0_mCKiiAXOPWJfvG0wa5PyZ7j5c6lwOicxI3hCGA79mpiiC2164f0GOMnj7b8PwtjsLESBDPMVNT9IzdZils-nrfeWxjCBr1XUuV4Xn0GTV1mWpLul42ZfOR-xatgmoBuweilHRlaFrlQQJNM3O1UD_Pfhy8SaVE0Im6IDMzXdQQ4oVEbQhmiN24YetTi_jHLl2S3Cpsh9Kr6ftAioKd73CryM4TZo75o6Xs__KKS78InqysxuP6Am6tqhT9iIwNGOfs6akUL4XTA5ntU_CII6n1jTSSlisOJqd_2cS-2-5VYJgNKL9EuvfhYXBA1i21lJUtYzJXkp8_8JE_yDTBxSHpDP_lKfAEVJz_phwPatWo5kZJbnrEdx_J_SsT9yKN5sOEt9zKjv3b7Vwequ8Oy3BAUwL43HhLj_sBNxvzEhO1bYvmrSPrQCDqdQhhAEBz-mC5UfAZ2izEYefVBcDu3SE1b4nZ65Ckzsp7PerN2GOyazotkW_HqN0ELGx8StAys3eCNfqmxfw9NLuXHQark5yJpeoA5Wsc_HKVjsEelXodl-mUNGfaEFWjAqlCZmMQwdTrqiUb0J0GedD7w3YxC5wgF5w3iR3r9LlsCXXPE7a_jVsquwsUtZi-PG_70c-vb5NpnzkR9ZovzkWlZAECl8_bMGfc6KBwWmoHbp48X20ltLzZcJJ36F_VlZMAvlBCvzP6uYTnHRs8gmllwfeS7mKSDlAEEGmM-zOHCeKh6W7KxGbFbOrR2CrmnmmUCR0EesANematU63jRZum2KeGqo-DywoALb3HQg6SVlU-NsmTdF_IVOtHMfsgZ1YF9QgJQfEupe0cQmfdxE8_p3Pjw1HzMnp1VVS1rZRel7pbgzLjh5EQWnNoc8NZty18IMulAi9VdzSO-ouuwAxln-mRuCOB53fI_2wUQ0cgjqAUUzw1LndAKhs9VwmgfYTpeC2m63JTi68MG4o1TlLpdQXQ9mksX-oNy2mAai883qrHP-K5I6BU6O8fuce9cnQnZkwjlxqxLj6apJ4Ui3S2xqsMJ7kmQvVgFzWxrk1rT33H83318ouz5kK7MP9OVqlAliBn0s_OoUjUBHryjkbMHopChvv-zHg==","summary":[]},{"id":"fc_0c6e197b73d08e53016a3c1266504c8191975a5dba87645ec1","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_EDay3PkaZNpmYHDVyeY69wF9","name":"weather"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":60,"input_tokens_details":{"cached_tokens":0},"output_tokens":225,"output_tokens_details":{"reasoning_tokens":192},"total_tokens":285},"user":null,"metadata":{}},"sequence_number":15} + data: {"type":"response.completed","response":{"id":"resp_013cd160f2c0e6d4016ac36068371487d0bf389b0ac94b0b31","object":"response","created_at":1791189096,"status":"completed","access_programs":null,"background":false,"completed_at":1791189097,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[{"id":"rs_013cd160f2c0e6d4016ac36068a78087d0aa09abe531709de8","type":"reasoning","content":[],"encrypted_content":"gAAAAABqw2BpzmWph4E5TOZ_2iIxWOl6wghvaU1uqMqHxgr5Y95rWoYdl50qn9B-c-Tc52op_vHcnOQTPQfB4qDL7qCAofgm_VVd1kaHkbbgNTtW56CeMlzo1gEDQMVG81gPjlWC1RfxLFHlhgF9_fTHDPPTwMBLvRB61IQakogjwVdx01NJkjN-vbUkOHXHBwb4rlOhh6-1JCXyakBwrfaPToVvPhcFSrJa7UV-9EUtuM1bWhb5B5fWt3kNdGxx2_klF5_yYlXw1ny_AzVs70vj-pUD3fgByPMh8AYckqlQWREmLy_G_UKXU974XprhRKaGff-8eY5n25ZSnoIuvOKCEazWDFOsqn7VEe4EVINp0ab0q6AIN6I_w3fhpO2ylLVKKfcWxJaJINYYsj40YjyPlD0prj5dxrAy38HqmX1Gp5fhEltdipNTvrN3SfIMLvSWTUzQZKEo57AEFOTup3hrbHHOjQNjzDgLH3U5mlOF3yVkqs5yE3hmdyLvndCTwac78yjycFAPTc_jw7aL98JY6MODnh6SR-Qlm9RL13i3WiV-muIVrfYtn9FrYgjvbXEwuOvOyD7zxFO7FFVIIH3_7XfnHAzXVIljgxuFFjfnBBhbXhBIycHWsfYPdUuKFV31_EetNu_gN2EmyysrKhzFKK1JgUoV-lTqKybhWS4POsV6mxmHnkrgkpvhjT0vFkzVNl0a8rhq669xwn2gYY1R5GFaRc72wGJBIG7Ki9F71VQEzjizNdLiYF4Vg1v-D0Pm-iLHcuwC34LVLN02qor-dAfsuarbS0W6D_UfOxHEyqsZ_f94e3EpdhP9AsW7r8LFeaabJgthXlARzJtvGiTlxDSLXrJe3X_46VpohLvUMn7iZoRpFumCud7S4gNQ1iH3Z_v32OEk7j3sMFy3y2dLthgk_UUn5rZGmMr0rdP2VL6Zl4oNiDbboTcc0QDFnP0Zry1RllulJqInTlBz2zx6mujoIbFxBeDCCTCyMt2LhDCNjKhFmA0PTIsMUzqR5UOIRKl9Z_sooovpo9hzCKkrf8GOOZxfHKePAJO4BYtkGImR1I7QHl0OXyjGUJUY6voAOhtEwLj-lqTsJDBban2Z1InEtzqktrRlhxVHjCeE-bHogtAu3HwIs3_MN8JaTD2_VE_IFFTrSx9Y7Lo2YRMmayJjK9LEJSWyQWCdtqsdedAvuIWCe0FU0UGA0YpG3JNqvYEko-85zUx7aRU93zusJY6L_nNRFtFHDRVaMWlELBw-p-6a3QeqJJ045DzQr5OR9Ul4OLBRZNA2KrZiopULTX5m7ziJmk51XTmsj51wZt4exZXQLt-oHMWpcw8QT3Qg-44Xja8UUY7Y85nRPM-4uK7aA1OFj2usltI00acc3PJZtk8Ppi4hKOQUnqU8Uof0HoqK2nrrkNgbGNzBfnKOdtemytXx9UG25YIQMOPuwPAtFMjR2nY4tt9kmk6sZRMpcGW8kBm-fY9zhnXJR3ojuLTO2m3YKJjvqJJoIWo0q0BXNry5OhMvE1fnnVa559kAuAjr-H7ZZJZJAfHriu7wFSssJRkqyfd42ukX4nypnAM0Hx6eig5GKrGj3lxf81QzpYf8dPOWKxK1pNSXZQcPq4_h2J9LHx_sbY0P5-wcvoB3cRkVRNc=","summary":[]},{"id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622","type":"function_call","status":"completed","arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_43ZsAtxwfLdZeABXcOk4Db92","name":"weather"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":60,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":94,"output_tokens_details":{"reasoning_tokens":64},"total_tokens":154},"user":null,"metadata":{}},"sequence_number":15} headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 376.097125ms + duration: 873.894375ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 790 + content_length: 2625 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_EDay3PkaZNpmYHDVyeY69wF9","name":"weather","type":"function_call"},{"call_id":"call_EDay3PkaZNpmYHDVyeY69wF9","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_013cd160f2c0e6d4016ac36068a78087d0aa09abe531709de8","summary":[],"encrypted_content":"gAAAAABqw2BpkJ9Bx7uMBPvDh-Tmj3_KETFj7qauSKWG3S0OmngvoKxMuef705bOhbCkirvXJWqJipfBhQFJqbesjJTyiAVtyhq_seNBrc5QgyMDyGYVLAw_1yA9D1KYPU5F5KiVHxP004OQxZJJ1IEAs73bNkBgQy_-S0Km7JqQCzs1dmAHEVKtZVuWrL0tffni6Mcc1uV5dfZbSchS0olXlnJnihuBEj3y2trItpfIT_vBHWMR4ZU6Or9DlcmoZoDAIVe5rICORPPsGUwvGdjxlRf9O2kJwbTn8cX2AtKVGc9va8sP5wYNv3POoWINDL8fYTsUAfhvEkJz65XeGI1MjFxYVlX9JlpUX7gBzLRq7RV-L7fptegU-VT5NQLPz-w7tH4v-IT7uj7as5MTS1X1xvoe9OkEPvjdnJ37Te-mUyhWjyG4lj4IdI-Eg49Zv2BquVqg3ncBkvMQsIo01D87RbNeheuj5BodMGBORjZ9QeId2NjtfDZPU47Tt9iEO-BI-LOQK_PqMu78t82Ao3e30l3vvKA-ojNMXWO9sUv3nV8ug89ygrK5KFZ1wzBSSJsLlzRRSKhLsnpO87AUEK2SuTHX3D9aAfKFZ6DPf43PsvvJ7tD9LifzfD0IFHw9hA11vDY047DLXrw-t8pUnBZA5HA6PXN6Wc278_yM6aAFIPSqpyHLlIoMpuzLkzbGQOdpHnI0CZcT91GP3o8fQqtghUFBkSlX2sJ543A6AK8wmtmCaxNN430jysbmcAYrUjO01WyvUC2_OC9kf8z5p5-drpzvsFfKal1vrSoHUd2dp_XDHl3e9R_qovFASYVyuVp6IyBC88beeCwBL1BdOM9kLeCrA9bLPC1QXhsOT3BPZLJTET2AEPn8GjO_G8VXgLS_qS1T4VZKFZHNS4knkRmHb5WrkjJpKJtV6sHuC8_9QP4OP_b88x5DFdKcRduORstQEnMH1moEXCFs3YH2iZKs_Xv-zpbrGvEJJ7ix7j1mM4Kn489U28Nim5YWiSd0dmJa6a1GlJtnGogdspaloBQcaKVXtTsTZyhueCkUiES89td4GdjwbBBxdE7pmPr2fNVpFrTA90xWQlM7VDVTmg0RIyPnbhj7FJBuqXKtODrKAVKVN-YdfpLsxhHqUFh5gZwt-7vR7bHoA5O3SoEDQCmAf4QIoqPKpPuaJaDMjZjbbvPQblRxGTjP7BhG-M2HjJ-j3_CmbpnbPOnWRH2cB6SlDD91fNYxN6uCn4h4LadBQQlNF587PM5rsaB4noPqScs6ln6H0Zz7Cos9qEYBc6LjiHtO2qjXhtlZZrbVr38N7yoTkQbp6rHujngH7MF7JGPONpNJ29x5Tv_qAgI0PXAcH19aYDHni-JJj4S7g3GWo2Alc6dQUbUo-RG9oScaUtPpb46TXB_7ISb4rMwCmXKsgEoiYeT7L1bM0ShtXPWDDsK9I9UAnyT5QQnLnm7V831vwAsvU-p9IzfqIJ5DAE-zbVpLAsj8z3i2r79j6OXVoKgFx25yvBx9Sado0Ovpf4V3a5nZzaYx_KmUjiF6bo9MwXidxrbeAGjc2bLxAwT9B7Hquq1Kdm-DrKSJvUn8-MVJP3lRE66RoSjVTzPgD1YN-EWM9mp2GwRbDqoEcsJ5ahObQ2A-n5o=","type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_43ZsAtxwfLdZeABXcOk4Db92","name":"weather","type":"function_call","id":"fc_013cd160f2c0e6d4016ac360694e8087d081a2ea510fdd5622"},{"output":"40 C","call_id":"call_43ZsAtxwfLdZeABXcOk4Db92","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -102,515 +102,68 @@ interactions: content_length: -1 body: |+ event: response.created - data: {"type":"response.created","response":{"id":"resp_027ec5e155f266ec016a3c1266a9048191bfb7df1a95ba9ad7","object":"response","created_at":1782321766,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} + data: {"type":"response.created","response":{"id":"resp_013cd160f2c0e6d4016ac36069c38087d0b311e7061bc56886","object":"response","created_at":1791189097,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0} event: response.in_progress - data: {"type":"response.in_progress","response":{"id":"resp_027ec5e155f266ec016a3c1266a9048191bfb7df1a95ba9ad7","object":"response","created_at":1782321766,"status":"in_progress","background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} + data: {"type":"response.in_progress","response":{"id":"resp_013cd160f2c0e6d4016ac36069c38087d0b311e7061bc56886","object":"response","created_at":1791189097,"status":"in_progress","access_programs":null,"background":false,"completed_at":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1} event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJnRMKAXBDpAyQ44LEAVtfH12vQym1jaUYwNXdqFZ7dJjR7nMegXrBntICf9APaqV40wTeeCY-nrb6U9XZJ8zec846oekA03tNf_K77A0m5oOPdbG2SNpZ523HF4sl6xW7PM7ZPkhb1CRLdtv6DcuhubU_01CU8l-prl3j8z1lGI55tmoMM3M5i5rhrdhhkH9OAD6ZLqlJlPz1wCbbzRxJSwXgvsQvPrjevpvNWYETl-Jo7cJNd1H7sWbLiygP4l--rSALoX_d8ZaVpHAZOSEMP7tWiU2_tiWsS1eQQLICVioBqmHELsAfg1LEEE1XFvedZ5LVJWhA55URafUl6FxMAnsvrSXf88wbde3-DbmfVNgUhocoIoOO5MTPkc1bQy6t0NG3IdjupazbniRz8rgpKnzns_lDg_7fjIFALMfk9L14wWlwmduf7JNiZvWi10QpbJDfqKck1OhecbIB41fdgMrGT8tZtdfBA8g0AkKFtZ77J52iDr1kAY2kGTJIH0pvy0wvswKjCivf_fBitOlip9w8ZBMiEINOZ89JsEtMHjWUZzdUzn5aLkydPRyPdwFlAVqFr-aZRSAaqeRnS-jklIAjZD6tFF9KO4ocR8JyezDELiEjfaJmBVd32HyZOf_qe9QdTI5e2sU2jEM5OMlEFEtf8JVANrwfOourUUBQS8oQ8CAfeq1_x6mpqhflwq9zTZ6L7G-nRzTCJMbhHhosXPK3Yy1t9c_Y5XLLbklKu4m2gRNn91M1pPlt9FV6hpV21-0v4QoMAMua9a7Mq4zEOJLUHb-sYlm01IeJ9IaVbri3eCqMypSTSyu8y2eehNgBsbHFRDWppDARcBNCOAQt8-QEhUaXVF7f3Xw3ArIS0lglEHX0DkRRtM4J51kVrKIN03B6I2B3U8-3_Nxq9LKMHFzeEROc7NYB_WcIyUE0CZag=","summary":[]},"output_index":0,"sequence_number":2} - - event: response.reasoning_summary_part.added - data: {"type":"response.reasoning_summary_part.added","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","output_index":0,"part":{"type":"summary_text","text":""},"sequence_number":3,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"**Summarizing Florence's weather**\n\nThe","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"GlViTLZl5","output_index":0,"sequence_number":4,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"rtfV66lbDik","output_index":0,"sequence_number":5,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" asked","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"92Z0uCWO8k","output_index":0,"sequence_number":6,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" about","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"mG1hL9mLFv","output_index":0,"sequence_number":7,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"wCA7xgpV0DlC","output_index":0,"sequence_number":8,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" weather","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"WQbxU5uC","output_index":0,"sequence_number":9,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Rxo6Re7rMtXPw","output_index":0,"sequence_number":10,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"QEdNvlA","output_index":0,"sequence_number":11,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"QKU0fE3PU0dQ1sW","output_index":0,"sequence_number":12,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Italy","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Hh4xl6bVpG","output_index":0,"sequence_number":13,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Y723et0vnVLOkPB","output_index":0,"sequence_number":14,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"DESCauSgGfDM","output_index":0,"sequence_number":15,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"BB6azUuPJEA3oa","output_index":0,"sequence_number":16,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" got","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"fZUYfkmUQriU","output_index":0,"sequence_number":17,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" a","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"63ICoYep5TiEBj","output_index":0,"sequence_number":18,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" return","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"0bVhcXhwL","output_index":0,"sequence_number":19,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" of","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"DMbZWLlHNc5Mk","output_index":0,"sequence_number":20,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Ipkff5snX9h3i","output_index":0,"sequence_number":21,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"C3Imycy8dM875Y","output_index":0,"sequence_number":22,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Z9J9Lh1thMGIC13","output_index":0,"sequence_number":23,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" This","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"FLyBVtgMrXI","output_index":0,"sequence_number":24,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" suggests","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"kXb8crk","output_index":0,"sequence_number":25,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" it's","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"oRyuBgSwrwK","output_index":0,"sequence_number":26,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" blazing","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"WdylU6eJ","output_index":0,"sequence_number":27,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" hot","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"0l355SVnZmcx","output_index":0,"sequence_number":28,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"!","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"pvxuaON7LbUW83T","output_index":0,"sequence_number":29,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Even","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"cLPEqmQXgGT","output_index":0,"sequence_number":30,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" though","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"9f6T9NLak","output_index":0,"sequence_number":31,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"7ybPfcSGz1d9","output_index":0,"sequence_number":32,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" information","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"YPRx","output_index":0,"sequence_number":33,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" seems","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"83HAv3cEwO","output_index":0,"sequence_number":34,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" limited","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"wV2pwaWU","output_index":0,"sequence_number":35,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"SsbNSdXYSBGFOIh","output_index":0,"sequence_number":36,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"II8k7IGuqEvwgh","output_index":0,"sequence_number":37,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’ll","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"PdHW7Cc3sqCNY","output_index":0,"sequence_number":38,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" interpret","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"SVVyNC","output_index":0,"sequence_number":39,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"L67KuQ9UkBE","output_index":0,"sequence_number":40,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" as","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Cmn9nN35AckLx","output_index":0,"sequence_number":41,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"3WpBuoV1uavw","output_index":0,"sequence_number":42,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" current","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"zKcGsPQf","output_index":0,"sequence_number":43,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" temperature","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"zhDS","output_index":0,"sequence_number":44,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"p7XV1EeS9q2dNxH","output_index":0,"sequence_number":45,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"e0hzmXWIzeuY1O","output_index":0,"sequence_number":46,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’ll","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"C1aNpjP0JrgPt","output_index":0,"sequence_number":47,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" frame","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"tI6L1pnYGa","output_index":0,"sequence_number":48,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" my","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"V2IY84r2wbbiU","output_index":0,"sequence_number":49,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" response","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"bb8ayGL","output_index":0,"sequence_number":50,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" like","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"SFmThhrXBpR","output_index":0,"sequence_number":51,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":":","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"EV5q9iQK3o5YZrX","output_index":0,"sequence_number":52,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" “","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"3bJAQQn3DbTfXY","output_index":0,"sequence_number":53,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"It","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"hcfuiOeqfmLgP2","output_index":0,"sequence_number":54,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"’s","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"diuOu6n0ANrfkJ","output_index":0,"sequence_number":55,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" currently","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"xD0Csf","output_index":0,"sequence_number":56,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" 40","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"vZDXdkdyha8gb","output_index":0,"sequence_number":57,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":"°C","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"sarO8GLleWKF5q","output_index":0,"sequence_number":58,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"XUsRYbgSRmRWD","output_index":0,"sequence_number":59,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Florence","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"gjlbWKN","output_index":0,"sequence_number":60,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"paPGE7idU0ptY5a","output_index":0,"sequence_number":61,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" Italy","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"ig7EUOjD6r","output_index":0,"sequence_number":62,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":",","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"0CBpwkMzTBG2WP0","output_index":0,"sequence_number":63,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" which","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"bMmUCdIqY2","output_index":0,"sequence_number":64,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" is","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"JDcf4hgvLnHkZ","output_index":0,"sequence_number":65,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" extremely","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"EQUCRx","output_index":0,"sequence_number":66,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" hot","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"FC15TITlAx3K","output_index":0,"sequence_number":67,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".”","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"XXEkUSG1vRUmkl","output_index":0,"sequence_number":68,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" It","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"QbzhNVDS9zHlA","output_index":0,"sequence_number":69,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" makes","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"oYEBCcItql","output_index":0,"sequence_number":70,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" sense","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Okrg3EHj8A","output_index":0,"sequence_number":71,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"aZX16Z6GS0zMJ","output_index":0,"sequence_number":72,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" encourage","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"JBgFkY","output_index":0,"sequence_number":73,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" the","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"9UuLZx2pnpBu","output_index":0,"sequence_number":74,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" user","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"eTWVI44ZKwQ","output_index":0,"sequence_number":75,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" to","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"hACSQl8Hnd9f0","output_index":0,"sequence_number":76,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" stay","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"KBnvHHjTsrp","output_index":0,"sequence_number":77,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" hydrated","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"cELrmvH","output_index":0,"sequence_number":78,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" and","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"a81CcGzj7TQY","output_index":0,"sequence_number":79,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" take","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"7yhygG7GHbH","output_index":0,"sequence_number":80,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" necessary","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"GpT4nu","output_index":0,"sequence_number":81,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" precautions","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"aG1e","output_index":0,"sequence_number":82,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"h5boRJiZKKCBsqR","output_index":0,"sequence_number":83,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" I'll","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"ladns986sBS","output_index":0,"sequence_number":84,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" put","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"wBHD8vpF0BNr","output_index":0,"sequence_number":85,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" that","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"XH5GDxTgCFE","output_index":0,"sequence_number":86,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" all","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"hmrJj7fgn6V9","output_index":0,"sequence_number":87,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" together","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"6se5Ecv","output_index":0,"sequence_number":88,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" in","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"gIApz6XL9ZMzV","output_index":0,"sequence_number":89,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" a","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"pDWaFfb1sU9SRD","output_index":0,"sequence_number":90,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" clear","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"wuDCVgf2Ye","output_index":0,"sequence_number":91,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":" response","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"wpQJjMZ","output_index":0,"sequence_number":92,"summary_index":0} - - event: response.reasoning_summary_text.delta - data: {"type":"response.reasoning_summary_text.delta","delta":".","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","obfuscation":"Ril5sLhZf7RjqWl","output_index":0,"sequence_number":93,"summary_index":0} - - event: response.reasoning_summary_text.done - data: {"type":"response.reasoning_summary_text.done","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","output_index":0,"sequence_number":94,"summary_index":0,"text":"**Summarizing Florence's weather**\n\nThe user asked about the weather in Florence, Italy, and I got a return of 40°C. This suggests it's blazing hot! Even though the information seems limited, I’ll interpret that as the current temperature. I’ll frame my response like: “It’s currently 40°C in Florence, Italy, which is extremely hot.” It makes sense to encourage the user to stay hydrated and take necessary precautions. I'll put that all together in a clear response."} - - event: response.reasoning_summary_part.done - data: {"type":"response.reasoning_summary_part.done","item_id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","output_index":0,"part":{"type":"summary_text","text":"**Summarizing Florence's weather**\n\nThe user asked about the weather in Florence, Italy, and I got a return of 40°C. This suggests it's blazing hot! Even though the information seems limited, I’ll interpret that as the current temperature. I’ll frame my response like: “It’s currently 40°C in Florence, Italy, which is extremely hot.” It makes sense to encourage the user to stay hydrated and take necessary precautions. I'll put that all together in a clear response."},"sequence_number":95,"summary_index":0} - - event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJqdCAWGIm0robYDjIivYwZEwlJYdaIBdSG42-xNVbdj-TIFXS3me2yt5l8j3i49VlyG7_OmEPtOAgn7SMBE4jh4vnf4u2eW56yv7b-cxTeEeR2xxS0thoz8spdZk17iBZSzyEulk0KpDRoJ-DrmOxE1IjNfc1YBiFN_FdNQOzOsEeisoKQQl6AlK8F2DA_UhRKGqEzz5Rnt8OWrf2zd28jLPVBTvmLroyia6dHFUigZnggEiBcmzuAiaHCj2sw2kQ3FTtClFNMk3u1wENcF0S2NWMB8S4Hz_ITA_WtylRrJA88x65AZUAqkth3OiL1YhPy584ymFvOLfAZxBdrrirju9S4wLz9_GB5MIZC_3TLgOsu4-wa6S3pUfdycMBsjprANzZikvYdiECCz9Pxz1f4QBPR_suRdXkcW1ggb7gww0IsVCGxnXViLIX7DvPgTU5FkRPSrX0ehYwypiAwgVQUdX0p3oh0zGAuJ1EU0JNkJejJy7VFUU7qQeEh3Ca0OXJY-xxjQAEU1omn4gQ2miru6ZsaO3kyOexpNRe4M0JzNajAA52XNSZzhtuKeJaM6GoXNEIgP0AVgfTqIRq3qn_AIQkllYAcMR-MIyyZsOi_0stLssFWkaluG99JVa18KG4UUz_KoWRKESZPUusU4-_QnWOz3b3jPruPcgGkV11Px_e0-uLdNmdxNsYyfa3b1MlR-o_kCHIURWAwqLHYhiRqHcfMr0rbeRMlG7Bgz5zENHE1_rKjytEuv9DU7echDTqLpaa4zR-EPsybI0zcVt2tH7n4gPGlh8sCfyPAzznmMb3BS8yCRek1lEfStWxHHQ7jmE9Kqb-w4jQeo14rGnB-lTFCEDXS3rS5ejX7fGCkzyKi06-iXb7IjLd7iwQdfy8hbQ9eXOJ4peKKUAoY6Lw8wfufa_AXw5NIOKferJF2esqMzvQj7_49JSWaE2AYEjGTLcPAarRcGxcyCRS3Rvs6NWmZVh80al3mNpsZCHwqmErGpJ7nU4fqhjNtAZSvmCP6BtOYaHN7Bp_xho4i8aQE_rd2bMM9DNne82rftuA5VwHIIEePjLeXLTohPQc6H7UdvcoJdh57mBJl69Rzr5AaHKDVIo0isYxoSVWCD32zN0-l1ZWZiu15G-8h5ZSfCQGeOrOmhaSTE_IhKTnCJqeHX2Q_KwDLFz-kCaB8DiNEhs5KvTrnJWOXg73N8XD1PB0cBaT82VaY8ueB7fBqZUBoA7MF4Mf5Bc1Qi8TmnpTnghd433sDI0-N5NN7KDeEdtJDbbS9qi7jAAtoxaDQyy907v3RN3DlJiBJljAMD3Ehe-qCjvacp96KpSTAR-cY7gU0bM0k-4l14xKc4uAIf76Srouc8F9uOKuTEgJh_ShxXxbSCULLA1pBAgCWBM-TpUsH-iGDTJsRaJfknxfArKPJnidAUYv1x9_ittvOd2AMrKpvjLRm3njfg5dPJmbN1p6LGAKywjnZcc6udHpAiYOkNIAueFlh3ZZOZjAvhJvR7d_TJ8Rs8ENcM3qTjc0ksMv9r0_m86ekjtZ0gSKN8Z-vptlCTIW5BM5vsmfgN2hk4n3n4USKW3zKqwMr7S97lWz4q0SkvvqFjisqC96H0EptlUwDPcPUapjjMBL-y2MjehKHCIe5ckkmCY2mFweYPI41","summary":[{"type":"summary_text","text":"**Summarizing Florence's weather**\n\nThe user asked about the weather in Florence, Italy, and I got a return of 40°C. This suggests it's blazing hot! Even though the information seems limited, I’ll interpret that as the current temperature. I’ll frame my response like: “It’s currently 40°C in Florence, Italy, which is extremely hot.” It makes sense to encourage the user to stay hydrated and take necessary precautions. I'll put that all together in a clear response."}]},"output_index":0,"sequence_number":96} - - event: response.output_item.added - data: {"type":"response.output_item.added","item":{"id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":1,"sequence_number":97} + data: {"type":"response.output_item.added","item":{"id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","type":"message","status":"in_progress","content":[],"role":"assistant"},"output_index":0,"sequence_number":2} event: response.content_part.added - data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":98} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"The","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"TW4qEdDqwwdnO","output_index":1,"sequence_number":99} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" current","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"97GARpD2","output_index":1,"sequence_number":100} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" temperature","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"xAXI","output_index":1,"sequence_number":101} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"YZ6Wb017oSGJh","output_index":1,"sequence_number":102} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Florence","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"ZZpvJ5K","output_index":1,"sequence_number":103} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"aOGOC4r5XNDaUGd","output_index":1,"sequence_number":104} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Italy","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"7ngqGYrJCN","output_index":1,"sequence_number":105} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" is","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"H1PkmS36eYrVJ","output_index":1,"sequence_number":106} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"pqCIhjeeHL7ndwv","output_index":1,"sequence_number":107} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"40","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"J9OP5CBSY0Eq4M","output_index":1,"sequence_number":108} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"Jg4jVsglHkkq2zV","output_index":1,"sequence_number":109} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"°C","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"kccB6np7U9eERr","output_index":1,"sequence_number":110} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" —","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"1QMtgb6wuqYY33","output_index":1,"sequence_number":111} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" it","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"FeG2AB3nyL8ZW","output_index":1,"sequence_number":112} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"’s","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"mSTzcBBcaxJVUM","output_index":1,"sequence_number":113} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" very","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"3qXHqWtA5JH","output_index":1,"sequence_number":114} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" hot","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"gfBCjms0KKh4","output_index":1,"sequence_number":115} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":".","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"u3c8N5cwTbShfbf","output_index":1,"sequence_number":116} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" If","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"MUcc5GzKgIB1J","output_index":1,"sequence_number":117} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" you","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"5kcom7JpzJN5","output_index":1,"sequence_number":118} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"’re","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"7r2ByWMRRRfbb","output_index":1,"sequence_number":119} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" heading","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"tOPH0uv5","output_index":1,"sequence_number":120} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" outdoors","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"fS2cMTM","output_index":1,"sequence_number":121} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"UlY8I7AZP0iQziQ","output_index":1,"sequence_number":122} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" make","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"ihOm2se59Ii","output_index":1,"sequence_number":123} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" sure","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"79opDlsgQkg","output_index":1,"sequence_number":124} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" to","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"SvZ4K5tH6QxhL","output_index":1,"sequence_number":125} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":":\n\n","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"aueZ0wLqbH93k","output_index":1,"sequence_number":126} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"•","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"CzYaArhnTR2zMdd","output_index":1,"sequence_number":127} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Stay","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"qN1UwqENxqD","output_index":1,"sequence_number":128} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" hydrated","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"oJz76Zw","output_index":1,"sequence_number":129} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" \n","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"H6ow3ieyv6T83","output_index":1,"sequence_number":130} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"•","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"y9YC7AEXM2Qtayh","output_index":1,"sequence_number":131} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Wear","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"COZGuTLj1h1","output_index":1,"sequence_number":132} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" light","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"aEMhDNMYkg","output_index":1,"sequence_number":133} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"GKVLPcaeL61vtGH","output_index":1,"sequence_number":134} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" breathable","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"XnptE","output_index":1,"sequence_number":135} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" clothing","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"ZSPSfBQ","output_index":1,"sequence_number":136} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" \n","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"1hbMUlGcSTGY2","output_index":1,"sequence_number":137} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"•","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"Tcqt2LKOFiBnwhj","output_index":1,"sequence_number":138} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Avoid","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"A74wDgCBWm","output_index":1,"sequence_number":139} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" extended","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"35NVEJ5","output_index":1,"sequence_number":140} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" sun","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"XKfxffKU8Eip","output_index":1,"sequence_number":141} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" exposure","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"eNxKluu","output_index":1,"sequence_number":142} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" during","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"qjp9zILSQ","output_index":1,"sequence_number":143} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" peak","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"YbBW5uWvj2L","output_index":1,"sequence_number":144} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" afternoon","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"XOs8SD","output_index":1,"sequence_number":145} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" hours","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"HTqx5jz4wq","output_index":1,"sequence_number":146} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" \n","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"kCcok7BF5lqRs","output_index":1,"sequence_number":147} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"•","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"lJtKim6QXAr1Olp","output_index":1,"sequence_number":148} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" Take","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"qSLuPE80QZk","output_index":1,"sequence_number":149} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" breaks","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"2OOrbrP2j","output_index":1,"sequence_number":150} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"wCmJiCUjMJCrh","output_index":1,"sequence_number":151} - - event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" air","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"rbu5peyhMMSF","output_index":1,"sequence_number":152} + data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":3} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"-","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"4fFoVCWERhbuspx","output_index":1,"sequence_number":153} + data: {"type":"response.output_text.delta","content_index":0,"delta":"The","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"jJU65ktgTPNAH","output_index":0,"sequence_number":4} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"condition","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"VsJRaSg","output_index":1,"sequence_number":154} + data: {"type":"response.output_text.delta","content_index":0,"delta":" current","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"YqO0FugF","output_index":0,"sequence_number":5} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"ed","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"AfHMUyDUA42iSL","output_index":1,"sequence_number":155} + data: {"type":"response.output_text.delta","content_index":0,"delta":" temperature","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"5TlP","output_index":0,"sequence_number":6} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" or","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"xfH0V6mvXOGe5","output_index":1,"sequence_number":156} + data: {"type":"response.output_text.delta","content_index":0,"delta":" in","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"KEXuhmxT5eAA8","output_index":0,"sequence_number":7} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" shaded","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"jQQ41kQ6P","output_index":1,"sequence_number":157} + data: {"type":"response.output_text.delta","content_index":0,"delta":" Florence","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"TbnCMm9","output_index":0,"sequence_number":8} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" areas","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"NaU8bu1Y3Q","output_index":1,"sequence_number":158} + data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"2IrD5FnVpQPAUVF","output_index":0,"sequence_number":9} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" \n\n","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"Wj21XCRy8FmE","output_index":1,"sequence_number":159} + data: {"type":"response.output_text.delta","content_index":0,"delta":" Italy","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"7XLpJ5KAK8","output_index":0,"sequence_number":10} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"Stay","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"NzxVwrtg8Tue","output_index":1,"sequence_number":160} + data: {"type":"response.output_text.delta","content_index":0,"delta":" is","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"GGiMKl9gpFu4a","output_index":0,"sequence_number":11} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" cool","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"dDbBKzMVt3F","output_index":1,"sequence_number":161} + data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"7AUECDQVDqGmaip","output_index":0,"sequence_number":12} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" and","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"NibSaJhK7rjQ","output_index":1,"sequence_number":162} + data: {"type":"response.output_text.delta","content_index":0,"delta":"40","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"ts0vEXmMNE880t","output_index":0,"sequence_number":13} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":" safe","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"ZRs5TsIgc70","output_index":1,"sequence_number":163} + data: {"type":"response.output_text.delta","content_index":0,"delta":"°C","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"i5UfGWMj4yJCaT","output_index":0,"sequence_number":14} event: response.output_text.delta - data: {"type":"response.output_text.delta","content_index":0,"delta":"!","item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"obfuscation":"eyVPGAZybddHkQ5","output_index":1,"sequence_number":164} + data: {"type":"response.output_text.delta","content_index":0,"delta":".","item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"obfuscation":"JegC2ymO26L3NHL","output_index":0,"sequence_number":15} event: response.output_text.done - data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","logprobs":[],"output_index":1,"sequence_number":165,"text":"The current temperature in Florence, Italy is 40 °C — it’s very hot. If you’re heading outdoors, make sure to:\n\n• Stay hydrated \n• Wear light, breathable clothing \n• Avoid extended sun exposure during peak afternoon hours \n• Take breaks in air-conditioned or shaded areas \n\nStay cool and safe!"} + data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","logprobs":[],"output_index":0,"sequence_number":16,"text":"The current temperature in Florence, Italy is 40°C."} event: response.content_part.done - data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","output_index":1,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40 °C — it’s very hot. If you’re heading outdoors, make sure to:\n\n• Stay hydrated \n• Wear light, breathable clothing \n• Avoid extended sun exposure during peak afternoon hours \n• Take breaks in air-conditioned or shaded areas \n\nStay cool and safe!"},"sequence_number":166} + data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40°C."},"sequence_number":17} event: response.output_item.done - data: {"type":"response.output_item.done","item":{"id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40 °C — it’s very hot. If you’re heading outdoors, make sure to:\n\n• Stay hydrated \n• Wear light, breathable clothing \n• Avoid extended sun exposure during peak afternoon hours \n• Take breaks in air-conditioned or shaded areas \n\nStay cool and safe!"}],"role":"assistant"},"output_index":1,"sequence_number":167} + data: {"type":"response.output_item.done","item":{"id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40°C."}],"role":"assistant"},"output_index":0,"sequence_number":18} event: response.completed - data: {"type":"response.completed","response":{"id":"resp_027ec5e155f266ec016a3c1266a9048191bfb7df1a95ba9ad7","object":"response","created_at":1782321766,"status":"completed","background":false,"completed_at":1782321771,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[{"id":"rs_027ec5e155f266ec016a3c12675f308191aa4cbc320785b520","type":"reasoning","content":[],"encrypted_content":"gAAAAABqPBJrrojORnC9bACcd8uOOaAEpXfB0pmxd9ECaeJXExO-J_SHGk2IUfTRMrcauXSZk4U4CXvc0Fk7xx-X7GBPxZIWeFXAZ2wknDJvGBlryeLoz-qOAkMGtXXHQTe5SXTMJ33J1b5s8GWnt2kd1cXAy0nkUvchkaBNEowE3cCYX-V2-IGfJYgMyWQXzMYgpy64Mdi26Ktvu_9MtQSGXKdeRrEh2p9LvDW0YyD4ay7pJfwAbxnt-IVfR4t9sHyDv5t84vUhBNR-v2Tnmb5hQjBEpCOl-WeCexBTfYjI7saqO07HaJJfXkaTt1H13aaiPuIfhRdWMB5AiyolElJOAcUkN5DbHyXaw5AIrtIGJXhP_tOPsGZ8M096ZF1ns1efo2qVXo9mcxhsNV68NV2SzVJBLRnO7aZ8Ps73hnSUPORCdubnpvp6WRaT16fcozpdKqiuEu5W5XG70ZEhFEY2qKnqOF4aJEiK4coM76eIW4WOKI1Xl8NQYv8x_wFpgvLStdRcmlfjLxtfdhK9DBv5IhwVHZ4D8CgiqYdiv3XeSgR0Iv2pLfBs4zVzJ6JDGw199dw6yReczi81OP14a0xiP6QXfzlL_nRXTRZu_VFmqa9YWpvFYY1BvcCYPaRX5gYXHCPU4-1D60ETQQJERCoQ5emjr5BRb4tZRjiW7-qiVVGNEq7Zmly5MYMdQuW-dOwHqfhs4bM07DB4LxQU2GIPNQnaSrN8eGKUwLfBnA9NQ7qB-rJWIzvkzcwCLVQZ_yN38kQOeloHNahKwNSy0mG16APlnkpevyVE45KlMAD6dJ6gdLWhjNn1VMuMOC68iSICqT6CZtpLKckwQGhcPk3fWHf0GfNr-QcERVytS8g_D179agJ-E-Z4yp8cyLyQc-kbvcpQpN0vGYPOmOuBOr9tIZxo_PUhJmZ-xLBABC-9dO4hjfk93XmnXUkpytV7RY11XXlnZ0aznzLKFA9bJodb-IRNFWccPruPffE1nn4SSOk4rjHnEMVRBxGtnoMwemZmFS5SQikraDa63u_ZwmYwgjyE0R0i8TNYGbxzX0kHpWOdhuRvptjM-rPMvbQxXhZ5Ekzr3Usv4iV7mnOiIhb7exsc_UOeLWbfC7L6LlD8RRIOR8spjd8A2NpQmLedjF6LLE4V6KRet8GdVFSf2qIlq4WJVtsXK4Unkj4FrMPBJ-98PU4frJTW3oFULL6qOCpCi4KpLmz4fis7t5BH-gEqS-zat_QVGOpzvFlgQCHBAQTCtaeelIqo4cN2YBrKPeuRNd1zRjl_iNtMvvxy4s5UGM-_-9MRoYltImHiQvtG90pHVBU0oDHNMF8NBUA1ToFVqTrsSh2W4lRCXvVi5todiCqNDbTQrLA4iJWFeZ_E--l8kEZ5mWtCPz02ks0nZFlJOY5Wj7jyAU8CHZ8yyUuQ5obyhiAtsptZBfCCYdqd7Sz2dj_MAVZUHIZ1M_UUAo9Y4u3GvphzWtUzXHQwHTj2fUTPW5G7RKIuruOk0pZ9jUvfDIxidt6CKxFcMKYik-rnmv_wHpzdAmZEAL23g_zupdpIaXcJx8ZqVBoxi1wy1DYJjZDZZlk2bdN7aNJ45H2tjKA2FRNximRDzNIKxEzXm6M-80eiqeglcbulPd3f4J3UfTy-5wKEjXcY16Qpxb1I8tKtRsIE","summary":[{"type":"summary_text","text":"**Summarizing Florence's weather**\n\nThe user asked about the weather in Florence, Italy, and I got a return of 40°C. This suggests it's blazing hot! Even though the information seems limited, I’ll interpret that as the current temperature. I’ll frame my response like: “It’s currently 40°C in Florence, Italy, which is extremely hot.” It makes sense to encourage the user to stay hydrated and take necessary precautions. I'll put that all together in a clear response."}]},{"id":"msg_027ec5e155f266ec016a3c126ae79c819192cac59929b168ad","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40 °C — it’s very hot. If you’re heading outdoors, make sure to:\n\n• Stay hydrated \n• Wear light, breathable clothing \n• Avoid extended sun exposure during peak afternoon hours \n• Take breaks in air-conditioned or shaded areas \n\nStay cool and safe!"}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":89,"input_tokens_details":{"cached_tokens":0},"output_tokens":196,"output_tokens_details":{"reasoning_tokens":64},"total_tokens":285},"user":null,"metadata":{}},"sequence_number":168} + data: {"type":"response.completed","response":{"id":"resp_013cd160f2c0e6d4016ac36069c38087d0b311e7061bc56886","object":"response","created_at":1791189097,"status":"completed","access_programs":null,"background":false,"completed_at":1791189098,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"o4-mini-2025-04-16","moderation":null,"output":[{"id":"msg_013cd160f2c0e6d4016ac3606a496487d08e82973d57e3c98b","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"The current temperature in Florence, Italy is 40°C."}],"role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"context":"current_turn","effort":"high","mode":"standard","summary":"detailed"},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[{"type":"function","description":"Get weather information for a location","name":"weather","output_schema":null,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":163,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":16,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":179},"user":null,"metadata":{}},"sequence_number":19} headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 299.982291ms + duration: 916.9805ms diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml index 39a8d082e..4d25c4ca5 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -26,15 +26,16 @@ interactions: uncompressed: true body: |- { - "id": "resp_06b7826bd379fde8016a3c125cfdb481a39b33c8c4426e10d1", + "id": "resp_0c0dee347591e03d016ac360601ee087d09ecd5fcdaf5cb413", "object": "response", - "created_at": 1782321757, + "created_at": 1791189088, "status": "completed", + "access_programs": null, "background": false, "billing": { "payer": "developer" }, - "completed_at": 1782321758, + "completed_at": 1791189090, "error": null, "frequency_penalty": 0.0, "incomplete_details": null, @@ -45,18 +46,18 @@ interactions: "moderation": null, "output": [ { - "id": "rs_06b7826bd379fde8016a3c125dce3081a39b07f4dc0689501e", + "id": "rs_0c0dee347591e03d016ac36060fbb087d0bfcc088006bd3366", "type": "reasoning", "content": [], - "encrypted_content": "gAAAAABqPBJeFhsPCjOVtLmFf9nqhrg3Q1346dfxKYy3Vws8VXbV3OGvpwoWg4Wshy_IoQ8jPB1S15BsaAE_veYu-XIN39owL-gxMBOEOgD5StVx9sDxgIEuWJVK8QJM2HgzTWZrAb-ZO_Yo3_4pY4MNaaSgAHU3IWEBw-xIm-iIJgOd6c57UO9OnTQUORRBKwpTHLhoni8sahWj_gsOpvBE4-dlYuqZuRxyd7yp7-PdA3iCA3cO7iU2eLuiA38FhclKvrBdAllD5SqxMMFv1BMT1TqeLJwemm9rz6J4O6rEYqi6zEpXTbDRV0d5sbFLZDm4nluZ7yjyk0znAf4oNcu3c3g19x0vYu1DAfWVTCVvhG5gXdmTaWuSabtWl8UvQ7aXKefX9QUdZxTLIFF-4kgJBaYHqZQLc3tEX3-4aZRG49BxikwU6LNRdzVgupWJqRnNfL82d2lJulBo4HaaZEIE2nyVmv6aGulRXEmpW4atQjRPj435LumsjOmscLE4WSl5Lhri8bGXKw5yb6FOCWFingPQxFqZbTLWL6wAqXklMlrxISKkkSH7bBOccP4SZizhbSgWxqWYSTk3AQTRbLSPmdjIIjVEqI-usaRqcjeQnKeuTmqdcmyX8i4IKeeD2PYGxda4GzduZwFJ9l19RBaT-zfXjoYmiba79AOsivYysqIKXJmqJDKj2hhir0-gQiYq0PYHJUkV8JUfbVOtn9GTqQ_4ZnbqdBgsDbN78v4zSsf0n27AtqY7rW8Buqz5aZKbI3yKqN_v9ytKP--lcIzehWcGkz_2isWj0E3eTejkky49ZqopuDOnv0nQDjLCgs-ghNRnIhz8XPCvBI_M37Old15UGGbTyzpB47wBTSLSjUy_OHroGmYTAltpeVUvjrjey6waUrI32Tq04wTiNjO1cJ6i3CR6un6Amza2WIgO0Du9elz0lanohG2WAmbVSftJIiZ1VMbJGjWyIHo3yciqlEonIWKaGzyu42vS6VnfqdaS2npoTN3TrvcTEfo7ljYCC474mo8-tYr14UUgl6wW4tBA5Ixc7psQCaAB0XQfH7tEDtd6OKvFD6I8BQXXQFxIwiZXpn12bq4c3aVxF3fSHXuo9_vTb2FzpoCF3-GcD1OOnHU_U2VgxwN9mOxEmcHvXtkZZT7G5LK9BTWZpOb_vi7rUAGfD8TDW5td6dSqAiSIhQi0_ijyzW5HO5dWDCBQbd_X2P8Gb_Z_3zMmYUyY2utEoX0NjWu058esLQm2UAhoHap9qgefh1GuNPT55qRh8odkJ9SMgkgttHjhMjGkPKDhhq5zndVszAYtjY_NJlYEoNLCtbm6u8zOyq8qUQJkc2DoftoNyhzFX0XPwjv_OQ8dS524PA==", + "encrypted_content": "gAAAAABqw2BiIrvd32OVqG8AfstMhkRgdudx2ZrYK4-8bbxbMXzjUWl66g22xPFhPLL6hcH3OjxXCa5HrO4yjixJJjyGACj9cPbVd6A_fBitaiWtPqJgdZICwIcgbhv2JDkeMCEEV4LhgFTz9iI6iuYxkYn0A5ENuLF450ZIcYfQLxsV5x7o7Plh9Z1AP8-d9On5byT7KleHCMAgUosomZcevygy3cS3OO1r6j5j2wrQRqiLqe_LDYNrkF80b0_oH1Hfo7W3noXXPBFoP2Y9pbOlwYYOZcWJP85he8tVKGmPvvqx-QMi6ASuIJZ1-YOLJFWbrwGd4v18AlK2zIjHG84Q1K99stHUbCNUChSYxzI4lZK4GIti8myT_UQfgEOZcg1hcIHsVVjqqbSi64Wo2AGV8oN4bHrw7yZEDGjscWoCqIm1IPTfTbLqvb2hl1sQ3YGJfDh4Vk1UxW64NDv6Pn8ONLdF0jTdYp7nkdZ4tSSDjDt-NEK6Za8e3xOhZYtpvdv-Bp2qs8UxlYKYHl1RRWeC9EyWVMjYJ219eCGFr66W-HGLEmniJtjj0lAZfVlLjIPspf6nmLCd4q_zW-XM28eV9ODbJ4GgolUCn6uU99NxO_HZrdivu6rYSDpxc3D5SOco9gBYJJYlNr7sLcXSxtNllBO6pfi1EZN6QkF4YYtBkQa3C6f8G6CHJksjvXdhB_eL0BYP762R0d7HQcxGqhdjmfs7xp_OEVFki9SxJwRH9I2uCHufHqTLy26b7kXycz-i1vVKGCBgHJaGnF9XT6rDj7LKxvR-detZxq_3k32BWSoQeiQiueS-2Ope5qHhY5wuqcqaIQ_wVfrMgfFBSPvLluDUQqxMMyAb2-IQw2pbBIIgbUxAFF4mtsvAfQeQDyzwBffznELgFUypz--DliaNkRED7jzDrboIRWOZiicUWUl4wWsxYpuQqwKINAYIhbPYVDrEKxh8NxT86nxUCmZ_4t4dvSG0K5iWGeMf0O28_rENDMJmIE40xYnkTwRqbJennWoL8oVh8cNXbW_Atw3K-pOub4lWkUgwBX_YH4_08u6tN1aQj1hXMZYbUio24-lLj9Vnv-7cHLMBh-aVXJW9Cs-oEcZX5-bv_4ORMuAFictTAGRROKloASEyaJgHhxrXGMOZSrtmZHzdm0ct4k043-pH-dnOkjBQiusGvZ-h8b9aHaskEs_FXSh80q13TCHa5qyI0oaehKu9P9ZPBN694FOjkVGl55Yw6Ex8bRsq8Uohr2S-KGVUYxJsBizQ565blNi59mSrLuMrVVf2httfoOLhR2lKkqVAIUZDoNpL0n6N2inUP7CYXNkHWd6iRbGQZC30U8U0Q1Ddk7_n6WmFRiGHdV9iwP_i1_AWHqpdAucQptfv5BHeMHwXqIDjvAHvfHl-oV-BIr3_5UQHpe5IvhQ12rEXZ02N_fG6__uEiugvwED_3_mQEwy5L4g3cw53cmactZutj-pny5ZkcOJcTnsPot8lwdfhZTFha0Y7gesb5rE6cOyeXrFOWlWKkgCe1kbmelrzhC7-luBc0yWXsv6Bc5NDvIjnYLOnPUKexM6j0KvrlE9S_C_JOcCE7xIVyUgZyxZOCHOdnT1RQbfExCYc50X7J5fR-dbt6MCm0z9no5ES_5bxR9pUICVgU0T6BaEvyXezMdQcY5ZoRixGbXRQQXuhCDha1YWi07CvC7BCMtGlNoJ93W9O0wtVF2TxH8FPvv5X6QMFf3VqhOtkIwQrmwACh1sTQXBUolcVZq__-LzRqTvO8FhYFQWmT0ZCntanxiefc1-elQWINPgUEZ0H_FukwgFb_3tHm_PYmZ4wR1OdpEGbG8vpiVeR1GKVaCfCSzh6aUmLgmZmZDHWsD4J52_Q_e8sgB5jfIkP9WLA3ilWie2oIBAqeDd2EDDhZxv3j1W4W8y5x5mwGSuTuWg3rQA8IKjlcLXjI62i9bcJL_klvLswFvY7apUOaJJQXEdSdwj8QQXPntKYqh9uCiooyPhEoSS6_YTU6tWMVNLKB8uadQReiw5oX4Yqr-eIbsMXlmvbatWfffin9S-IoYDux-ckYiD-6KeEX06mDBapKU2L047t867vbRDpHKOscjwmIByT", "summary": [] }, { - "id": "fc_06b7826bd379fde8016a3c125ec1d881a385bb93f77693343d", + "id": "fc_0c0dee347591e03d016ac360621c4c87d0b2b5c6f25530ef00", "type": "function_call", "status": "completed", "arguments": "{\"location\":\"Florence, Italy\"}", - "call_id": "call_eoYbwZiQUHtJHV4AFsy3T5iq", + "call_id": "call_yQalEz6aAjTj7MHqmKJRcdA3", "name": "weather" } ], @@ -68,6 +69,7 @@ interactions: "reasoning": { "context": "current_turn", "effort": "high", + "mode": "standard", "summary": "detailed" }, "safety_identifier": null, @@ -81,11 +83,30 @@ interactions: "verbosity": "medium" }, "tool_choice": "auto", + "tool_usage": { + "image_gen": { + "input_tokens": 0, + "input_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "output_tokens": 0, + "output_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "total_tokens": 0 + }, + "web_search": { + "num_requests": 0 + } + }, "tools": [ { "type": "function", "description": "Get weather information for a location", "name": "weather", + "output_schema": null, "parameters": { "properties": { "location": { @@ -107,13 +128,14 @@ interactions: "usage": { "input_tokens": 60, "input_tokens_details": { + "cache_write_tokens": 0, "cached_tokens": 0 }, - "output_tokens": 93, + "output_tokens": 173, "output_tokens_details": { - "reasoning_tokens": 64 + "reasoning_tokens": 128 }, - "total_tokens": 153 + "total_tokens": 233 }, "user": null, "metadata": {} @@ -123,22 +145,22 @@ interactions: - application/json status: 200 OK code: 200 - duration: 2.083992667s + duration: 2.32640775s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 776 + content_length: 3079 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_eoYbwZiQUHtJHV4AFsy3T5iq","name":"weather","type":"function_call"},{"call_id":"call_eoYbwZiQUHtJHV4AFsy3T5iq","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_0c0dee347591e03d016ac36060fbb087d0bfcc088006bd3366","summary":[],"encrypted_content":"gAAAAABqw2BiIrvd32OVqG8AfstMhkRgdudx2ZrYK4-8bbxbMXzjUWl66g22xPFhPLL6hcH3OjxXCa5HrO4yjixJJjyGACj9cPbVd6A_fBitaiWtPqJgdZICwIcgbhv2JDkeMCEEV4LhgFTz9iI6iuYxkYn0A5ENuLF450ZIcYfQLxsV5x7o7Plh9Z1AP8-d9On5byT7KleHCMAgUosomZcevygy3cS3OO1r6j5j2wrQRqiLqe_LDYNrkF80b0_oH1Hfo7W3noXXPBFoP2Y9pbOlwYYOZcWJP85he8tVKGmPvvqx-QMi6ASuIJZ1-YOLJFWbrwGd4v18AlK2zIjHG84Q1K99stHUbCNUChSYxzI4lZK4GIti8myT_UQfgEOZcg1hcIHsVVjqqbSi64Wo2AGV8oN4bHrw7yZEDGjscWoCqIm1IPTfTbLqvb2hl1sQ3YGJfDh4Vk1UxW64NDv6Pn8ONLdF0jTdYp7nkdZ4tSSDjDt-NEK6Za8e3xOhZYtpvdv-Bp2qs8UxlYKYHl1RRWeC9EyWVMjYJ219eCGFr66W-HGLEmniJtjj0lAZfVlLjIPspf6nmLCd4q_zW-XM28eV9ODbJ4GgolUCn6uU99NxO_HZrdivu6rYSDpxc3D5SOco9gBYJJYlNr7sLcXSxtNllBO6pfi1EZN6QkF4YYtBkQa3C6f8G6CHJksjvXdhB_eL0BYP762R0d7HQcxGqhdjmfs7xp_OEVFki9SxJwRH9I2uCHufHqTLy26b7kXycz-i1vVKGCBgHJaGnF9XT6rDj7LKxvR-detZxq_3k32BWSoQeiQiueS-2Ope5qHhY5wuqcqaIQ_wVfrMgfFBSPvLluDUQqxMMyAb2-IQw2pbBIIgbUxAFF4mtsvAfQeQDyzwBffznELgFUypz--DliaNkRED7jzDrboIRWOZiicUWUl4wWsxYpuQqwKINAYIhbPYVDrEKxh8NxT86nxUCmZ_4t4dvSG0K5iWGeMf0O28_rENDMJmIE40xYnkTwRqbJennWoL8oVh8cNXbW_Atw3K-pOub4lWkUgwBX_YH4_08u6tN1aQj1hXMZYbUio24-lLj9Vnv-7cHLMBh-aVXJW9Cs-oEcZX5-bv_4ORMuAFictTAGRROKloASEyaJgHhxrXGMOZSrtmZHzdm0ct4k043-pH-dnOkjBQiusGvZ-h8b9aHaskEs_FXSh80q13TCHa5qyI0oaehKu9P9ZPBN694FOjkVGl55Yw6Ex8bRsq8Uohr2S-KGVUYxJsBizQ565blNi59mSrLuMrVVf2httfoOLhR2lKkqVAIUZDoNpL0n6N2inUP7CYXNkHWd6iRbGQZC30U8U0Q1Ddk7_n6WmFRiGHdV9iwP_i1_AWHqpdAucQptfv5BHeMHwXqIDjvAHvfHl-oV-BIr3_5UQHpe5IvhQ12rEXZ02N_fG6__uEiugvwED_3_mQEwy5L4g3cw53cmactZutj-pny5ZkcOJcTnsPot8lwdfhZTFha0Y7gesb5rE6cOyeXrFOWlWKkgCe1kbmelrzhC7-luBc0yWXsv6Bc5NDvIjnYLOnPUKexM6j0KvrlE9S_C_JOcCE7xIVyUgZyxZOCHOdnT1RQbfExCYc50X7J5fR-dbt6MCm0z9no5ES_5bxR9pUICVgU0T6BaEvyXezMdQcY5ZoRixGbXRQQXuhCDha1YWi07CvC7BCMtGlNoJ93W9O0wtVF2TxH8FPvv5X6QMFf3VqhOtkIwQrmwACh1sTQXBUolcVZq__-LzRqTvO8FhYFQWmT0ZCntanxiefc1-elQWINPgUEZ0H_FukwgFb_3tHm_PYmZ4wR1OdpEGbG8vpiVeR1GKVaCfCSzh6aUmLgmZmZDHWsD4J52_Q_e8sgB5jfIkP9WLA3ilWie2oIBAqeDd2EDDhZxv3j1W4W8y5x5mwGSuTuWg3rQA8IKjlcLXjI62i9bcJL_klvLswFvY7apUOaJJQXEdSdwj8QQXPntKYqh9uCiooyPhEoSS6_YTU6tWMVNLKB8uadQReiw5oX4Yqr-eIbsMXlmvbatWfffin9S-IoYDux-ckYiD-6KeEX06mDBapKU2L047t867vbRDpHKOscjwmIByT","type":"reasoning"},{"arguments":"{\"location\":\"Florence, Italy\"}","call_id":"call_yQalEz6aAjTj7MHqmKJRcdA3","name":"weather","type":"function_call","id":"fc_0c0dee347591e03d016ac360621c4c87d0b2b5c6f25530ef00"},{"output":"40 C","call_id":"call_yQalEz6aAjTj7MHqmKJRcdA3","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.33.1 (https://charm.land/fantasy) + - Charm-Fantasy/0.45.2 (https://charm.land/fantasy) url: https://api.openai.com/v1/responses method: POST response: @@ -149,15 +171,16 @@ interactions: uncompressed: true body: |- { - "id": "resp_086f159f77042e6f016a3c125f17c0819fbb8c6f121a7724de", + "id": "resp_0c0dee347591e03d016ac36062a26087d0a7b12863e7b78e76", "object": "response", - "created_at": 1782321759, + "created_at": 1791189090, "status": "completed", + "access_programs": null, "background": false, "billing": { "payer": "developer" }, - "completed_at": 1782321763, + "completed_at": 1791189095, "error": null, "frequency_penalty": 0.0, "incomplete_details": null, @@ -168,19 +191,14 @@ interactions: "moderation": null, "output": [ { - "id": "rs_086f159f77042e6f016a3c125f9628819faaac9bb3c4683854", + "id": "rs_0c0dee347591e03d016ac36065db2c87d09f85809cb9234600", "type": "reasoning", "content": [], - "encrypted_content": "gAAAAABqPBJjj8uFPiiTcWITHYoG0LPg5rA8hOck2bLawNDuPCW9Ggxa_ctupFxdSQHuEq-pN2Kijnfek4ITSsfkPdmUQdvsOrUwq6GLYTl3DlQ5QAebi_68PmwwdS3yrQ7ASqDdCx2WrzVz8J1XrwE9E1NIBnRwMpdbAXqKNYROcwsWrH2p0i-9r1CHo9d1miXyZKawVdfx9dgrVF0jhI_NkyCrFJyFEkQOb5K3fhpTeF0SIKRPR2p16rjp60NSXEcyLmUT4y6Do3M90qmtuXlTc80n57KOzVq40Bbk0wmGHVeKhKjymRrU5tJwdSXxBfwbtWKmRcj2_Zosg9veDakrPaWZwfpwTGCHcEAavLEkWYiIgdaUYww8XnzYTtjEzp1TIGtaxYaNHtHhb1TD2JvzsERz2aOULeSQQqVa7cv5SfZ9frFXfYELtgxSiJLcR6RPzoTmp3Aak-m8KiKSgtlDt29z4RyOs8_zTRcHa8FkCMdIoz-IW-dB80FeoCMBqUA_C4Jg4faCoTZIgWN8yb3tNTkjZnh2kg4hXgg963EIV_wCh1b2dy-8T3l59ntD0DQCcLUYptacCBpjHpH3l7aSsj3A8Qnl6lZPU8V9r-ywY81__3MQ8L5-5aK1Nvt9Z1cjLoeepi5qTR79veM-X4hTFqaeMQudQrSAYvLlDHq3uPmY9nZhYCW9DpvdTZyTxnKrCTg6puK6f9QBmxnC21SIUfFgdYkH9eX7IgvNpeRu0Lt80nVcnrrv6i1oMw2SI1hLwKiUZ2VkFHf3EWeJNVbCeKUMuQIIjYxYPa-w7rrk-Kq5qXlubCcmDa3lTV7kiusGcqsgr1wfcudTHsObOil_wM3WIlEnU-9ekiv1K191ITwVXSAdjM6I-U2-CB5uWB-fcIVPXAoqLI1kAAxIPRvlpAfA69yuUFlrJX9UxEK2eB7spsvDJ7ldGVqBKnlOzxcWba3l3bSWE5ktafktX_hNAIaBzKmVYDjxg28x2iIJJ7LnBVBe3JiMLyp-_2q7P07aOpT4dQtBZTo8VZsM2CIFQMA_31HMJokMigouzuUA6Q7cY4DTE7xHaTYv4T1SO6AzqbP05WlA2fqJ50dkgfAR_XHv1wlH8X4z8wRQdPVcfZ7OGFmbCQrG0TKyUGIhrwwDoX24gOFG69jUKkiw3ZcSs7ns1yhjStLvUT4xY-rCMp_5fuBArIJDMCaZkfXEELY_fb5a36pKtS_eQ8tmvT22FvGl7VLIIZF4FnQTumNeVCTy3V2iVAhYb36pDFrlGwLmTy5cXxC87wi35kAb5O2LZ5mXGPPHq8xw6YMuf3NIhjLfIOuHc6tOLLJMaJh1VG4xX9tEqFn8itcdNaMX_vZlSLqF9V6NpJWVQstnxy9yyoDdI0EgECD6o2BR51Y4nncI-36ezXuUGWL1eNv_xhJT-W61a11D9cnGaoLZBfnyaiyyQfe80SL6uLrDSWhnerzKDQ34o0-KxpUbqM0qAc3W3JOZ_SKz6I6DY_EZUjJj4RaI3CADqaperAz_jd69-FyJsenpPoyoaV4J5oPk-8AUJ3KJIulx0GQL5-EdKT_bqlG9xVADt2CFOrhZZmutD-7B8H02JFl3V5tcOAx5JfhntPR3Uf3Mne2UhgejN3VCqXRw7ggwqAT2AtOs6cZESjb4N0W6TrBeY0q5mCEfsSc__eDmuPBlQ3EGB7bcE3SD1bZi_JLFnTv2fUxSEhM1ihr7v_tKcRI1AjqqH3oYcBNMCCgWEpEQ_GJVz3CxZhSOg2ZwqCRmZbTZ2kdjl7S5741RIXGmfmscFsYddocTmPkcuWkWanoEf7INHoZy2Q-2cSEPA0jN9_v6rDf_qgm7ZLrXCZvpIaEkB9c1brJa35NfwKFOvP84E3Ptdwxk7Q4ZOjYOsuiP9Mgo__dlXfEOhmZjnCTeDE-0fHc6BXc-jgaVPHwPJOe7oQ==", - "summary": [ - { - "type": "summary_text", - "text": "**Summarizing weather in Florence**\n\nThe user asked about the weather in Florence, Italy, and the response shows it's currently 40\u00b0C, which is extremely hot. I should respond politely and informatively, suggesting they stay hydrated and avoid too much sun exposure. Though I only have the temperature, I can still mention it feels quite hot. So, my answer could be: \"The current temperature in Florence, Italy, is 40\u00b0C. That's very hot\u2014please stay hydrated and seek shade if you're going out!\"" - } - ] + "encrypted_content": "gAAAAABqw2BnCqcvQmBRikvvtzr01Y1GSbdpACjYHLgOUXBg0ZaMi2-baPtWbPDxeiy9pF_V9ucsUKA7qx4_W5UpCoosmwzmmC4bKr4AISCjTXQjQG0LfDY1u029bSYekG6ZLeZ12yZ2Ce7IByDveldWT7gQ_HDIYODnvJIhT797E9IWekL5Lg2C0RXjDQfL3TTy0RgHpuEaE8KyFqLUUM-ojHOoJDBg1Fr329tEHCbf5JuTdqDnABnjeUWmnXVm4AjFGJG3rfvhd5I1ylZ0gGthyvicUkLC1IpRgOh0CM7SM0gj7uc-3liPxnOcKWlj-mr53sPOesQSYFcN9ArH8cItYQR9stQf-wF83VrixscUFL6O_Pb20m5KSUb_bC01Ys7T_yCVSRAW74CxD7l1_fjP4I_a-kYpug6Zm_meJiKnw04nLMMFAu8JO81o0eCH9Oh-K7uueKrwHLhW4pI1ymdeaitwZYlevPnpabswRBqnEnU7JgRclLsmvqlYGkAeQTpsx1KKvjE9N8YID91b6fLOSY_8UodybX3IYV525GfxbhyOeLd_fPokKKaTb-PngFnfjs1MW8vKlB-2jlg-OecH2DRCHjHZ3PVBcy6xzN34pIkNZwMOhsMKtY8vDciTPEFs-ir5yjbzp2X68RE7hVbSBB_SS_hWDkmmCoxpZXkpI-XP48x5SjDYZaGGLpuwaxBpaHzRhDAc1oK3rATG_KEAMmMeIwsaKK4YWleUkLZHuD8v22Tw8_r5mPtBCqTS9jJq-b926znAYewyo1AtYfcx45VgyVg7FRSxboSVywAW-odoCHMSP5fM5tGO73P9tJsAU5ApnVLaoMX9qDy6JtIyYDfWC_e6iZsKn2n6Aold9Tai0XxurFdcfWI-52TaVSpIQiDk1izCAGswi2LHaAiQqiZj1efhaqBeGQc-e9vDs5VbrGUPaUu860KCcydwXZijj6MHLz2yxWO8ycBscubPy1CubG1-uKA5ubKkeS7vAvbnfIFSzogm4FywaLnN3YnrSl5Z-4Svl_OZnQk0wDkmIiVq0iEb2D8OvoMzKIAyDjGMo3Qz0wffcfUmoojRABFuP9kcS8y2qUzmFO6om5oytUvSVUH9QOHRxrRvW0u62LidYlXAXkRgqV5YSAmHxnZHWO8U-18pjRhtiWg-DwnOkBjX3qn4CzHK0NDQQj4NTnyCV5lxcl8l_R2StldHDZtcVIiMnqPjUuDkOH_S2RuG1cj4GjgITvH9F1YKcMHnY8wPliwxBHFKT1obJmEdcSX0xKUdm9_jC9a1XYZhtHYQ6zQjRKyfL_GYEJmTJp_hh8kYqDB82BVqb5aN1gTlZw5sUJMxQSgY8iG-qjCFgC9GBr6p31ckWuJ1iU_RGreMLElIH6a3zvs3HujU8UHqDND_w5gtFmA6G8s33zPWpG11xj58gHhJShAZbPp4tTVa1x535Ce6x6CJfkfZHXNjmWCASpV8Gap-cE3v6s-goteEBGUCtRIAxJeVJJmaVh62-mQbP6YyMr45tGEOQlsUGkcfaHeG_N4YDOI6MYF2jRatXPAtkGKfWSORNH3H9OWdWS17vfIAQQsgsPy-5vOasWdKHageYP3atT84qI25__tb57wS-2HiDJ7qWKucJLX-72bum7ujDfB7fgAhB_IA3fQqtD6IAC-CeDb-so1XwzVwnVXqbNyQHsWHL-ZaJY_TvH_9Z657dCq6B2ZfW9aGeD23swTO2pZJIfAc8O8EI4ekImR4pGVO0w0w7KHCO7eTMvu1cS3F_hkILINg4exJilrb6Kdk07CgXnqqlkYaRTO4JJ9uYv2vjXKhpRJj_T4NGlpaEXxeHNwYHMZrwUVOCwXZE7miwOhtpGCode2sqchM4Zdd6uLuVR8nJJvjsLDPDft6_6ibHXo=", + "summary": [] }, { - "id": "msg_086f159f77042e6f016a3c1263257c819f9bc983a8f9821429", + "id": "msg_0c0dee347591e03d016ac36067105887d0a53a629272cb3f3c", "type": "message", "status": "completed", "content": [ @@ -188,7 +206,7 @@ interactions: "type": "output_text", "annotations": [], "logprobs": [], - "text": "The current temperature in Florence, Italy, is 40 \u00b0C. That\u2019s quite hot\u2014be sure to stay hydrated, wear sunscreen, and take breaks in the shade if you\u2019re outside." + "text": "Currently in Florence, Italy, it\u2019s 40 \u00b0C. It\u2019s very hot\u2014stay hydrated and limit time outdoors during peak afternoon sun!" } ], "role": "assistant" @@ -202,6 +220,7 @@ interactions: "reasoning": { "context": "current_turn", "effort": "high", + "mode": "standard", "summary": "detailed" }, "safety_identifier": null, @@ -215,11 +234,30 @@ interactions: "verbosity": "medium" }, "tool_choice": "auto", + "tool_usage": { + "image_gen": { + "input_tokens": 0, + "input_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "output_tokens": 0, + "output_tokens_details": { + "image_tokens": 0, + "text_tokens": 0 + }, + "total_tokens": 0 + }, + "web_search": { + "num_requests": 0 + } + }, "tools": [ { "type": "function", "description": "Get weather information for a location", "name": "weather", + "output_schema": null, "parameters": { "properties": { "location": { @@ -239,15 +277,16 @@ interactions: "top_p": 1.0, "truncation": "disabled", "usage": { - "input_tokens": 89, + "input_tokens": 242, "input_tokens_details": { + "cache_write_tokens": 0, "cached_tokens": 0 }, - "output_tokens": 209, + "output_tokens": 166, "output_tokens_details": { "reasoning_tokens": 128 }, - "total_tokens": 298 + "total_tokens": 408 }, "user": null, "metadata": {} @@ -257,4 +296,4 @@ interactions: - application/json status: 200 OK code: 200 - duration: 5.039661s + duration: 5.755190625s