langfun 0.1.2.dev202410100804__py3-none-any.whl → 0.1.2.dev202410120803__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. langfun/core/__init__.py +1 -0
  2. langfun/core/eval/base_test.py +1 -0
  3. langfun/core/langfunc_test.py +2 -2
  4. langfun/core/language_model.py +140 -24
  5. langfun/core/language_model_test.py +166 -36
  6. langfun/core/llms/__init__.py +8 -1
  7. langfun/core/llms/anthropic.py +72 -7
  8. langfun/core/llms/cache/in_memory_test.py +3 -2
  9. langfun/core/llms/fake_test.py +7 -0
  10. langfun/core/llms/groq.py +154 -6
  11. langfun/core/llms/openai.py +300 -42
  12. langfun/core/llms/openai_test.py +35 -8
  13. langfun/core/llms/vertexai.py +121 -16
  14. langfun/core/logging.py +150 -43
  15. langfun/core/logging_test.py +33 -0
  16. langfun/core/message.py +249 -70
  17. langfun/core/message_test.py +70 -45
  18. langfun/core/modalities/audio.py +1 -1
  19. langfun/core/modalities/audio_test.py +1 -1
  20. langfun/core/modalities/image.py +1 -1
  21. langfun/core/modalities/image_test.py +9 -3
  22. langfun/core/modalities/mime.py +39 -3
  23. langfun/core/modalities/mime_test.py +39 -0
  24. langfun/core/modalities/ms_office.py +2 -5
  25. langfun/core/modalities/ms_office_test.py +1 -1
  26. langfun/core/modalities/pdf_test.py +1 -1
  27. langfun/core/modalities/video.py +1 -1
  28. langfun/core/modalities/video_test.py +2 -2
  29. langfun/core/structured/completion_test.py +1 -0
  30. langfun/core/structured/mapping.py +38 -0
  31. langfun/core/structured/mapping_test.py +55 -0
  32. langfun/core/structured/parsing_test.py +2 -1
  33. langfun/core/structured/prompting_test.py +1 -0
  34. langfun/core/structured/schema.py +34 -0
  35. langfun/core/template.py +110 -1
  36. langfun/core/template_test.py +37 -0
  37. langfun/core/templates/selfplay_test.py +4 -2
  38. {langfun-0.1.2.dev202410100804.dist-info → langfun-0.1.2.dev202410120803.dist-info}/METADATA +1 -1
  39. {langfun-0.1.2.dev202410100804.dist-info → langfun-0.1.2.dev202410120803.dist-info}/RECORD +42 -42
  40. {langfun-0.1.2.dev202410100804.dist-info → langfun-0.1.2.dev202410120803.dist-info}/LICENSE +0 -0
  41. {langfun-0.1.2.dev202410100804.dist-info → langfun-0.1.2.dev202410120803.dist-info}/WHEEL +0 -0
  42. {langfun-0.1.2.dev202410100804.dist-info → langfun-0.1.2.dev202410120803.dist-info}/top_level.txt +0 -0
