trismik 1.0.1__py3-none-any.whl → 1.0.3__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.
trismik/_async/client.py CHANGED
@@ -20,6 +20,7 @@ from trismik.types import (
20
20
  TrismikClassicEvalRequest,
21
21
  TrismikClassicEvalResponse,
22
22
  TrismikDataset,
23
+ TrismikDatasetInfo,
23
24
  TrismikItem,
24
25
  TrismikMeResponse,
25
26
  TrismikProject,
@@ -173,9 +174,35 @@ class TrismikAsyncClient:
173
174
  except httpx.HTTPError as e:
174
175
  raise TrismikApiError(str(e)) from e
175
176
 
177
+ async def get_dataset_info(self, dataset_id: str) -> TrismikDatasetInfo:
178
+ """
179
+ Get detailed information about a specific dataset.
180
+
181
+ Args:
182
+ dataset_id (str): ID of the dataset to retrieve.
183
+
184
+ Returns:
185
+ TrismikDatasetInfo: Detailed dataset information including datacard.
186
+
187
+ Raises:
188
+ TrismikApiError: If API request fails.
189
+ """
190
+ try:
191
+ url = "/datasets/get-dataset"
192
+ body = {"datasetId": dataset_id}
193
+ response = await self._http_client.post(url, json=body)
194
+ response.raise_for_status()
195
+ json = response.json()
196
+ return TrismikResponseMapper.to_dataset_info(json)
197
+ except httpx.HTTPStatusError as e:
198
+ raise TrismikApiError(TrismikUtils.get_error_message(e.response)) from e
199
+ except httpx.HTTPError as e:
200
+ raise TrismikApiError(str(e)) from e
201
+
176
202
  async def start_run(
177
203
  self,
178
204
  dataset_id: str,
205
+ split: str,
179
206
  project_id: str,
180
207
  experiment: str,
181
208
  metadata: Optional[TrismikRunMetadata] = None,
@@ -185,6 +212,7 @@ class TrismikAsyncClient:
185
212
 
186
213
  Args:
187
214
  dataset_id (str): ID of the dataset.
215
+ split (str): Split of the dataset to use (e.g., "train", "test", "val").
188
216
  project_id (str): ID of the project.
189
217
  experiment (str): Name of the experiment.
190
218
  metadata (Optional[TrismikRunMetadata]): Run metadata.
@@ -201,6 +229,7 @@ class TrismikAsyncClient:
201
229
  url = "/runs/start"
202
230
  body = {
203
231
  "datasetId": dataset_id,
232
+ "split": split,
204
233
  "projectId": project_id,
205
234
  "experiment": experiment,
206
235
  "metadata": metadata.toDict() if metadata else {},
@@ -444,6 +473,7 @@ class TrismikAsyncClient:
444
473
  async def run( # noqa: E704
445
474
  self,
446
475
  test_id: str,
476
+ split: str,
447
477
  project_id: str,
448
478
  experiment: str,
449
479
  run_metadata: TrismikRunMetadata,
@@ -457,6 +487,7 @@ class TrismikAsyncClient:
457
487
  async def run( # noqa: E704
458
488
  self,
459
489
  test_id: str,
490
+ split: str,
460
491
  project_id: str,
461
492
  experiment: str,
462
493
  run_metadata: TrismikRunMetadata,
@@ -469,6 +500,7 @@ class TrismikAsyncClient:
469
500
  async def run(
470
501
  self,
471
502
  test_id: str,
503
+ split: str,
472
504
  project_id: str,
473
505
  experiment: str,
474
506
  run_metadata: TrismikRunMetadata,
@@ -482,6 +514,7 @@ class TrismikAsyncClient:
482
514
 
483
515
  Args:
484
516
  test_id: ID of the test to run.
517
+ split: Split of the dataset to use (e.g., "train", "test", "val").
485
518
  project_id: ID of the project.
486
519
  experiment: Name of the experiment.
487
520
  run_metadata: Metadata for the run.
@@ -502,7 +535,7 @@ class TrismikAsyncClient:
502
535
  raise NotImplementedError("with_responses is not yet implemented for the new API flow")
503
536
 
504
537
  # Start run and get first item
505
- start_response = await self.start_run(test_id, project_id, experiment, run_metadata)
538
+ start_response = await self.start_run(test_id, split, project_id, experiment, run_metadata)
506
539
 
507
540
  # Initialize state tracking
508
541
  states: List[TrismikAdaptiveTestState] = []
trismik/_mapper.py CHANGED
@@ -4,7 +4,10 @@ from typing import Any, Dict, List
4
4
  from trismik.exceptions import TrismikApiError
5
5
  from trismik.types import (
6
6
  TrismikClassicEvalResponse,
7
+ TrismikDatacard,
7
8
  TrismikDataset,
9
+ TrismikDatasetInfo,
10
+ TrismikDatasetVersion,
8
11
  TrismikItem,
9
12
  TrismikMeResponse,
10
13
  TrismikMultipleChoiceTextItem,
@@ -40,17 +43,64 @@ class TrismikResponseMapper:
40
43
  json (Dict[str, Any]): JSON response containing dataset data.
41
44
 
42
45
  Returns:
43
- List[TrismikDataset]: List of
44
- dataset objects with IDs and names.
46
+ List[TrismikDataset]: List of dataset objects with IDs, names,
47
+ adaptive status, and splits.
45
48
  """
46
49
  return [
47
50
  TrismikDataset(
48
51
  id=item["id"],
49
52
  name=item["name"],
53
+ isAdaptive=item["isAdaptive"],
54
+ splits=item["splits"],
50
55
  )
51
56
  for item in json["data"]
52
57
  ]
53
58
 
59
+ @staticmethod
60
+ def to_dataset_info(json: Dict[str, Any]) -> TrismikDatasetInfo:
61
+ """
62
+ Convert JSON response to a TrismikDatasetInfo object.
63
+
64
+ Args:
65
+ json (Dict[str, Any]): JSON response containing detailed dataset
66
+ information.
67
+
68
+ Returns:
69
+ TrismikDatasetInfo: Dataset info object with complete metadata
70
+ including datacard.
71
+ """
72
+ version = TrismikDatasetVersion(
73
+ year=json["datacard"]["version"]["year"],
74
+ month=json["datacard"]["version"]["month"],
75
+ revision=json["datacard"]["version"]["revision"],
76
+ )
77
+
78
+ datacard = TrismikDatacard(
79
+ task=json["datacard"]["task"],
80
+ license=json["datacard"]["license"],
81
+ version=version,
82
+ datasetHf=json["datacard"]["datasetHf"],
83
+ languages=json["datacard"]["languages"],
84
+ datasetUrl=json["datacard"]["datasetUrl"],
85
+ itemsCount=json["datacard"]["itemsCount"],
86
+ splitsUsed=json["datacard"]["splitsUsed"],
87
+ datasetName=json["datacard"]["datasetName"],
88
+ description=json["datacard"]["description"],
89
+ exampleItem=json["datacard"]["exampleItem"],
90
+ originalReadmeUrl=json["datacard"]["originalReadmeUrl"],
91
+ originalReadmeDownloadedAt=json["datacard"]["originalReadmeDownloadedAt"],
92
+ originalItemCount=json["datacard"]["originalItemCount"],
93
+ difficultyEstimators=json["datacard"]["difficultyEstimators"],
94
+ )
95
+
96
+ return TrismikDatasetInfo(
97
+ id=json["id"],
98
+ name=json["name"],
99
+ isAdaptive=json["isAdaptive"],
100
+ splits=json["splits"],
101
+ datacard=datacard,
102
+ )
103
+
54
104
  @staticmethod
55
105
  def to_run(json: Dict[str, Any]) -> TrismikRun:
56
106
  """
trismik/_sync/client.py CHANGED
@@ -20,6 +20,7 @@ from trismik.types import (
20
20
  TrismikClassicEvalRequest,
21
21
  TrismikClassicEvalResponse,
22
22
  TrismikDataset,
23
+ TrismikDatasetInfo,
23
24
  TrismikItem,
24
25
  TrismikMeResponse,
25
26
  TrismikProject,
@@ -173,9 +174,35 @@ class TrismikClient:
173
174
  except httpx.HTTPError as e:
174
175
  raise TrismikApiError(str(e)) from e
175
176
 
177
+ def get_dataset_info(self, dataset_id: str) -> TrismikDatasetInfo:
178
+ """
179
+ Get detailed information about a specific dataset.
180
+
181
+ Args:
182
+ dataset_id (str): ID of the dataset to retrieve.
183
+
184
+ Returns:
185
+ TrismikDatasetInfo: Detailed dataset information including datacard.
186
+
187
+ Raises:
188
+ TrismikApiError: If API request fails.
189
+ """
190
+ try:
191
+ url = "/datasets/get-dataset"
192
+ body = {"datasetId": dataset_id}
193
+ response = self._http_client.post(url, json=body)
194
+ response.raise_for_status()
195
+ json = response.json()
196
+ return TrismikResponseMapper.to_dataset_info(json)
197
+ except httpx.HTTPStatusError as e:
198
+ raise TrismikApiError(TrismikUtils.get_error_message(e.response)) from e
199
+ except httpx.HTTPError as e:
200
+ raise TrismikApiError(str(e)) from e
201
+
176
202
  def start_run(
177
203
  self,
178
204
  dataset_id: str,
205
+ split: str,
179
206
  project_id: str,
180
207
  experiment: str,
181
208
  metadata: Optional[TrismikRunMetadata] = None,
@@ -185,6 +212,7 @@ class TrismikClient:
185
212
 
186
213
  Args:
187
214
  dataset_id (str): ID of the dataset.
215
+ split (str): Split of the dataset to use (e.g., "train", "test", "val").
188
216
  project_id (str): ID of the project.
189
217
  experiment (str): Name of the experiment.
190
218
  metadata (Optional[TrismikRunMetadata]): Run metadata.
@@ -201,6 +229,7 @@ class TrismikClient:
201
229
  url = "/runs/start"
202
230
  body = {
203
231
  "datasetId": dataset_id,
232
+ "split": split,
204
233
  "projectId": project_id,
205
234
  "experiment": experiment,
206
235
  "metadata": metadata.toDict() if metadata else {},
@@ -444,6 +473,7 @@ class TrismikClient:
444
473
  def run( # noqa: E704
445
474
  self,
446
475
  test_id: str,
476
+ split: str,
447
477
  project_id: str,
448
478
  experiment: str,
449
479
  run_metadata: TrismikRunMetadata,
@@ -457,6 +487,7 @@ class TrismikClient:
457
487
  def run( # noqa: E704
458
488
  self,
459
489
  test_id: str,
490
+ split: str,
460
491
  project_id: str,
461
492
  experiment: str,
462
493
  run_metadata: TrismikRunMetadata,
@@ -469,6 +500,7 @@ class TrismikClient:
469
500
  def run(
470
501
  self,
471
502
  test_id: str,
503
+ split: str,
472
504
  project_id: str,
473
505
  experiment: str,
474
506
  run_metadata: TrismikRunMetadata,
@@ -482,6 +514,7 @@ class TrismikClient:
482
514
 
483
515
  Args:
484
516
  test_id: ID of the test to run.
517
+ split: Split of the dataset to use (e.g., "train", "test", "val").
485
518
  project_id: ID of the project.
486
519
  experiment: Name of the experiment.
487
520
  run_metadata: Metadata for the run.
@@ -502,7 +535,7 @@ class TrismikClient:
502
535
  raise NotImplementedError("with_responses is not yet implemented for the new API flow")
503
536
 
504
537
  # Start run and get first item
505
- start_response = self.start_run(test_id, project_id, experiment, run_metadata)
538
+ start_response = self.start_run(test_id, split, project_id, experiment, run_metadata)
506
539
 
507
540
  # Initialize state tracking
508
541
  states: List[TrismikAdaptiveTestState] = []
trismik/types.py CHANGED
@@ -16,6 +16,49 @@ class TrismikDataset:
16
16
 
17
17
  id: str
18
18
  name: str
19
+ isAdaptive: bool
20
+ splits: List[str]
21
+
22
+
23
+ @dataclass
24
+ class TrismikDatasetVersion:
25
+ """Version information for a dataset."""
26
+
27
+ year: int
28
+ month: int
29
+ revision: int
30
+
31
+
32
+ @dataclass
33
+ class TrismikDatacard:
34
+ """Detailed metadata card for a dataset."""
35
+
36
+ task: str
37
+ license: str
38
+ version: "TrismikDatasetVersion"
39
+ datasetHf: str
40
+ languages: List[str]
41
+ datasetUrl: str
42
+ itemsCount: int
43
+ splitsUsed: List[str]
44
+ datasetName: str
45
+ description: str
46
+ exampleItem: str
47
+ originalReadmeUrl: str
48
+ originalReadmeDownloadedAt: str
49
+ originalItemCount: int
50
+ difficultyEstimators: List[str]
51
+
52
+
53
+ @dataclass
54
+ class TrismikDatasetInfo:
55
+ """Complete dataset information including datacard."""
56
+
57
+ id: str
58
+ name: str
59
+ isAdaptive: bool
60
+ splits: List[str]
61
+ datacard: TrismikDatacard
19
62
 
20
63
 
21
64
  @dataclass
@@ -1,29 +1,27 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trismik
3
- Version: 1.0.1
3
+ Version: 1.0.3
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Bartosz Kielczewski
7
7
  Author-email: bk352@cam.ac.uk
8
- Requires-Python: >=3.9, <3.14
8
+ Requires-Python: >=3.10
9
9
  Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.9
11
10
  Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
15
  Provides-Extra: examples
16
16
  Requires-Dist: accelerate (>=1.7.0,<2.0.0) ; extra == "examples"
17
17
  Requires-Dist: httpx (>=0.27.2,<1.0.0)
18
18
  Requires-Dist: jupyterlab (>=4.4.8) ; extra == "examples"
19
19
  Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
20
20
  Requires-Dist: notebook (>=7.4.4,<8.0.0) ; extra == "examples"
21
- Requires-Dist: openai (>=1.81.0,<2.0.0) ; extra == "examples"
22
- Requires-Dist: torch (>=2.8.0,<3.0.0) ; extra == "examples"
23
- Requires-Dist: torchaudio (>=2.7.0,<3.0.0) ; extra == "examples"
24
- Requires-Dist: torchvision (>=0.22.0,<1.0.0) ; extra == "examples"
21
+ Requires-Dist: openai (>=2.16.0,<3.0.0) ; extra == "examples"
22
+ Requires-Dist: torch (>=2.10.0,<3.0.0) ; (python_version < "3.15") and (extra == "examples")
25
23
  Requires-Dist: tqdm (>=4.67.1,<5.0.0) ; extra == "examples"
26
- Requires-Dist: transformers (>=4.51.3,<5.0.0) ; extra == "examples"
24
+ Requires-Dist: transformers (>=5.0.0,<6.0.0) ; extra == "examples"
27
25
  Description-Content-Type: text/markdown
28
26
 
29
27
  <h1 align="center"> Trismik SDK</h1>
@@ -1,18 +1,18 @@
1
1
  trismik/__init__.py,sha256=LiS6Mo8iHMPKerVWFNVmn-V8dsoXHrHo-qG1FAakHcY,770
2
2
  trismik/_async/__init__.py,sha256=9ZJB9Amqym2QQT_aLzM_6gx9qNCOY14cq_Oc7gu7O1I,64
3
3
  trismik/_async/_test_transform.py,sha256=N5eS1dSHXBTLXaB7kO3IPHD4gScm4XSMMcg8nVc7Dl4,1760
4
- trismik/_async/client.py,sha256=TDw_aKYdnnTy0nMSdwWM5k61yWnNgA0L7p62y21nf_M,25474
4
+ trismik/_async/client.py,sha256=t4MsC7EcxxyEqMuUr0Ec5puXOISVbaPHesBsCTYyjks,26705
5
5
  trismik/_async/helpers.py,sha256=7Kd6w0KRs_MsBpBM4ctstsEGHIf_vq9QmdqWcIFlYjE,694
6
- trismik/_mapper.py,sha256=E8vK2KDP_o9zUkOiTTtjEC324UYBuyElug0b-JgY5NE,10706
6
+ trismik/_mapper.py,sha256=eRoamnaY5DAO8oG0gPqBO5SLjXnNnbpDPquAM48-4EE,12664
7
7
  trismik/_sync/__init__.py,sha256=9ZJB9Amqym2QQT_aLzM_6gx9qNCOY14cq_Oc7gu7O1I,64
8
8
  trismik/_sync/_test_transform.py,sha256=bJn4Yorqyqinb9Tv5257vSwy42oCrdXvvut0ZbbCeL4,1675
9
- trismik/_sync/client.py,sha256=WxSREg2BdjcgEhfXnXU5ei-tVo6vGpuaw1-6wAaWn1A,25238
9
+ trismik/_sync/client.py,sha256=B3UivqrEAa4LGRvV7uleHKeE1uiVnIhJjwIOAWiBiss,26457
10
10
  trismik/_sync/helpers.py,sha256=9mPILjtT-Yh9EMtiILdYSy0Pt3De9jId5F-iJAPL1Pw,723
11
11
  trismik/_utils.py,sha256=ckOg4PEjbTPaSH_q7QSGdoML4Rn1G5TRcSMnEluYhHk,3818
12
12
  trismik/exceptions.py,sha256=2wb4_K7GdDf00s3xUaiSfw6718ZV3Eaa4M2lYbiEZl4,1945
13
13
  trismik/settings.py,sha256=ErXj3f9Uw1AgewytjxmIY7TmM5jB7RE_LJMp3T7szBY,419
14
- trismik/types.py,sha256=zo6QcXpo7ZfdEntvJDzftBPq_8_g0fS-XDfNTtKVg8k,6555
15
- trismik-1.0.1.dist-info/METADATA,sha256=sSYNA3Oin5IcqQsalA4SjV2uTMdBUxPTv-U19JqFbNQ,9339
16
- trismik-1.0.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
17
- trismik-1.0.1.dist-info/licenses/LICENSE,sha256=tgetRhapGLh7ZxfknW6Mm-WobfziPd64nAK52X5XKaw,1077
18
- trismik-1.0.1.dist-info/RECORD,,
14
+ trismik/types.py,sha256=4ywSAKyifW8vMPex5aN1ASZAEPsRCYLz1zugjtzLgiw,7383
15
+ trismik-1.0.3.dist-info/METADATA,sha256=MIjvQAYkCo-fSCs21FkjC8c0_Gb4nXsmHs2kex5sD0Y,9234
16
+ trismik-1.0.3.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
17
+ trismik-1.0.3.dist-info/licenses/LICENSE,sha256=tgetRhapGLh7ZxfknW6Mm-WobfziPd64nAK52X5XKaw,1077
18
+ trismik-1.0.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any