freeplay 0.2.42__py3-none-any.whl → 0.3.0a2__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/record.py DELETED
@@ -1,113 +0,0 @@
1
- import logging
2
- from abc import abstractmethod, ABC
3
- from dataclasses import dataclass
4
- from typing import Dict, Union
5
- from typing import Optional
6
-
7
- from . import api_support
8
- from .completions import PromptTemplateWithMetadata, OpenAIFunctionCall
9
- from .llm_parameters import LLMParameters
10
- from .model import InputVariables
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- @dataclass
16
- class RecordCallFields:
17
- completion_content: str
18
- completion_is_complete: bool
19
- end: float
20
- formatted_prompt: str
21
- session_id: str
22
- start: float
23
- target_template: PromptTemplateWithMetadata
24
- variables: InputVariables
25
- tag: str
26
- test_run_id: Optional[str]
27
- test_case_id: Optional[str]
28
- record_format_type: Optional[str]
29
- model: Optional[str]
30
- provider: Optional[str]
31
- llm_parameters: Optional[LLMParameters]
32
- function_call_response: Optional[OpenAIFunctionCall] = None
33
- custom_metadata: Optional[Dict[str, Union[str, int, float]]] = None
34
-
35
-
36
- class RecordProcessor(ABC):
37
- @abstractmethod
38
- def record_call(
39
- self,
40
- record_call: RecordCallFields,
41
- ) -> None:
42
- pass
43
-
44
-
45
- class NoOpRecorder(RecordProcessor):
46
- def record_call(
47
- self,
48
- record_call: RecordCallFields,
49
- ) -> None:
50
- pass
51
-
52
-
53
- no_op_recorder = NoOpRecorder()
54
-
55
-
56
- class DefaultRecordProcessor(RecordProcessor):
57
-
58
- def __init__(
59
- self,
60
- freeplay_api_key: str,
61
- api_base: str
62
- ) -> None:
63
- self.api_base = api_base
64
- self.freeplay_api_key = freeplay_api_key
65
-
66
- def record_call(
67
- self,
68
- record_call: RecordCallFields
69
- ) -> None:
70
- record_payload = {
71
- "session_id": record_call.session_id,
72
- "project_version_id": record_call.target_template.prompt_template_version_id,
73
- "prompt_template_id": record_call.target_template.prompt_template_id,
74
- "start_time": record_call.start,
75
- "end_time": record_call.end,
76
- "tag": record_call.tag,
77
- "inputs": record_call.variables,
78
- "prompt_content": record_call.formatted_prompt,
79
- "return_content": record_call.completion_content,
80
- "format_type": record_call.record_format_type,
81
- "is_complete": record_call.completion_is_complete,
82
- "model": record_call.model,
83
- "provider": record_call.provider,
84
- "llm_parameters": record_call.llm_parameters,
85
- }
86
-
87
- if record_call.custom_metadata is not None:
88
- record_payload['custom_metadata'] = record_call.custom_metadata
89
-
90
- if record_call.function_call_response is not None:
91
- record_payload['function_call_response'] = record_call.function_call_response
92
-
93
- if record_call.test_run_id is not None:
94
- record_payload['test_run_id'] = record_call.test_run_id
95
-
96
- if record_call.test_case_id is not None:
97
- record_payload['test_case_id'] = record_call.test_case_id
98
-
99
- try:
100
- recorded_response = api_support.post_raw(
101
- api_key=self.freeplay_api_key,
102
- url=f'{self.api_base}/v1/record',
103
- payload=record_payload
104
- )
105
- recorded_response.raise_for_status()
106
- except Exception as e:
107
- status_code = -1
108
- if hasattr(e, 'response') and hasattr(e.response, 'status_code'):
109
- status_code = e.response.status_code
110
- logger.warning(
111
- f'There was an error recording to Freeplay. Call will not be logged. '
112
- f'Status: {status_code}. {e.__class__}'
113
- )
freeplay/thin/__init__.py DELETED
@@ -1,14 +0,0 @@
1
- from .freeplay_thin import Freeplay
2
- from .resources.prompts import PromptInfo
3
- from .resources.recordings import CallInfo, ResponseInfo, RecordPayload, TestRunInfo
4
- from .resources.sessions import SessionInfo
5
-
6
- __all__ = [
7
- 'Freeplay',
8
- 'CallInfo',
9
- 'PromptInfo',
10
- 'RecordPayload',
11
- 'ResponseInfo',
12
- 'SessionInfo',
13
- 'TestRunInfo',
14
- ]
@@ -1,42 +0,0 @@
1
- from typing import Optional
2
-
3
- from freeplay.errors import FreeplayConfigurationError
4
- from freeplay.record import DefaultRecordProcessor
5
- from freeplay.support import CallSupport
6
- from freeplay.thin.resources.customer_feedback import CustomerFeedback
7
- from freeplay.thin.resources.prompts import Prompts, APITemplateResolver, TemplateResolver
8
- from freeplay.thin.resources.recordings import Recordings
9
- from freeplay.thin.resources.sessions import Sessions
10
- from freeplay.thin.resources.test_runs import TestRuns
11
-
12
-
13
- class Freeplay:
14
- def __init__(
15
- self,
16
- freeplay_api_key: str,
17
- api_base: str,
18
- template_resolver: Optional[TemplateResolver] = None
19
- ) -> None:
20
- if not freeplay_api_key or not freeplay_api_key.strip():
21
- raise FreeplayConfigurationError("Freeplay API key not set. It must be set to the Freeplay API.")
22
-
23
- self.call_support = CallSupport(
24
- freeplay_api_key,
25
- api_base,
26
- DefaultRecordProcessor(freeplay_api_key, api_base)
27
- )
28
- self.freeplay_api_key = freeplay_api_key
29
- self.api_base = api_base
30
-
31
- resolver: TemplateResolver
32
- if template_resolver is None:
33
- resolver = APITemplateResolver(self.call_support)
34
- else:
35
- resolver = template_resolver
36
-
37
- # Resources ========
38
- self.customer_feedback = CustomerFeedback(self.call_support)
39
- self.prompts = Prompts(self.call_support, resolver)
40
- self.recordings = Recordings(self.call_support)
41
- self.sessions = Sessions()
42
- self.test_runs = TestRuns(self.call_support)
@@ -1,27 +0,0 @@
1
- freeplay/__init__.py,sha256=74A9S9hmLq9BNHsdx0-37yDxlSukudNl9bJ0TE60Z30,61
2
- freeplay/api_support.py,sha256=Tmc6VRcmPcIgXrDNJXz0VbBD969t5QHAyV3yZlMsYRI,2331
3
- freeplay/completions.py,sha256=F1rMBtQaCtn0rBQqvCurkV25g8gLtwnEod5rRvf-txY,1176
4
- freeplay/errors.py,sha256=bPqsw32YX-xSr7O-G49M0sSFF7mq-YF1WGq928UV47s,631
5
- freeplay/flavors.py,sha256=9jVvhym9L5zyWM3RTBViibIgG6f6Fh1_63uMEVZAFT4,17259
6
- freeplay/freeplay.py,sha256=BLlr4YXh3a624xcM93KvZGsiIGSMrIMFM07lLyVCIao,17089
7
- freeplay/freeplay_cli.py,sha256=k9QPBedcFqpy9Ec9k7DT_y-NpVxHqRF5jKPTaQBBs1Q,3863
8
- freeplay/llm_parameters.py,sha256=bQbfuC8EICF0XMZQa5pwI3FkQqxmCUVqHO3gYHy3Tg8,898
9
- freeplay/model.py,sha256=7BRAuyxsLl8X-ue8wXPmAiKYp4OaYI-HkaGc3t5qtMU,534
10
- freeplay/provider_config.py,sha256=hruf3Khusrwb76_-hv7ouuxmvJuaRyC1UxIw7XlJx8A,1416
11
- freeplay/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- freeplay/record.py,sha256=69vO9vYGFL8gLrvRqLzlvodVNo05GOzKDJnCyhUha08,3615
13
- freeplay/support.py,sha256=ERXFKxZHl-TfgjJJYW-ssAFdSz_CJIs25wFlCPp4DWc,14535
14
- freeplay/thin/__init__.py,sha256=XgU_eMmTpOPCa9w5mVOyxPgwAgRFfVdRWDazYGYZtQ0,351
15
- freeplay/thin/freeplay_thin.py,sha256=0w_ECjassczsHJUcpzPxEHUDbiGo7Ey7Ba7vIaWc5ds,1619
16
- freeplay/thin/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- freeplay/thin/resources/customer_feedback.py,sha256=aTM7Eez7iYmjXSpRqkHxf4pi6xBrzVnMiQCEJVfPGvg,527
18
- freeplay/thin/resources/prompts.py,sha256=3sfH1k1AAXRfgHxfV6Acws0fAiMswgE93auRKWLGVIQ,10135
19
- freeplay/thin/resources/recordings.py,sha256=H_l5_J7nhoL5p0P37JsEC1_XROKc0PDsrV1UomNhy3E,5670
20
- freeplay/thin/resources/sessions.py,sha256=ioWdeTM9BSrEWKrFH66ysQIw5kCTlCVopJDmWtFgHz0,868
21
- freeplay/thin/resources/test_runs.py,sha256=mhRFjR-7z_1wGAkwRjDjALBjT1E6pen91DF8kZHjbLg,1457
22
- freeplay/utils.py,sha256=cRCCIzVqWNDKlTI-DDhXGyCkplbd-X4qzDs__aUpvww,1840
23
- freeplay-0.2.42.dist-info/LICENSE,sha256=_jzIw45hB1XHGxiQ8leZ0GH_X7bR_a8qgxaqnHbCUOo,1064
24
- freeplay-0.2.42.dist-info/METADATA,sha256=xDUBWu3ZrV1J0cNiMubC_0PdMD0ZJDeBwq3urjPejSc,1678
25
- freeplay-0.2.42.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
26
- freeplay-0.2.42.dist-info/entry_points.txt,sha256=32s3rf2UUCqiJT4jnClEXZhdXlvl30uwpcxz-Gsy4UU,54
27
- freeplay-0.2.42.dist-info/RECORD,,
File without changes
File without changes