@@ -50,57 +50,285 @@ SUPPORTED_MODELS_AND_SETTINGS = {
50
50
  # Models from https://platform.openai.com/docs/models
51
51
  # RPM is from https://platform.openai.com/docs/guides/rate-limits
52
52
  # o1 (preview) models.
53
- 'o1-preview': pg.Dict(rpm=10000, tpm=5000000),
54
- 'o1-preview-2024-09-12': pg.Dict(rpm=10000, tpm=5000000),
55
- 'o1-mini': pg.Dict(rpm=10000, tpm=5000000),
56
- 'o1-mini-2024-09-12': pg.Dict(rpm=10000, tpm=5000000),
53
+ # Pricing in US dollars, from https://openai.com/api/pricing/
54
+ # as of 2024-10-10.
55
+ 'o1-preview': pg.Dict(
56
+ in_service=True,
57
+ rpm=10000,
58
+ tpm=5000000,
59
+ cost_per_1k_input_tokens=0.015,
60
+ cost_per_1k_output_tokens=0.06,
61
+ ),
62
+ 'o1-preview-2024-09-12': pg.Dict(
63
+ in_service=True,
64
+ rpm=10000,
65
+ tpm=5000000,
66
+ cost_per_1k_input_tokens=0.015,
67
+ cost_per_1k_output_tokens=0.06,
68
+ ),
69
+ 'o1-mini': pg.Dict(
70
+ in_service=True,
71
+ rpm=10000,
72
+ tpm=5000000,
73
+ cost_per_1k_input_tokens=0.003,
74
+ cost_per_1k_output_tokens=0.012,
75
+ ),
76
+ 'o1-mini-2024-09-12': pg.Dict(
77
+ in_service=True,
78
+ rpm=10000,
79
+ tpm=5000000,
80
+ cost_per_1k_input_tokens=0.003,
81
+ cost_per_1k_output_tokens=0.012,
82
+ ),
57
83
  # GPT-4o models
58
- 'gpt-4o-mini': pg.Dict(rpm=10000, tpm=5000000),
59
- 'gpt-4o-mini-2024-07-18': pg.Dict(rpm=10000, tpm=5000000),
60
- 'gpt-4o': pg.Dict(rpm=10000, tpm=5000000),
61
- 'gpt-4o-2024-08-06': pg.Dict(rpm=10000, tpm=5000000),
62
- 'gpt-4o-2024-05-13': pg.Dict(rpm=10000, tpm=5000000),
84
+ 'gpt-4o-mini': pg.Dict(
85
+ in_service=True,
86
+ rpm=10000,
87
+ tpm=5000000,
88
+ cost_per_1k_input_tokens=0.00015,
89
+ cost_per_1k_output_tokens=0.0006,
90
+ ),
91
+ 'gpt-4o-mini-2024-07-18': pg.Dict(
92
+ in_service=True,
93
+ rpm=10000,
94
+ tpm=5000000,
95
+ cost_per_1k_input_tokens=0.00015,
96
+ cost_per_1k_output_tokens=0.0006,
97
+ ),
98
+ 'gpt-4o': pg.Dict(
99
+ in_service=True,
100
+ rpm=10000,
101
+ tpm=5000000,
102
+ cost_per_1k_input_tokens=0.0025,
103
+ cost_per_1k_output_tokens=0.01,
104
+ ),
105
+ 'gpt-4o-2024-08-06': pg.Dict(
106
+ in_service=True,
107
+ rpm=10000,
108
+ tpm=5000000,
109
+ cost_per_1k_input_tokens=0.0025,
110
+ cost_per_1k_output_tokens=0.01,
111
+ ),
112
+ 'gpt-4o-2024-05-13': pg.Dict(
113
+ in_service=True,
114
+ rpm=10000,
115
+ tpm=5000000,
116
+ cost_per_1k_input_tokens=0.005,
117
+ cost_per_1k_output_tokens=0.015,
118
+ ),
63
119
  # GPT-4-Turbo models
64
- 'gpt-4-turbo': pg.Dict(rpm=10000, tpm=2000000),
65
- 'gpt-4-turbo-2024-04-09': pg.Dict(rpm=10000, tpm=2000000),
66
- 'gpt-4-turbo-preview': pg.Dict(rpm=10000, tpm=2000000),
67
- 'gpt-4-0125-preview': pg.Dict(rpm=10000, tpm=2000000),
68
- 'gpt-4-1106-preview': pg.Dict(rpm=10000, tpm=2000000),
69
- 'gpt-4-vision-preview': pg.Dict(rpm=10000, tpm=2000000),
120
+ 'gpt-4-turbo': pg.Dict(
121
+ in_service=True,
122
+ rpm=10000,
123
+ tpm=2000000,
124
+ cost_per_1k_input_tokens=0.01,
125
+ cost_per_1k_output_tokens=0.03,
126
+ ),
127
+ 'gpt-4-turbo-2024-04-09': pg.Dict(
128
+ in_service=True,
129
+ rpm=10000,
130
+ tpm=2000000,
131
+ cost_per_1k_input_tokens=0.01,
132
+ cost_per_1k_output_tokens=0.03,
133
+ ),
134
+ 'gpt-4-turbo-preview': pg.Dict(
135
+ in_service=True,
136
+ rpm=10000,
137
+ tpm=2000000,
138
+ cost_per_1k_input_tokens=0.01,
139
+ cost_per_1k_output_tokens=0.03,
140
+ ),
141
+ 'gpt-4-0125-preview': pg.Dict(
142
+ in_service=True,
143
+ rpm=10000,
144
+ tpm=2000000,
145
+ cost_per_1k_input_tokens=0.01,
146
+ cost_per_1k_output_tokens=0.03,
147
+ ),
148
+ 'gpt-4-1106-preview': pg.Dict(
149
+ in_service=True,
150
+ rpm=10000,
151
+ tpm=2000000,
152
+ cost_per_1k_input_tokens=0.01,
153
+ cost_per_1k_output_tokens=0.03,
154
+ ),
155
+ 'gpt-4-vision-preview': pg.Dict(
156
+ in_service=True,
157
+ rpm=10000,
158
+ tpm=2000000,
159
+ cost_per_1k_input_tokens=0.01,
160
+ cost_per_1k_output_tokens=0.03,
161
+ ),
70
162
  'gpt-4-1106-vision-preview': pg.Dict(
71
- rpm=10000, tpm=2000000
163
+ in_service=True,
164
+ rpm=10000,
165
+ tpm=2000000,
166
+ cost_per_1k_input_tokens=0.01,
167
+ cost_per_1k_output_tokens=0.03,
72
168
  ),
73
169
  # GPT-4 models
74
- 'gpt-4': pg.Dict(rpm=10000, tpm=300000),
75
- 'gpt-4-0613': pg.Dict(rpm=10000, tpm=300000),
76
- 'gpt-4-0314': pg.Dict(rpm=10000, tpm=300000),
77
- 'gpt-4-32k': pg.Dict(rpm=10000, tpm=300000),
78
- 'gpt-4-32k-0613': pg.Dict(rpm=10000, tpm=300000),
79
- 'gpt-4-32k-0314': pg.Dict(rpm=10000, tpm=300000),
170
+ 'gpt-4': pg.Dict(
171
+ in_service=True,
172
+ rpm=10000,
173
+ tpm=300000,
174
+ cost_per_1k_input_tokens=0.03,
175
+ cost_per_1k_output_tokens=0.06,
176
+ ),
177
+ 'gpt-4-0613': pg.Dict(
178
+ in_service=False,
179
+ rpm=10000,
180
+ tpm=300000,
181
+ cost_per_1k_input_tokens=0.03,
182
+ cost_per_1k_output_tokens=0.06,
183
+ ),
184
+ 'gpt-4-0314': pg.Dict(
185
+ in_service=False,
186
+ rpm=10000,
187
+ tpm=300000,
188
+ cost_per_1k_input_tokens=0.03,
189
+ cost_per_1k_output_tokens=0.06,
190
+ ),
191
+ 'gpt-4-32k': pg.Dict(
192
+ in_service=True,
193
+ rpm=10000,
194
+ tpm=300000,
195
+ cost_per_1k_input_tokens=0.06,
196
+ cost_per_1k_output_tokens=0.12,
197
+ ),
198
+ 'gpt-4-32k-0613': pg.Dict(
199
+ in_service=False,
200
+ rpm=10000,
201
+ tpm=300000,
202
+ cost_per_1k_input_tokens=0.06,
203
+ cost_per_1k_output_tokens=0.12,
204
+ ),
205
+ 'gpt-4-32k-0314': pg.Dict(
206
+ in_service=False,
207
+ rpm=10000,
208
+ tpm=300000,
209
+ cost_per_1k_input_tokens=0.06,
210
+ cost_per_1k_output_tokens=0.12,
211
+ ),
80
212
  # GPT-3.5-Turbo models
81
- 'gpt-3.5-turbo': pg.Dict(rpm=10000, tpm=2000000),
82
- 'gpt-3.5-turbo-0125': pg.Dict(rpm=10000, tpm=2000000),
83
- 'gpt-3.5-turbo-1106': pg.Dict(rpm=10000, tpm=2000000),
84
- 'gpt-3.5-turbo-0613': pg.Dict(rpm=10000, tpm=2000000),
85
- 'gpt-3.5-turbo-0301': pg.Dict(rpm=10000, tpm=2000000),
86
- 'gpt-3.5-turbo-16k': pg.Dict(rpm=10000, tpm=2000000),
87
- 'gpt-3.5-turbo-16k-0613': pg.Dict(rpm=10000, tpm=2000000),
88
- 'gpt-3.5-turbo-16k-0301': pg.Dict(rpm=10000, tpm=2000000),
213
+ 'gpt-3.5-turbo': pg.Dict(
214
+ in_service=True,
215
+ rpm=10000,
216
+ tpm=2000000,
217
+ cost_per_1k_input_tokens=0.0005,
218
+ cost_per_1k_output_tokens=0.0015,
219
+ ),
220
+ 'gpt-3.5-turbo-0125': pg.Dict(
221
+ in_service=True,
222
+ rpm=10000,
223
+ tpm=2000000,
224
+ cost_per_1k_input_tokens=0.0005,
225
+ cost_per_1k_output_tokens=0.0015,
226
+ ),
227
+ 'gpt-3.5-turbo-1106': pg.Dict(
228
+ in_service=True,
229
+ rpm=10000,
230
+ tpm=2000000,
231
+ cost_per_1k_input_tokens=0.001,
232
+ cost_per_1k_output_tokens=0.002,
233
+ ),
234
+ 'gpt-3.5-turbo-0613': pg.Dict(
235
+ in_service=True,
236
+ rpm=10000,
237
+ tpm=2000000,
238
+ cost_per_1k_input_tokens=0.0015,
239
+ cost_per_1k_output_tokens=0.002,
240
+ ),
241
+ 'gpt-3.5-turbo-0301': pg.Dict(
242
+ in_service=True,
243
+ rpm=10000,
244
+ tpm=2000000,
245
+ cost_per_1k_input_tokens=0.0015,
246
+ cost_per_1k_output_tokens=0.002,
247
+ ),
248
+ 'gpt-3.5-turbo-16k': pg.Dict(
249
+ in_service=True,
250
+ rpm=10000,
251
+ tpm=2000000,
252
+ cost_per_1k_input_tokens=0.003,
253
+ cost_per_1k_output_tokens=0.004,
254
+ ),
255
+ 'gpt-3.5-turbo-16k-0613': pg.Dict(
256
+ in_service=True,
257
+ rpm=10000,
258
+ tpm=2000000,
259
+ cost_per_1k_input_tokens=0.003,
260
+ cost_per_1k_output_tokens=0.004,
261
+ ),
262
+ 'gpt-3.5-turbo-16k-0301': pg.Dict(
263
+ in_service=False,
264
+ rpm=10000,
265
+ tpm=2000000,
266
+ cost_per_1k_input_tokens=0.003,
267
+ cost_per_1k_output_tokens=0.004,
268
+ ),
89
269
  # GPT-3.5 models
90
- 'text-davinci-003': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
91
- 'text-davinci-002': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
92
- 'code-davinci-002': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
270
+ 'text-davinci-003': pg.Dict(
271
+ in_service=False,
272
+ rpm=_DEFAULT_RPM,
273
+ tpm=_DEFAULT_TPM
274
+ ),
275
+ 'text-davinci-002': pg.Dict(
276
+ in_service=False,
277
+ rpm=_DEFAULT_RPM,
278
+ tpm=_DEFAULT_TPM
279
+ ),
280
+ 'code-davinci-002': pg.Dict(
281
+ in_service=False,
282
+ rpm=_DEFAULT_RPM,
283
+ tpm=_DEFAULT_TPM
284
+ ),
93
285
  # GPT-3 instruction-tuned models
94
- 'text-curie-001': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
95
- 'text-babbage-001': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
96
- 'text-ada-001': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
97
- 'davinci': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
98
- 'curie': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
99
- 'babbage': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
100
- 'ada': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
286
+ 'text-curie-001': pg.Dict(
287
+ in_service=False,
288
+ rpm=_DEFAULT_RPM,
289
+ tpm=_DEFAULT_TPM
290
+ ),
291
+ 'text-babbage-001': pg.Dict(
292
+ in_service=False,
293
+ rpm=_DEFAULT_RPM,
294
+ tpm=_DEFAULT_TPM,
295
+ ),
296
+ 'text-ada-001': pg.Dict(
297
+ in_service=False,
298
+ rpm=_DEFAULT_RPM,
299
+ tpm=_DEFAULT_TPM,
300
+ ),
301
+ 'davinci': pg.Dict(
302
+ in_service=False,
303
+ rpm=_DEFAULT_RPM,
304
+ tpm=_DEFAULT_TPM,
305
+ ),
306
+ 'curie': pg.Dict(
307
+ in_service=False,
308
+ rpm=_DEFAULT_RPM,
309
+ tpm=_DEFAULT_TPM
310
+ ),
311
+ 'babbage': pg.Dict(
312
+ in_service=False,
313
+ rpm=_DEFAULT_RPM,
314
+ tpm=_DEFAULT_TPM
315
+ ),
316
+ 'ada': pg.Dict(
317
+ in_service=False,
318
+ rpm=_DEFAULT_RPM,
319
+ tpm=_DEFAULT_TPM
320
+ ),
101
321
  # GPT-3 base models
102
- 'babbage-002': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
103
- 'davinci-002': pg.Dict(rpm=_DEFAULT_RPM, tpm=_DEFAULT_TPM),
322
+ 'babbage-002': pg.Dict(
323
+ in_service=False,
324
+ rpm=_DEFAULT_RPM,
325
+ tpm=_DEFAULT_TPM
326
+ ),
327
+ 'davinci-002': pg.Dict(
328
+ in_service=True,
329
+ rpm=_DEFAULT_RPM,
330
+ tpm=_DEFAULT_TPM
331
+ ),
104
332
  }
