freeplay 0.3.14__py3-none-any.whl → 0.3.16__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.
freeplay/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from .freeplay import Freeplay
2
2
  from .resources.prompts import PromptInfo
3
- from .resources.recordings import CallInfo, ResponseInfo, RecordPayload, TestRunInfo
3
+ from .resources.recordings import CallInfo, ResponseInfo, RecordPayload, TestRunInfo, UsageTokens
4
4
  from .resources.sessions import SessionInfo, TraceInfo
5
5
 
6
6
  __all__ = [
@@ -12,4 +12,5 @@ __all__ = [
12
12
  'SessionInfo',
13
13
  'TestRunInfo',
14
14
  'TraceInfo',
15
+ 'UsageTokens',
15
16
  ]
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  from dataclasses import dataclass
4
- from typing import Any, Dict, List, Optional, Union
4
+ from typing import Any, Dict, List, Optional, Union, Literal
5
5
  from uuid import UUID
6
6
 
7
7
  from requests import HTTPError
@@ -17,6 +17,15 @@ from freeplay.support import CallSupport
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
19
 
20
+ @dataclass
21
+ class UsageTokens:
22
+ prompt_tokens: int
23
+ completion_tokens: int
24
+
25
+
26
+ ApiStyle = Union[Literal['batch'], Literal['default']]
27
+
28
+
20
29
  @dataclass
21
30
  class CallInfo:
22
31
  provider: str
@@ -25,9 +34,17 @@ class CallInfo:
25
34
  end_time: float
26
35
  model_parameters: LLMParameters
27
36
  provider_info: Optional[Dict[str, Any]] = None
37
+ usage: Optional[UsageTokens] = None
38
+ api_style: Optional[ApiStyle] = None
28
39
 
29
40
  @staticmethod
30
- def from_prompt_info(prompt_info: PromptInfo, start_time: float, end_time: float) -> 'CallInfo':
41
+ def from_prompt_info(
42
+ prompt_info: PromptInfo,
43
+ start_time: float,
44
+ end_time: float,
45
+ usage: Optional[UsageTokens] = None,
46
+ api_style: Optional[ApiStyle] = None
47
+ ) -> 'CallInfo':
31
48
  return CallInfo(
32
49
  provider=prompt_info.provider,
33
50
  model=prompt_info.model,
@@ -35,6 +52,8 @@ class CallInfo:
35
52
  end_time=end_time,
36
53
  model_parameters=prompt_info.model_parameters,
37
54
  provider_info=prompt_info.provider_info,
55
+ usage=usage,
56
+ api_style=api_style
38
57
  )
39
58
 
40
59
 
@@ -138,6 +157,15 @@ class Recordings:
138
157
  "trace_id": record_payload.trace_info.trace_id
139
158
  }
140
159
 
160
+ if record_payload.call_info.usage is not None:
161
+ record_api_payload['call_info']['usage'] = {
162
+ "prompt_tokens": record_payload.call_info.usage.prompt_tokens,
163
+ "completion_tokens": record_payload.call_info.usage.completion_tokens,
164
+ }
165
+
166
+ if record_payload.call_info.api_style is not None:
167
+ record_api_payload['call_info']['api_style'] = record_payload.call_info.api_style
168
+
141
169
  try:
142
170
  recorded_response = api_support.post_raw(
143
171
  api_key=self.call_support.freeplay_api_key,
@@ -163,7 +191,6 @@ class Recordings:
163
191
 
164
192
  raise FreeplayError(message) from e
165
193
 
166
-
167
194
  def update(self, record_update_payload: RecordUpdatePayload) -> RecordResponse: # type: ignore
168
195
  record_update_api_payload: Dict[str, Any] = {
169
196
  "new_messages": record_update_payload.new_messages,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: freeplay
3
- Version: 0.3.14
3
+ Version: 0.3.16
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: FreePlay Engineering
@@ -1,4 +1,4 @@
1
- freeplay/__init__.py,sha256=oseuUqIVAi-2a_ns4ZbbFqkZez6KGGwI6fPkA0AKt6I,374
1
+ freeplay/__init__.py,sha256=fipXoYuxUtsy6mxshut2ujWJh4lVbQ5v_xQ-33TPC-g,406
2
2
  freeplay/api_support.py,sha256=Kn2x3g6yloHQl3NwFRjbZE9BnIh7d1sgwGwC0mHuvw4,2483
3
3
  freeplay/errors.py,sha256=vwotUBldxDzREZOmLUeoiDoZjcvDwgH1AMwKBLhLooE,807
4
4
  freeplay/freeplay.py,sha256=J04-erDD6rI2SAje_Nsf3x5Qx-Z6p8gQvGrMRHFWoD4,1602
@@ -9,14 +9,14 @@ freeplay/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  freeplay/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  freeplay/resources/customer_feedback.py,sha256=bw8MfEOKbGgn4FOyvcADrcs9GhcpNXNTgxKjBjIzywE,899
11
11
  freeplay/resources/prompts.py,sha256=NZi4K6oGnbSgw_i0NFssSqRNonl6Ov8eGPFFbZ6O5aI,22185
12
- freeplay/resources/recordings.py,sha256=k_ZQ-9YYeIcaSkdRFaELJF1dAkomdtNEcxbqDpeLXZU,7615
12
+ freeplay/resources/recordings.py,sha256=uslhoKWsXq51sAbF1lBs2uGL14qvBGc3dM8ZL6-H_04,8488
13
13
  freeplay/resources/sessions.py,sha256=Qz5v7VOf1DmQTd1wCOFXnrizlW5WFJT5V8-pq22Ifvg,2793
14
14
  freeplay/resources/test_cases.py,sha256=nXL_976RwSJDT6OWDM4GEzbcOzcGkJ9ulvb0XOzCRDM,2240
15
15
  freeplay/resources/test_runs.py,sha256=Tp2N-odInT5XEEWrEsVhdgfnsclOE8n92_C8gTwO2MI,2623
16
16
  freeplay/support.py,sha256=we_FEtxcqc-8R0uOWy8p0nX0pHUbs-ulw7TC5NarlX4,11091
17
17
  freeplay/utils.py,sha256=Xvt4mNLXLL7E6MI2hTuDLV5cl5Y83DgdjCZSyDGMjR0,3187
18
- freeplay-0.3.14.dist-info/LICENSE,sha256=_jzIw45hB1XHGxiQ8leZ0GH_X7bR_a8qgxaqnHbCUOo,1064
19
- freeplay-0.3.14.dist-info/METADATA,sha256=attHahy983-M4iFtaU-00Uzf_dsVVTSOAhgny3lpxk4,1654
20
- freeplay-0.3.14.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
21
- freeplay-0.3.14.dist-info/entry_points.txt,sha256=32s3rf2UUCqiJT4jnClEXZhdXlvl30uwpcxz-Gsy4UU,54
22
- freeplay-0.3.14.dist-info/RECORD,,
18
+ freeplay-0.3.16.dist-info/LICENSE,sha256=_jzIw45hB1XHGxiQ8leZ0GH_X7bR_a8qgxaqnHbCUOo,1064
19
+ freeplay-0.3.16.dist-info/METADATA,sha256=-HV1aJ7HGVIDEvjVoa7zP92wujEBuMiCK0vcNdhZNCY,1654
20
+ freeplay-0.3.16.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
21
+ freeplay-0.3.16.dist-info/entry_points.txt,sha256=32s3rf2UUCqiJT4jnClEXZhdXlvl30uwpcxz-Gsy4UU,54
22
+ freeplay-0.3.16.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 2.1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any