latitude-sdk 2.1.2__py3-none-any.whl → 3.0.0__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.
@@ -75,21 +75,17 @@ class EvaluationRequestParams(Model):
75
75
  conversation_uuid: str
76
76
 
77
77
 
78
- class TriggerEvaluationRequestParams(EvaluationRequestParams, Model):
79
- pass
80
-
81
-
82
- class TriggerEvaluationRequestBody(Model):
83
- evaluation_uuids: Optional[List[str]] = Field(default=None, alias=str("evaluationUuids"))
78
+ class AnnotateEvaluationRequestParams(EvaluationRequestParams, Model):
79
+ evaluation_uuid: str
84
80
 
85
81
 
86
- class CreateEvaluationResultRequestParams(EvaluationRequestParams, Model):
87
- evaluation_uuid: str
82
+ class AnnotateEvaluationRequestBody(Model):
83
+ score: int
88
84
 
85
+ class Metadata(Model):
86
+ reason: str
89
87
 
90
- class CreateEvaluationResultRequestBody(Model):
91
- result: Union[str, bool, int]
92
- reason: str
88
+ metadata: Optional[Metadata] = None
93
89
 
94
90
 
95
91
  RequestParams = Union[
@@ -99,8 +95,7 @@ RequestParams = Union[
99
95
  RunPromptRequestParams,
100
96
  ChatPromptRequestParams,
101
97
  CreateLogRequestParams,
102
- TriggerEvaluationRequestParams,
103
- CreateEvaluationResultRequestParams,
98
+ AnnotateEvaluationRequestParams,
104
99
  ]
105
100
 
106
101
 
@@ -109,8 +104,7 @@ RequestBody = Union[
109
104
  RunPromptRequestBody,
110
105
  ChatPromptRequestBody,
111
106
  CreateLogRequestBody,
112
- TriggerEvaluationRequestBody,
113
- CreateEvaluationResultRequestBody,
107
+ AnnotateEvaluationRequestBody,
114
108
  ]
115
109
 
116
110
 
@@ -121,5 +115,4 @@ class RequestHandler(StrEnum):
121
115
  RunPrompt = "RUN_PROMPT"
122
116
  ChatPrompt = "CHAT_PROMPT"
123
117
  CreateLog = "CREATE_LOG"
124
- TriggerEvaluation = "TRIGGER_EVALUATION"
125
- CreateEvaluationResult = "CREATE_EVALUATION_RESULT"
118
+ AnnotateEvaluation = "ANNOTATE_EVALUATION"
@@ -1,8 +1,8 @@
1
1
  from typing import Callable, Optional, Tuple
2
2
 
3
3
  from latitude_sdk.client.payloads import (
4
+ AnnotateEvaluationRequestParams,
4
5
  ChatPromptRequestParams,
5
- CreateEvaluationResultRequestParams,
6
6
  CreateLogRequestParams,
7
7
  GetAllPromptRequestParams,
8
8
  GetOrCreatePromptRequestParams,
@@ -10,7 +10,6 @@ from latitude_sdk.client.payloads import (
10
10
  RequestHandler,
11
11
  RequestParams,
12
12
  RunPromptRequestParams,
13
- TriggerEvaluationRequestParams,
14
13
  )
15
14
  from latitude_sdk.sdk.types import GatewayOptions
16
15
  from latitude_sdk.util import Model
@@ -40,26 +39,35 @@ class Router:
40
39
  if handler == RequestHandler.GetAllPrompts:
41
40
  assert isinstance(params, GetAllPromptRequestParams)
42
41
 
43
- return "GET", self.prompts(
44
- project_id=params.project_id,
45
- version_uuid=params.version_uuid,
46
- ).all_prompts
42
+ return (
43
+ "GET",
44
+ self.prompts(
45
+ project_id=params.project_id,
46
+ version_uuid=params.version_uuid,
47
+ ).all_prompts,
48
+ )
47
49
 
48
50
  elif handler == RequestHandler.GetOrCreatePrompt:
49
51
  assert isinstance(params, GetOrCreatePromptRequestParams)
50
52
 
51
- return "POST", self.prompts(
52
- project_id=params.project_id,
53
- version_uuid=params.version_uuid,
54
- ).get_or_create
53
+ return (
54
+ "POST",
55
+ self.prompts(
56
+ project_id=params.project_id,
57
+ version_uuid=params.version_uuid,
58
+ ).get_or_create,
59
+ )
55
60
 
56
61
  elif handler == RequestHandler.RunPrompt:
57
62
  assert isinstance(params, RunPromptRequestParams)
58
63
 
59
- return "POST", self.prompts(
60
- project_id=params.project_id,
61
- version_uuid=params.version_uuid,
62
- ).run
64
+ return (
65
+ "POST",
66
+ self.prompts(
67
+ project_id=params.project_id,
68
+ version_uuid=params.version_uuid,
69
+ ).run,
70
+ )
63
71
 
64
72
  elif handler == RequestHandler.ChatPrompt:
65
73
  assert isinstance(params, ChatPromptRequestParams)
@@ -69,36 +77,31 @@ class Router:
69
77
  elif handler == RequestHandler.CreateLog:
70
78
  assert isinstance(params, CreateLogRequestParams)
71
79
 
72
- return "POST", self.prompts(
73
- project_id=params.project_id,
74
- version_uuid=params.version_uuid,
75
- ).logs
76
-
77
- elif handler == RequestHandler.TriggerEvaluation:
78
- assert isinstance(params, TriggerEvaluationRequestParams)
79
-
80
- return "POST", self.conversations().evaluate(params.conversation_uuid)
80
+ return (
81
+ "POST",
82
+ self.prompts(
83
+ project_id=params.project_id,
84
+ version_uuid=params.version_uuid,
85
+ ).logs,
86
+ )
81
87
 
82
- elif handler == RequestHandler.CreateEvaluationResult:
83
- assert isinstance(params, CreateEvaluationResultRequestParams)
88
+ elif handler == RequestHandler.AnnotateEvaluation:
89
+ assert isinstance(params, AnnotateEvaluationRequestParams)
84
90
 
85
- return "POST", self.conversations().evaluation_result(params.conversation_uuid, params.evaluation_uuid)
91
+ return "POST", self.conversations().annotate(params.conversation_uuid, params.evaluation_uuid)
86
92
 
87
93
  raise TypeError(f"Unknown handler: {handler}")
88
94
 
89
95
  class Conversations(Model):
90
96
  chat: Callable[[str], str]
91
- evaluate: Callable[[str], str]
92
- evaluation_result: Callable[[str, str], str]
97
+ annotate: Callable[[str, str], str]
93
98
 
94
99
  def conversations(self) -> Conversations:
95
100
  base_url = f"{self.options.gateway.base_url}/conversations"
96
101
 
97
102
  return self.Conversations(
98
103
  chat=lambda uuid: f"{base_url}/{uuid}/chat",
99
- evaluate=lambda uuid: f"{base_url}/{uuid}/evaluate",
100
- evaluation_result=lambda conversation_uuid,
101
- evaluation_uuid: f"{base_url}/{conversation_uuid}/evaluations/{evaluation_uuid}/evaluation-results",
104
+ annotate=lambda uuid, evaluation_uuid: f"{base_url}/{uuid}/evaluations/{evaluation_uuid}/annotate",
102
105
  )
103
106
 
104
107
  class Prompts(Model):
@@ -1,32 +1,30 @@
1
- from typing import List, Optional, Union
1
+ from datetime import datetime
2
+ from typing import Any, Optional, Union
2
3
 
3
4
  from latitude_sdk.client import (
5
+ AnnotateEvaluationRequestBody,
6
+ AnnotateEvaluationRequestParams,
4
7
  Client,
5
- CreateEvaluationResultRequestBody,
6
- CreateEvaluationResultRequestParams,
7
8
  RequestHandler,
8
- TriggerEvaluationRequestBody,
9
- TriggerEvaluationRequestParams,
10
9
  )
11
- from latitude_sdk.sdk.types import EvaluationResult, SdkOptions
12
- from latitude_sdk.util import Model
10
+ from latitude_sdk.sdk.types import SdkOptions
11
+ from latitude_sdk.util import Field, Model
13
12
 
14
13
 
15
- class TriggerEvaluationOptions(Model):
16
- evaluation_uuids: Optional[List[str]] = None
17
-
18
-
19
- class TriggerEvaluationResult(Model):
20
- evaluations: List[str]
21
-
22
-
23
- class CreateEvaluationResultOptions(Model):
24
- result: Union[str, bool, int]
14
+ class AnnotateEvaluationOptions(Model):
25
15
  reason: str
26
16
 
27
17
 
28
- class CreateEvaluationResultResult(EvaluationResult, Model):
29
- pass
18
+ class AnnotateEvaluationResult(Model):
19
+ uuid: str
20
+ score: int
21
+ normalized_score: int = Field(alias=str("normalizedScore"))
22
+ metadata: dict[str, Any]
23
+ has_passed: bool = Field(alias=str("hasPassed"))
24
+ created_at: datetime = Field(alias=str("createdAt"))
25
+ updated_at: datetime = Field(alias=str("updatedAt"))
26
+ version_uuid: str = Field(alias=str("versionUuid"))
27
+ error: Optional[Union[str, None]] = None
30
28
 
31
29
 
32
30
  class Evaluations:
@@ -37,34 +35,24 @@ class Evaluations:
37
35
  self._options = options
38
36
  self._client = client
39
37
 
40
- async def trigger(self, uuid: str, options: Optional[TriggerEvaluationOptions] = None) -> TriggerEvaluationResult:
41
- options = TriggerEvaluationOptions(**{**dict(self._options), **dict(options or {})})
42
-
43
- async with self._client.request(
44
- handler=RequestHandler.TriggerEvaluation,
45
- params=TriggerEvaluationRequestParams(
46
- conversation_uuid=uuid,
47
- ),
48
- body=TriggerEvaluationRequestBody(
49
- evaluation_uuids=options.evaluation_uuids,
50
- ),
51
- ) as response:
52
- return TriggerEvaluationResult.model_validate_json(response.content)
53
-
54
- async def create_result(
55
- self, uuid: str, evaluation_uuid: str, options: CreateEvaluationResultOptions
56
- ) -> CreateEvaluationResultResult:
57
- options = CreateEvaluationResultOptions(**{**dict(self._options), **dict(options)})
38
+ async def annotate(
39
+ self,
40
+ uuid: str,
41
+ evaluation_uuid: str,
42
+ score: int,
43
+ options: Optional[AnnotateEvaluationOptions] = None,
44
+ ) -> AnnotateEvaluationResult:
45
+ options = AnnotateEvaluationOptions(**{**dict(self._options), **dict(options or {})})
58
46
 
59
47
  async with self._client.request(
60
- handler=RequestHandler.CreateEvaluationResult,
61
- params=CreateEvaluationResultRequestParams(
48
+ handler=RequestHandler.AnnotateEvaluation,
49
+ params=AnnotateEvaluationRequestParams(
62
50
  conversation_uuid=uuid,
63
51
  evaluation_uuid=evaluation_uuid,
64
52
  ),
65
- body=CreateEvaluationResultRequestBody(
66
- result=options.result,
67
- reason=options.reason,
53
+ body=AnnotateEvaluationRequestBody(
54
+ score=score,
55
+ metadata=(AnnotateEvaluationRequestBody.Metadata(reason=options.reason) if options.reason else None),
68
56
  ),
69
57
  ) as response:
70
- return CreateEvaluationResultResult.model_validate_json(response.content)
58
+ return AnnotateEvaluationResult.model_validate_json(response.content)
latitude_sdk/sdk/types.py CHANGED
@@ -1,5 +1,15 @@
1
1
  from datetime import datetime
2
- from typing import Any, Callable, List, Literal, Optional, Protocol, Sequence, Union, runtime_checkable
2
+ from typing import (
3
+ Any,
4
+ Callable,
5
+ List,
6
+ Literal,
7
+ Optional,
8
+ Protocol,
9
+ Sequence,
10
+ Union,
11
+ runtime_checkable,
12
+ )
3
13
 
4
14
  from promptl_ai import Message, MessageLike
5
15
 
@@ -230,28 +240,6 @@ class Log(Model):
230
240
  updated_at: datetime = Field(alias=str("updatedAt"))
231
241
 
232
242
 
233
- class EvaluationResultType(StrEnum):
234
- Boolean = "evaluation_resultable_booleans"
235
- Text = "evaluation_resultable_texts"
236
- Number = "evaluation_resultable_numbers"
237
-
238
-
239
- class EvaluationResult(Model):
240
- id: int
241
- uuid: str
242
- evaluation_id: int = Field(alias=str("evaluationId"))
243
- document_log_id: int = Field(alias=str("documentLogId"))
244
- evaluated_provider_log_id: Optional[int] = Field(default=None, alias=str("evaluatedProviderLogId"))
245
- evaluation_provider_log_id: Optional[int] = Field(default=None, alias=str("evaluationProviderLogId"))
246
- resultable_type: Optional[EvaluationResultType] = Field(default=None, alias=str("resultableType"))
247
- resultable_id: Optional[int] = Field(default=None, alias=str("resultableId"))
248
- result: Optional[Union[str, bool, int]] = None
249
- source: Optional[LogSources] = None
250
- reason: Optional[str] = None
251
- created_at: datetime = Field(alias=str("createdAt"))
252
- updated_at: datetime = Field(alias=str("updatedAt"))
253
-
254
-
255
243
  class StreamCallbacks(Model):
256
244
  @runtime_checkable
257
245
  class OnEvent(Protocol):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: latitude-sdk
3
- Version: 2.1.2
3
+ Version: 3.0.0
4
4
  Summary: Latitude SDK for Python
5
5
  Project-URL: repository, https://github.com/latitude-dev/latitude-llm/tree/main/packages/sdks/python
6
6
  Project-URL: homepage, https://github.com/latitude-dev/latitude-llm/tree/main/packages/sdks/python#readme
@@ -2,19 +2,19 @@ latitude_sdk/__init__.py,sha256=-AbNXLmzDZeGbRdDIOpNjdCbacOvLBflSJwQtLlZfgk,19
2
2
  latitude_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  latitude_sdk/client/__init__.py,sha256=d8CnNB8UoGwcftiIeeC0twdg01qNvfpj-v7O40I7IiE,68
4
4
  latitude_sdk/client/client.py,sha256=Tlg0IU7_64O9yo0BfQEdVwVsjp-5_DUwJZqlX3uEb0w,4399
5
- latitude_sdk/client/payloads.py,sha256=GCMX9my5lj9bzTQNbgs3jcr9M0b-axt5g9xqey2bnSs,2860
6
- latitude_sdk/client/router.py,sha256=CiJnhXDJaqMh7H_bG4bOX-dlrELcpHVH_8l0ZRz7UZo,4414
5
+ latitude_sdk/client/payloads.py,sha256=XiGadgaZhCMKa2auBPLln6RTEt8RwEqx_H8FoSv5h2c,2554
6
+ latitude_sdk/client/router.py,sha256=sdNvUNXqoM5TDmvN7toyJWuI8Lt4Z6MhKmWWKitEFes,4218
7
7
  latitude_sdk/env/__init__.py,sha256=66of5veJ-u1aNI025L65Rrj321AjrYevMqomTMYIrPQ,19
8
8
  latitude_sdk/env/env.py,sha256=MnXexPOHE6aXcAszrDCbW7hzACUv4YtU1bfxpYwvHNw,455
9
9
  latitude_sdk/sdk/__init__.py,sha256=C9LlIjfnrS7KOK3-ruXKmbT77nSQMm23nZ6-t8sO8ME,137
10
10
  latitude_sdk/sdk/errors.py,sha256=9GlGdDE8LGy3dE2Ry_BipBg-tDbQx7LWXJfSnTJSSBE,1747
11
- latitude_sdk/sdk/evaluations.py,sha256=fDGtAWjdPG9OuKLit6u-jufVleC1EnshRplK6RN8iyg,2277
11
+ latitude_sdk/sdk/evaluations.py,sha256=yZPZRLXfaqnNop6axhMPB-Izj4AW98jvBhXBZfH-2qM,1845
12
12
  latitude_sdk/sdk/latitude.py,sha256=lUlGOiZXSFt0zm3sTHfBgjKzbcVJueMk6MXTGn9WCn8,2570
13
13
  latitude_sdk/sdk/logs.py,sha256=CyHkRJvPl_p7wTSvR9bgxEI5akS0Tjc9FeQRb2C2vMg,1997
14
14
  latitude_sdk/sdk/prompts.py,sha256=WztCpDSt0mxng0N2hyIrrzEw1TanqGRIl7Cpc_5ei4M,17369
15
- latitude_sdk/sdk/types.py,sha256=wGxwFEzHWShy6a2eGUt4NwRkKP_snvSrlH0rYwNYdgY,8568
15
+ latitude_sdk/sdk/types.py,sha256=e_AQ6YGRNgYvPJOxD5rndH5zPtslKMBhBtLocWlIHQE,7626
16
16
  latitude_sdk/util/__init__.py,sha256=alIDGBnxWH4JvP-UW-7N99seBBi0r1GV1h8f1ERFBec,21
17
17
  latitude_sdk/util/utils.py,sha256=hMOmF-u1QaDgOwXN6ME6n4TaQ70yZKLvijDUqNCMwXI,2844
18
- latitude_sdk-2.1.2.dist-info/METADATA,sha256=Af-YXAT2lZOY_cNR2ZhL1KpgkTdtRts8g2BEsimo4e4,2327
19
- latitude_sdk-2.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- latitude_sdk-2.1.2.dist-info/RECORD,,
18
+ latitude_sdk-3.0.0.dist-info/METADATA,sha256=ibP2KsIYVUvIMBkyLgFxJ8kDqiP4QA-z9YAy-Olj5fE,2327
19
+ latitude_sdk-3.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
+ latitude_sdk-3.0.0.dist-info/RECORD,,