105
333
 
106
334
 
@@ -172,6 +400,25 @@ class OpenAI(lf.LanguageModel):
172
400
  requests_per_min=rpm, tokens_per_min=tpm
173
401
  )
174
402
 
403
+ def estimate_cost(
404
+ self,
405
+ num_input_tokens: int,
406
+ num_output_tokens: int
407
+ ) -> float | None:
408
+ """Estimate the cost based on usage."""
409
+ cost_per_1k_input_tokens = SUPPORTED_MODELS_AND_SETTINGS[self.model].get(
410
+ 'cost_per_1k_input_tokens', None
411
+ )
412
+ cost_per_1k_output_tokens = SUPPORTED_MODELS_AND_SETTINGS[self.model].get(
413
+ 'cost_per_1k_output_tokens', None
414
+ )
415
+ if cost_per_1k_output_tokens is None or cost_per_1k_input_tokens is None:
416
+ return None
417
+ return (
418
+ cost_per_1k_input_tokens * num_input_tokens
419
+ + cost_per_1k_output_tokens * num_output_tokens
420
+ ) / 1000
421
+
175
422
  @classmethod
176
423
  def dir(cls):
177
424
  assert openai is not None
@@ -239,10 +486,17 @@ class OpenAI(lf.LanguageModel):
239
486
  )
