@@ -277,6 +277,11 @@ def request_handler(request: httpx.Request) -> httpx.Response:
277277                    created = 123 ,
278278                    model = 'gpt-3.5-turbo-instruct' ,
279279                    object = 'text_completion' ,
280+                     usage = completion_usage .CompletionUsage (
281+                         completion_tokens = 1 ,
282+                         prompt_tokens = 2 ,
283+                         total_tokens = 3 ,
284+                     ),
280285                ).model_dump (mode = 'json' ),
281286            )
282287    elif  request .url  ==  'https://api.openai.com/v1/embeddings' :
@@ -1403,7 +1408,19 @@ def test_completions(instrumented_client: openai.Client, exporter: TestExporter)
14031408                    'gen_ai.system' : 'openai' ,
14041409                    'gen_ai.request.model' : 'gpt-3.5-turbo-instruct' ,
14051410                    'gen_ai.response.model' : 'gpt-3.5-turbo-instruct' ,
1406-                     'response_data' : {'finish_reason' : 'stop' , 'text' : 'Nine' , 'usage' : None },
1411+                     'gen_ai.usage.input_tokens' : 2 ,
1412+                     'gen_ai.usage.output_tokens' : 1 ,
1413+                     'response_data' : {
1414+                         'finish_reason' : 'stop' ,
1415+                         'text' : 'Nine' ,
1416+                         'usage' : {
1417+                             'completion_tokens' : 1 ,
1418+                             'prompt_tokens' : 2 ,
1419+                             'total_tokens' : 3 ,
1420+                             'completion_tokens_details' : None ,
1421+                             'prompt_tokens_details' : None ,
1422+                         },
1423+                     },
14071424                    'logfire.json_schema' : {
14081425                        'type' : 'object' ,
14091426                        'properties' : {
@@ -1412,7 +1429,18 @@ def test_completions(instrumented_client: openai.Client, exporter: TestExporter)
14121429                            'gen_ai.system' : {},
14131430                            'gen_ai.request.model' : {},
14141431                            'gen_ai.response.model' : {},
1415-                             'response_data' : {'type' : 'object' },
1432+                             'gen_ai.usage.input_tokens' : {},
1433+                             'gen_ai.usage.output_tokens' : {},
1434+                             'response_data' : {
1435+                                 'type' : 'object' ,
1436+                                 'properties' : {
1437+                                     'usage' : {
1438+                                         'type' : 'object' ,
1439+                                         'title' : 'CompletionUsage' ,
1440+                                         'x-python-datatype' : 'PydanticModel' ,
1441+                                     }
1442+                                 },
1443+                             },
14161444                        },
14171445                    },
14181446                },
@@ -1903,7 +1931,19 @@ def test_dont_suppress_httpx(exporter: TestExporter) -> None:
19031931                    'gen_ai.system' : 'openai' ,
19041932                    'gen_ai.request.model' : 'gpt-3.5-turbo-instruct' ,
19051933                    'gen_ai.response.model' : 'gpt-3.5-turbo-instruct' ,
1906-                     'response_data' : {'finish_reason' : 'stop' , 'text' : 'Nine' , 'usage' : None },
1934+                     'gen_ai.usage.input_tokens' : 2 ,
1935+                     'gen_ai.usage.output_tokens' : 1 ,
1936+                     'response_data' : {
1937+                         'finish_reason' : 'stop' ,
1938+                         'text' : 'Nine' ,
1939+                         'usage' : {
1940+                             'completion_tokens' : 1 ,
1941+                             'prompt_tokens' : 2 ,
1942+                             'total_tokens' : 3 ,
1943+                             'completion_tokens_details' : None ,
1944+                             'prompt_tokens_details' : None ,
1945+                         },
1946+                     },
19071947                    'logfire.json_schema' : {
19081948                        'type' : 'object' ,
19091949                        'properties' : {
@@ -1912,7 +1952,18 @@ def test_dont_suppress_httpx(exporter: TestExporter) -> None:
19121952                            'gen_ai.system' : {},
19131953                            'gen_ai.request.model' : {},
19141954                            'gen_ai.response.model' : {},
1915-                             'response_data' : {'type' : 'object' },
1955+                             'gen_ai.usage.input_tokens' : {},
1956+                             'gen_ai.usage.output_tokens' : {},
1957+                             'response_data' : {
1958+                                 'type' : 'object' ,
1959+                                 'properties' : {
1960+                                     'usage' : {
1961+                                         'type' : 'object' ,
1962+                                         'title' : 'CompletionUsage' ,
1963+                                         'x-python-datatype' : 'PydanticModel' ,
1964+                                     }
1965+                                 },
1966+                             },
19161967                        },
19171968                    },
19181969                    'logfire.metrics' : {
@@ -1985,7 +2036,19 @@ def test_suppress_httpx(exporter: TestExporter) -> None:
19852036                    'gen_ai.system' : 'openai' ,
19862037                    'gen_ai.request.model' : 'gpt-3.5-turbo-instruct' ,
19872038                    'gen_ai.response.model' : 'gpt-3.5-turbo-instruct' ,
1988-                     'response_data' : {'finish_reason' : 'stop' , 'text' : 'Nine' , 'usage' : None },
2039+                     'gen_ai.usage.input_tokens' : 2 ,
2040+                     'gen_ai.usage.output_tokens' : 1 ,
2041+                     'response_data' : {
2042+                         'finish_reason' : 'stop' ,
2043+                         'text' : 'Nine' ,
2044+                         'usage' : {
2045+                             'completion_tokens' : 1 ,
2046+                             'prompt_tokens' : 2 ,
2047+                             'total_tokens' : 3 ,
2048+                             'completion_tokens_details' : None ,
2049+                             'prompt_tokens_details' : None ,
2050+                         },
2051+                     },
19892052                    'logfire.json_schema' : {
19902053                        'type' : 'object' ,
19912054                        'properties' : {
@@ -1994,7 +2057,18 @@ def test_suppress_httpx(exporter: TestExporter) -> None:
19942057                            'gen_ai.system' : {},
19952058                            'gen_ai.request.model' : {},
19962059                            'gen_ai.response.model' : {},
1997-                             'response_data' : {'type' : 'object' },
2060+                             'gen_ai.usage.input_tokens' : {},
2061+                             'gen_ai.usage.output_tokens' : {},
2062+                             'response_data' : {
2063+                                 'type' : 'object' ,
2064+                                 'properties' : {
2065+                                     'usage' : {
2066+                                         'type' : 'object' ,
2067+                                         'title' : 'CompletionUsage' ,
2068+                                         'x-python-datatype' : 'PydanticModel' ,
2069+                                     }
2070+                                 },
2071+                             },
19982072                        },
19992073                    },
20002074                },
0 commit comments