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/__init__.py +10 -1
- freeplay/freeplay.py +26 -412
- freeplay/freeplay_cli.py +14 -28
- freeplay/model.py +6 -9
- freeplay/{thin/resources → resources}/prompts.py +97 -41
- freeplay/{thin/resources → resources}/recordings.py +5 -15
- freeplay/{thin/resources → resources}/test_runs.py +1 -1
- freeplay/support.py +57 -296
- freeplay/utils.py +15 -7
- {freeplay-0.2.42.dist-info → freeplay-0.3.0a2.dist-info}/METADATA +1 -3
- freeplay-0.3.0a2.dist-info/RECORD +20 -0
- {freeplay-0.2.42.dist-info → freeplay-0.3.0a2.dist-info}/WHEEL +1 -1
- freeplay/completions.py +0 -56
- freeplay/flavors.py +0 -459
- freeplay/provider_config.py +0 -49
- freeplay/py.typed +0 -0
- freeplay/record.py +0 -113
- freeplay/thin/__init__.py +0 -14
- freeplay/thin/freeplay_thin.py +0 -42
- freeplay-0.2.42.dist-info/RECORD +0 -27
- /freeplay/{thin/resources → resources}/__init__.py +0 -0
- /freeplay/{thin/resources → resources}/customer_feedback.py +0 -0
- /freeplay/{thin/resources → resources}/sessions.py +0 -0
- {freeplay-0.2.42.dist-info → freeplay-0.3.0a2.dist-info}/LICENSE +0 -0
- {freeplay-0.2.42.dist-info → freeplay-0.3.0a2.dist-info}/entry_points.txt +0 -0
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
|
-
]
|
freeplay/thin/freeplay_thin.py
DELETED
@@ -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)
|
freeplay-0.2.42.dist-info/RECORD
DELETED
@@ -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
|
File without changes
|
File without changes
|
File without changes
|