240
487
 
241
488
  n = len(samples_by_index)
489
+ estimated_cost = self.estimate_cost(
490
+ num_input_tokens=response.usage.prompt_tokens,
491
+ num_output_tokens=response.usage.completion_tokens,
492
+ )
242
493
  usage = lf.LMSamplingUsage(
243
494
  prompt_tokens=response.usage.prompt_tokens // n,
244
495
  completion_tokens=response.usage.completion_tokens // n,
245
496
  total_tokens=response.usage.total_tokens // n,
497
+ estimated_cost=(
498
+ None if estimated_cost is None else (estimated_cost // n)
499
+ )
246
500
  )
247
501
  return [
248
502
  lf.LMSamplingResult(samples_by_index[index], usage=usage)
@@ -350,6 +604,10 @@ class OpenAI(lf.LanguageModel):
350
604
  prompt_tokens=response.usage.prompt_tokens,
351
605
  completion_tokens=response.usage.completion_tokens,
352
606
  total_tokens=response.usage.total_tokens,
607
+ estimated_cost=self.estimate_cost(
608
+ num_input_tokens=response.usage.prompt_tokens,
609
+ num_output_tokens=response.usage.completion_tokens,
610
+ )
353
611
  ),
354
612
  )
355
613
 
@@ -210,6 +210,7 @@ class OpenAITest(unittest.TestCase):
210
210
  'Sample 0 for prompt 0.',
211
211
  score=0.0,
212
212
  logprobs=None,
213
+ is_cached=False,
213
214
  usage=lf.LMSamplingUsage(
214
215
  prompt_tokens=16,
215
216
  completion_tokens=16,
@@ -225,6 +226,7 @@ class OpenAITest(unittest.TestCase):
225
226
  'Sample 1 for prompt 0.',
226
227
  score=0.1,
227
228
  logprobs=None,
229
+ is_cached=False,
228
230
  usage=lf.LMSamplingUsage(
229
231
  prompt_tokens=16,
230
232
  completion_tokens=16,
@@ -240,6 +242,7 @@ class OpenAITest(unittest.TestCase):
240
242
  'Sample 2 for prompt 0.',
241
243
  score=0.2,
242
244
  logprobs=None,
245
+ is_cached=False,
243
246
  usage=lf.LMSamplingUsage(
244
247
  prompt_tokens=16,
245
248
  completion_tokens=16,
@@ -265,6 +268,7 @@ class OpenAITest(unittest.TestCase):
265
268
  'Sample 0 for prompt 1.',
266
269
  score=0.0,
267
270
  logprobs=None,
271
+ is_cached=False,
268
272
  usage=lf.LMSamplingUsage(
269
273
  prompt_tokens=16,
270
274
  completion_tokens=16,
@@ -280,6 +284,7 @@ class OpenAITest(unittest.TestCase):
280
284
  'Sample 1 for prompt 1.',
281
285
  score=0.1,
282
286
  logprobs=None,
287
+ is_cached=False,
283
288
  usage=lf.LMSamplingUsage(
284
289
  prompt_tokens=16,
285
290
  completion_tokens=16,
@@ -295,6 +300,7 @@ class OpenAITest(unittest.TestCase):
295
300
  'Sample 2 for prompt 1.',
296
301
  score=0.2,
297
302
  logprobs=None,
303
+ is_cached=False,
298
304
  usage=lf.LMSamplingUsage(
299
305
  prompt_tokens=16,
300
306
  completion_tokens=16,
@@ -315,12 +321,17 @@ class OpenAITest(unittest.TestCase):
315
321
  def test_sample_chat_completion(self):
316
322
  with mock.patch('openai.ChatCompletion.create') as mock_chat_completion:
317
323
  mock_chat_completion.side_effect = mock_chat_completion_query
324
+ openai.SUPPORTED_MODELS_AND_SETTINGS['gpt-4'].update({
325
+ 'cost_per_1k_input_tokens': 1.0,
326
+ 'cost_per_1k_output_tokens': 1.0,
327
+ })
318
328
  lm = openai.OpenAI(api_key='test_key', model='gpt-4')
319
329
  results = lm.sample(
320
330
  ['hello', 'bye'], sampling_options=lf.LMSamplingOptions(n=3)
321
331
  )
322
332
 
323
333
  self.assertEqual(len(results), 2)
334
+ print(results[0])
324
335
  self.assertEqual(
325
336
  results[0],
326
337
  lf.LMSamplingResult(
@@ -330,10 +341,12 @@ class OpenAITest(unittest.TestCase):
330
341
  'Sample 0 for message.',
331
342
  score=0.0,
332
343
  logprobs=None,
344
+ is_cached=False,
333
345
  usage=lf.LMSamplingUsage(
334
346
  prompt_tokens=33,
335
347
  completion_tokens=33,
336
- total_tokens=66
348
+ total_tokens=66,
349
+ estimated_cost=0.2 / 3,
337
350
  ),
338
351
  tags=[lf.Message.TAG_LM_RESPONSE],
339
352
  ),
@@ -345,10 +358,12 @@ class OpenAITest(unittest.TestCase):
345
358
  'Sample 1 for message.',
346
359
  score=0.0,
347
360
  logprobs=None,
361
+ is_cached=False,
348
362
  usage=lf.LMSamplingUsage(
349
363
  prompt_tokens=33,
350
364
  completion_tokens=33,
351
- total_tokens=66
365
+ total_tokens=66,
366
+ estimated_cost=0.2 / 3,
352
367
  ),
353
368
  tags=[lf.Message.TAG_LM_RESPONSE],
354
369
  ),
@@ -360,10 +375,12 @@ class OpenAITest(unittest.TestCase):
360
375
  'Sample 2 for message.',
361
376
  score=0.0,
362
377
  logprobs=None,
378
+ is_cached=False,
363
379
  usage=lf.LMSamplingUsage(
364
380
  prompt_tokens=33,
365
381
  completion_tokens=33,
366
- total_tokens=66
382
+ total_tokens=66,
383
+ estimated_cost=0.2 / 3,
367
384
  ),
368
385
  tags=[lf.Message.TAG_LM_RESPONSE],
369
386
  ),
@@ -372,7 +389,8 @@ class OpenAITest(unittest.TestCase):
372
389
  ),
373
390
  ],
374
391
  usage=lf.LMSamplingUsage(
375
- prompt_tokens=100, completion_tokens=100, total_tokens=200
392
+ prompt_tokens=100, completion_tokens=100, total_tokens=200,
393
+ estimated_cost=0.2,
376
394
  ),
377
395
  ),
378
396
  )
@@ -385,10 +403,12 @@ class OpenAITest(unittest.TestCase):
385
403
  'Sample 0 for message.',
386
404
  score=0.0,
387
405
  logprobs=None,
406
+ is_cached=False,
388
407
  usage=lf.LMSamplingUsage(
389
408
  prompt_tokens=33,
390
409
  completion_tokens=33,
391
- total_tokens=66
410
+ total_tokens=66,
411
+ estimated_cost=0.2 / 3,
392
412
  ),
393
413
  tags=[lf.Message.TAG_LM_RESPONSE],
394
414
  ),
@@ -400,10 +420,12 @@ class OpenAITest(unittest.TestCase):
400
420
  'Sample 1 for message.',
401
421
  score=0.0,
402
422
  logprobs=None,
423
+ is_cached=False,
403
424
  usage=lf.LMSamplingUsage(
404
425
  prompt_tokens=33,
405
426
  completion_tokens=33,
406
- total_tokens=66
427
+ total_tokens=66,
428
+ estimated_cost=0.2 / 3,
407
429
  ),
408
430
  tags=[lf.Message.TAG_LM_RESPONSE],
409
431
  ),
@@ -415,10 +437,12 @@ class OpenAITest(unittest.TestCase):
415
437
  'Sample 2 for message.',
416
438
  score=0.0,
417
439
  logprobs=None,
440
+ is_cached=False,
418
441
  usage=lf.LMSamplingUsage(
419
442
  prompt_tokens=33,
420
443
  completion_tokens=33,
421
- total_tokens=66
444
+ total_tokens=66,
445
+ estimated_cost=0.2 / 3,
422
446
  ),
423
447
  tags=[lf.Message.TAG_LM_RESPONSE],
424
448
  ),
@@ -427,7 +451,8 @@ class OpenAITest(unittest.TestCase):
427
451
  ),
428
452
  ],
429
453
  usage=lf.LMSamplingUsage(
430
- prompt_tokens=100, completion_tokens=100, total_tokens=200
454
+ prompt_tokens=100, completion_tokens=100, total_tokens=200,
455
+ estimated_cost=0.2,
431
456
  ),
432
457
  ),
433
458
  )
@@ -449,6 +474,7 @@ class OpenAITest(unittest.TestCase):
449
474
  'Sample 0 for prompt 0.',
450
475
  score=0.0,
451
476
  logprobs=None,
477
+ is_cached=False,
452
478
  usage=lf.LMSamplingUsage(
453
479
  prompt_tokens=50,
454
480
  completion_tokens=50,
@@ -464,6 +490,7 @@ class OpenAITest(unittest.TestCase):
464
490
  'Sample 1 for prompt 0.',
465
491
  score=0.1,
466
492
  logprobs=None,
493
+ is_cached=False,
467
494
  usage=lf.LMSamplingUsage(
468
495
  prompt_tokens=50,
469
496
  completion_tokens=50,