dyff-schema 0.38.8__py3-none-any.whl → 0.39.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.
dyff/schema/_version.py CHANGED
@@ -1,2 +1,2 @@
1
- __version__ = version = "0.38.8"
2
- __version_tuple__ = version_tuple = (0, 38, 8)
1
+ __version__ = version = "0.39.0"
2
+ __version_tuple__ = version_tuple = (0, 39, 0)
@@ -216,6 +216,7 @@ class Entities(str, enum.Enum):
216
216
  AuditProcedure = "AuditProcedure"
217
217
  Challenge = "Challenge"
218
218
  Concern = "Concern"
219
+ Curve = "Curve"
219
220
  DataSource = "DataSource"
220
221
  Dataset = "Dataset"
221
222
  Documentation = "Documentation"
@@ -256,6 +257,7 @@ class Resources(str, enum.Enum):
256
257
  AuditProcedure = "auditprocedures"
257
258
  Challenge = "challenges"
258
259
  Concern = "concerns"
260
+ Curve = "curves"
259
261
  Dataset = "datasets"
260
262
  DataSource = "datasources"
261
263
  Descriptor = "descriptors"
@@ -309,6 +311,7 @@ EntityKindLiteral = Literal[
309
311
  "Audit",
310
312
  "AuditProcedure",
311
313
  "Challenge",
314
+ "Curve",
312
315
  "DataSource",
313
316
  "Dataset",
314
317
  "Evaluation",
@@ -435,7 +438,7 @@ class Labeled(DyffSchemaBaseModel):
435
438
  class Annotation(DyffSchemaBaseModel):
436
439
  key: str = pydantic.Field(
437
440
  pattern=_k8s_label_key_regex(),
438
- max_length=_k8s_domain_maxlen(),
441
+ max_length=_k8s_label_key_maxlen(),
439
442
  description="The annotation key. A DNS label with an optional DNS domain prefix."
440
443
  " For example: 'my-key', 'your.com/key_0'. Names prefixed with"
441
444
  " 'dyff.io/', 'subdomain.dyff.io/', etc. are reserved.\n\n"
@@ -541,6 +544,7 @@ class DyffEntity(Status, Labeled, SchemaVersion, DyffModelWithID):
541
544
  "Audit",
542
545
  "AuditProcedure",
543
546
  "Challenge",
547
+ "Curve",
544
548
  "DataSource",
545
549
  "Dataset",
546
550
  "Evaluation",
@@ -1442,6 +1446,21 @@ class VolumeMount(DyffSchemaBaseModel):
1442
1446
  default=None, description="Configuration for Scratch volume mounts."
1443
1447
  )
1444
1448
 
1449
+ @pydantic.model_validator(mode="after")
1450
+ def _validate_kind_matches_payload(self):
1451
+ """Ensure payload fields match declared kind."""
1452
+ if self.kind == VolumeMountKind.data:
1453
+ if self.data is None or self.scratch is not None:
1454
+ raise ValueError(
1455
+ "VolumeMount(kind='Data') requires .data and forbids .scratch"
1456
+ )
1457
+ elif self.kind == VolumeMountKind.scratch:
1458
+ if self.scratch is None or self.data is not None:
1459
+ raise ValueError(
1460
+ "VolumeMount(kind='Scratch') requires .scratch and forbids .data"
1461
+ )
1462
+ return self
1463
+
1445
1464
 
1446
1465
  class Container(DyffSchemaBaseModel):
1447
1466
  """Configuration of a runnable container backed by either an image hosted in an
@@ -1489,6 +1508,15 @@ class Container(DyffSchemaBaseModel):
1489
1508
  " which might be configured in the container image.",
1490
1509
  )
1491
1510
 
1511
+ @pydantic.model_validator(mode="after")
1512
+ def _validate_image_or_ref(self):
1513
+ """Exactly one of image or imageRef must be set."""
1514
+ has_image = self.image is not None
1515
+ has_ref = self.imageRef is not None
1516
+ if has_image == has_ref:
1517
+ raise ValueError("Exactly one of 'image' or 'imageRef' must be set.")
1518
+ return self
1519
+
1492
1520
 
1493
1521
  class InferenceServiceRunner(Container):
1494
1522
  """Configuration of the runtime environment to use to run an inference service.
@@ -2101,6 +2129,34 @@ class ScoreSpec(DyffSchemaBaseModel):
2101
2129
  return format.format(quantity=quantity, unit=unit)
2102
2130
 
2103
2131
 
2132
+ class CurveSpec(DyffSchemaBaseModel):
2133
+ """Metadata describing the curve dimensions and how to read them.
2134
+
2135
+ - `dimensions` supplies per-dimension metadata (name -> ScoreSpec).
2136
+ - Use these keys as columns in `CurveData.points`.
2137
+ """
2138
+
2139
+ name: str = pydantic.Field(
2140
+ description="Unique key for this curve within the Method context.",
2141
+ pattern=identifier_regex(),
2142
+ max_length=identifier_maxlen(),
2143
+ )
2144
+ title: str = pydantic.Field(
2145
+ description="Human-friendly title for the curve.",
2146
+ max_length=title_maxlen(),
2147
+ )
2148
+ summary: str = pydantic.Field(
2149
+ description="Short description of what the curve shows.",
2150
+ max_length=summary_maxlen(),
2151
+ )
2152
+ dimensions: dict[str, ScoreSpec] = pydantic.Field(
2153
+ description=(
2154
+ "Per-dimension metadata. Keys must match the columns stored in CurveData.points. "
2155
+ "Typical keys might include 'x', 'y', 'threshold', 'tp', 'fp', etc."
2156
+ )
2157
+ )
2158
+
2159
+
2104
2160
  class MethodBase(DyffSchemaBaseModel):
2105
2161
  name: str = pydantic.Field(description="Descriptive name of the Method.")
2106
2162
 
@@ -2131,7 +2187,7 @@ class MethodBase(DyffSchemaBaseModel):
2131
2187
  description="Specification of the Method output."
2132
2188
  )
2133
2189
 
2134
- scores: list[ScoreSpec] = pydantic.Field(
2190
+ scores: list[Union[ScoreSpec, CurveSpec]] = pydantic.Field(
2135
2191
  default_factory=list,
2136
2192
  description="Specifications of the Scores that this Method produces.",
2137
2193
  )
@@ -2149,12 +2205,13 @@ class MethodBase(DyffSchemaBaseModel):
2149
2205
  )
2150
2206
 
2151
2207
  @pydantic.field_validator("scores")
2152
- def _scores_validator(cls, scores: list[ScoreSpec]):
2153
- if len(scores) > 0:
2154
- primary_count = sum(score.priority == "primary" for score in scores)
2208
+ def _scores_validator(cls, scores):
2209
+ score_specs = [s for s in scores if isinstance(s, ScoreSpec)]
2210
+ if score_specs:
2211
+ primary_count = sum(s.priority == "primary" for s in score_specs)
2155
2212
  if primary_count != 1:
2156
2213
  raise ValueError(
2157
- "scores: Must have exactly one score with .priority == 'primary'"
2214
+ "scores: Must have exactly one primary ScoreSpec (curves excluded)"
2158
2215
  )
2159
2216
  return scores
2160
2217
 
@@ -2329,17 +2386,19 @@ class ScoreData(ScoreSpec):
2329
2386
  description="The Analysis that generated the current score instance."
2330
2387
  )
2331
2388
 
2332
- quantity: float = pydantic.Field(
2333
- description="The numeric quantity associated with the score."
2389
+ quantity: float | None = pydantic.Field(
2390
+ default=None, description="Numeric quantity for scalar scores."
2391
+ )
2392
+ points: dict[str, list[float]] | None = pydantic.Field(
2393
+ default=None,
2394
+ description="Aligned vectors for curve scores. Keys should match curve.dimensions.",
2334
2395
  )
2335
2396
 
2336
2397
  quantityString: str = pydantic.Field(
2337
- description="The formatted string representation of .quantity,"
2338
- " after processing with the .format specification."
2398
+ description="Formatted string representation of .quantity (scalar) or a summary string (curve)."
2339
2399
  )
2340
-
2341
2400
  text: str = pydantic.Field(
2342
- description="A short text description of what the quantity means.",
2401
+ description="Short text description of what the value/curve means.",
2343
2402
  max_length=summary_maxlen(),
2344
2403
  )
2345
2404
 
@@ -2355,6 +2414,53 @@ class Score(ScoreData):
2355
2414
  id: str = pydantic.Field(description="Unique identifier of the entity")
2356
2415
 
2357
2416
 
2417
+ class CurveData(CurveSpec):
2418
+ """An instance of a curve produced by an analysis.
2419
+
2420
+ - Inherits the curve spec (name/title/summary/dimensions) directly.
2421
+ - `points` is a dict-of-lists: each key is a dimension name defined in `dimensions`.
2422
+ - All lists must be the same (non-zero) length.
2423
+
2424
+ spec: CurveSpec = pydantic.Field(description="The CurveSpec this data conforms to.")
2425
+ """
2426
+
2427
+ metadata: ScoreMetadata = pydantic.Field(
2428
+ description="Indexing metadata (method required).",
2429
+ )
2430
+ analysis: str = pydantic.Field(
2431
+ description="ID of the Analysis that produced this curve."
2432
+ )
2433
+ points: dict[str, list[float]] = pydantic.Field(
2434
+ description="Aligned vectors for each dimension; all lists must have equal length >= 1."
2435
+ )
2436
+
2437
+ @pydantic.model_validator(mode="after")
2438
+ def _validate_points(self):
2439
+ if not self.points:
2440
+ raise ValueError("CurveData.points must not be empty")
2441
+
2442
+ lengths = {k: len(v) for k, v in self.points.items()}
2443
+ uniq = set(lengths.values())
2444
+ if len(uniq) != 1:
2445
+ raise ValueError(
2446
+ f"All vectors must have equal length; got lengths {lengths}"
2447
+ )
2448
+ n = next(iter(uniq))
2449
+ if n < 1:
2450
+ raise ValueError("Vectors must contain at least 1 point")
2451
+
2452
+ missing = [k for k in self.dimensions.keys() if k not in self.points]
2453
+ if missing:
2454
+ raise ValueError(f"points is missing required dimensions: {missing}")
2455
+ return self
2456
+
2457
+
2458
+ class Curve(CurveData):
2459
+ kind: Literal["Curve"] = Entities.Curve.value
2460
+
2461
+ id: str = pydantic.Field(description="Unique identifier of the entity")
2462
+
2463
+
2358
2464
  # ---------------------------------------------------------------------------
2359
2465
  # OCI artifacts
2360
2466
 
@@ -2635,6 +2741,19 @@ class ChallengeTaskSchedule(DyffSchemaBaseModel):
2635
2741
  description="Teams are limited to this many submissions per cycle.",
2636
2742
  )
2637
2743
 
2744
+ @pydantic.model_validator(mode="after")
2745
+ def _validate_times(self):
2746
+ """Basic temporal sanity checks."""
2747
+ if (
2748
+ self.openingTime
2749
+ and self.closingTime
2750
+ and self.closingTime <= self.openingTime
2751
+ ):
2752
+ raise ValueError("closingTime must be after openingTime")
2753
+ if self.submissionCycleDuration <= timedelta(0):
2754
+ raise ValueError("submissionCycleDuration must be positive")
2755
+ return self
2756
+
2638
2757
 
2639
2758
  class ChallengeTaskRules(DyffSchemaBaseModel):
2640
2759
  """The rules of the challenge."""
@@ -2656,7 +2775,7 @@ class ChallengeTaskContent(DyffSchemaBaseModel):
2656
2775
  )
2657
2776
 
2658
2777
 
2659
- class ChallengeSubmissionStructure(DyffSchemaBaseModel):
2778
+ class SubmissionStructure(DyffSchemaBaseModel):
2660
2779
  submissionKind: EntityKindLiteral = pydantic.Field(
2661
2780
  default=Entities.InferenceService.value,
2662
2781
  description="The kind of entity that you can submit to this task.",
@@ -2679,12 +2798,13 @@ class ChallengeTaskBase(DyffSchemaBaseModel):
2679
2798
  " This may appear in URLs and must follow naming restrictions.",
2680
2799
  max_length=title_maxlen(),
2681
2800
  pattern=r"[a-z0-9-]*",
2801
+ min_length=1,
2682
2802
  )
2683
2803
  assessment: str = pydantic.Field(
2684
2804
  description="ID of the Pipeline used to assess the submission."
2685
2805
  )
2686
- submissionStructure: ChallengeSubmissionStructure = pydantic.Field(
2687
- default_factory=ChallengeSubmissionStructure,
2806
+ submissionStructure: SubmissionStructure = pydantic.Field(
2807
+ default_factory=SubmissionStructure,
2688
2808
  description="How to run the assessment pipeline on a new submission.",
2689
2809
  )
2690
2810
  rules: ChallengeTaskRules = pydantic.Field(description="The rules for submissions.")
@@ -2745,14 +2865,14 @@ class Challenge(DyffEntity):
2745
2865
  return None
2746
2866
 
2747
2867
 
2748
- class ChallengeSubmissionBase(DyffSchemaBaseModel):
2868
+ class SubmissionBase(DyffSchemaBaseModel):
2749
2869
  team: str = pydantic.Field(description="The ID of the team making the submission.")
2750
2870
  submission: EntityIdentifier = pydantic.Field(
2751
2871
  description="The resource being submitted for assessment."
2752
2872
  )
2753
2873
 
2754
2874
 
2755
- class ChallengeSubmission(DyffEntity, ChallengeSubmissionBase):
2875
+ class Submission(DyffEntity, SubmissionBase):
2756
2876
  """A submission of an inference system to a challenge by a team.
2757
2877
 
2758
2878
  All of the constituent resources must already exist. Creating a Submission simply
@@ -2788,27 +2908,31 @@ class PipelineEvaluationRequest(EvaluationRequestBase):
2788
2908
  kind: Literal["PipelineEvaluationRequest"] = "PipelineEvaluationRequest"
2789
2909
 
2790
2910
  def dependencies(self) -> list[str]:
2791
- # This is a dirty hack that works because the types are structurally
2792
- # equivalent as far as .dependencies() cares
2793
- return Evaluation.dependencies(self) # type: ignore[arg-type]
2911
+ if self.inferenceSession is None:
2912
+ raise AssertionError()
2913
+ return [self.dataset, self.inferenceSession.inferenceService]
2914
+
2915
+ @pydantic.model_validator(mode="after")
2916
+ def check_session_not_reference(self):
2917
+ if self.inferenceSession is None or self.inferenceSessionReference is not None:
2918
+ raise ValueError(
2919
+ "evaluations in pipelines must set inferenceSession, not inferenceSessionReference"
2920
+ )
2921
+ return self
2794
2922
 
2795
2923
 
2796
2924
  class PipelineMeasurementRequest(AnalysisRequestBase):
2797
2925
  kind: Literal["PipelineMeasurementRequest"] = "PipelineMeasurementRequest"
2798
2926
 
2799
2927
  def dependencies(self) -> list[str]:
2800
- # This is a dirty hack that works because the types are structurally
2801
- # equivalent as far as .dependencies() cares
2802
- return Measurement.dependencies(self) # type: ignore[arg-type]
2928
+ return [self.method] + [x.entity for x in self.inputs]
2803
2929
 
2804
2930
 
2805
2931
  class PipelineSafetyCaseRequest(AnalysisRequestBase):
2806
2932
  kind: Literal["PipelineSafetyCaseRequest"] = "PipelineSafetyCaseRequest"
2807
2933
 
2808
2934
  def dependencies(self) -> list[str]:
2809
- # This is a dirty hack that works because the types are structurally
2810
- # equivalent as far as .dependencies() cares
2811
- return SafetyCase.dependencies(self) # type: ignore[arg-type]
2935
+ return [self.method] + [x.entity for x in self.inputs]
2812
2936
 
2813
2937
 
2814
2938
  PipelineNodeRequest = Union[
@@ -2863,8 +2987,9 @@ class PipelineParameter(DyffSchemaBaseModel):
2863
2987
 
2864
2988
  keyword: str = pydantic.Field(description="The keyword of the parameter.")
2865
2989
  destination: Optional[str] = pydantic.Field(
2990
+ default=None,
2866
2991
  description="The field in a pipeline node to substitute with the"
2867
- " parameter value. Should be a string like 'node_name.field1.field2'."
2992
+ " parameter value. Should be a string like 'node_name.field1.field2'.",
2868
2993
  )
2869
2994
  description: Optional[str] = pydantic.Field(
2870
2995
  default=None,
@@ -2880,7 +3005,8 @@ class PipelineBase(DyffSchemaBaseModel):
2880
3005
  min_length=1,
2881
3006
  )
2882
3007
  parameters: dict[str, PipelineParameter] = pydantic.Field(
2883
- description="Input parameters used to customize the pipeline."
3008
+ default_factory=dict,
3009
+ description="Input parameters used to customize the pipeline.",
2884
3010
  )
2885
3011
 
2886
3012
  @pydantic.field_validator("nodes", mode="after")
@@ -3201,7 +3327,6 @@ _DyffEntityTypeRevisable = Union[
3201
3327
  Audit,
3202
3328
  AuditProcedure,
3203
3329
  Challenge,
3204
- ChallengeSubmission,
3205
3330
  DataSource,
3206
3331
  Dataset,
3207
3332
  Evaluation,
@@ -3218,6 +3343,7 @@ _DyffEntityTypeRevisable = Union[
3218
3343
  PipelineRun,
3219
3344
  Report,
3220
3345
  SafetyCase,
3346
+ Submission,
3221
3347
  Team,
3222
3348
  UseCase,
3223
3349
  ]
@@ -3297,7 +3423,7 @@ _ENTITY_CLASS: dict[Entities, type[DyffEntityType]] = {
3297
3423
  Entities.Report: Report,
3298
3424
  Entities.Revision: Revision,
3299
3425
  Entities.SafetyCase: SafetyCase,
3300
- Entities.Submission: ChallengeSubmission,
3426
+ Entities.Submission: Submission,
3301
3427
  Entities.Team: Team,
3302
3428
  Entities.UseCase: UseCase,
3303
3429
  }
@@ -3313,7 +3439,6 @@ DyffEntityT = TypeVar(
3313
3439
  Audit,
3314
3440
  AuditProcedure,
3315
3441
  Challenge,
3316
- ChallengeSubmission,
3317
3442
  DataSource,
3318
3443
  Dataset,
3319
3444
  Evaluation,
@@ -3332,6 +3457,7 @@ DyffEntityT = TypeVar(
3332
3457
  Report,
3333
3458
  Revision,
3334
3459
  SafetyCase,
3460
+ Submission,
3335
3461
  Team,
3336
3462
  UseCase,
3337
3463
  )
@@ -3363,8 +3489,6 @@ __all__ = [
3363
3489
  "Challenge",
3364
3490
  "ChallengeContent",
3365
3491
  "ChallengeContentPage",
3366
- "ChallengeSubmission",
3367
- "ChallengeSubmissionBase",
3368
3492
  "ChallengeTask",
3369
3493
  "ChallengeTaskBase",
3370
3494
  "ChallengeTaskContent",
@@ -3376,6 +3500,9 @@ __all__ = [
3376
3500
  "ConcernBase",
3377
3501
  "Container",
3378
3502
  "ContainerImageSource",
3503
+ "Curve",
3504
+ "CurveData",
3505
+ "CurveSpec",
3379
3506
  "DataSchema",
3380
3507
  "Dataset",
3381
3508
  "DatasetBase",
@@ -3501,6 +3628,9 @@ __all__ = [
3501
3628
  "ScoreMetadataRefs",
3502
3629
  "Status",
3503
3630
  "StorageSignedURL",
3631
+ "Submission",
3632
+ "SubmissionBase",
3633
+ "SubmissionStructure",
3504
3634
  "TagName",
3505
3635
  "TagNameType",
3506
3636
  "TaskSchema",
@@ -27,7 +27,6 @@ from .platform import (
27
27
  AnalysisRequestBase,
28
28
  AnalysisScope,
29
29
  ChallengeContent,
30
- ChallengeSubmissionBase,
31
30
  ChallengeTaskBase,
32
31
  ConcernBase,
33
32
  DatasetBase,
@@ -46,6 +45,7 @@ from .platform import (
46
45
  PipelineBase,
47
46
  PipelineRunBase,
48
47
  ReportBase,
48
+ SubmissionBase,
49
49
  TagNameType,
50
50
  TeamBase,
51
51
  summary_maxlen,
@@ -149,9 +149,7 @@ class ChallengeCreateRequest(DyffEntityCreateRequest):
149
149
  )
150
150
 
151
151
 
152
- class ChallengeSubmissionCreateRequest(
153
- DyffEntityCreateRequest, ChallengeSubmissionBase
154
- ):
152
+ class SubmissionCreateRequest(DyffEntityCreateRequest, SubmissionBase):
155
153
  pass
156
154
 
157
155
 
@@ -504,7 +502,6 @@ __all__ = [
504
502
  "ChallengeContentEditRequest",
505
503
  "ChallengeCreateRequest",
506
504
  "ChallengeQueryRequest",
507
- "ChallengeSubmissionCreateRequest",
508
505
  "ChallengeTaskCreateRequest",
509
506
  "ChallengeTaskRulesEditRequest",
510
507
  "ChallengeTeamCreateRequest",
@@ -544,6 +541,7 @@ __all__ = [
544
541
  "ReportQueryRequest",
545
542
  "SafetyCaseQueryRequest",
546
543
  "ScoreQueryRequest",
544
+ "SubmissionCreateRequest",
547
545
  "TeamEditRequest",
548
546
  "TeamQueryRequest",
549
547
  "UseCaseQueryRequest",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dyff-schema
3
- Version: 0.38.8
3
+ Version: 0.39.0
4
4
  Summary: Data models for the Dyff AI auditing platform.
5
5
  Author-email: Digital Safety Research Institute <contact@dsri.org>
6
6
  License: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  dyff/schema/__init__.py,sha256=w7OWDFuyGKd6xt_yllNtKzHahPgywrfU4Ue02psYaMA,2244
2
- dyff/schema/_version.py,sha256=8nvvdBGaI2RNwHTn3-quX0iQmgetuBy0_zZjRo7-BYY,80
2
+ dyff/schema/_version.py,sha256=I6LzRmj6u3696UihPDbtQ6SvcXb8zA4Bc4JYoFGddx0,80
3
3
  dyff/schema/adapters.py,sha256=YMTHv_2VlLGFp-Kqwa6H51hjffHmk8gXjZilHysIF5Q,123
4
4
  dyff/schema/annotations.py,sha256=nE6Jk1PLqlShj8uqjE_EzZC9zYnTDW5AVtQcjysiK8M,10018
5
5
  dyff/schema/base.py,sha256=jvaNtsSZyFfsdUZTcY_U-yfLY5_GyrMxSXhON2R9XR0,119
@@ -29,8 +29,8 @@ dyff/schema/v0/r1/adapters.py,sha256=hpwCSW8lkMkUKCLe0zaMUDu-VS_caSxJvPsECEi_XRA
29
29
  dyff/schema/v0/r1/base.py,sha256=1VJXVLKldOq3aH2HdVgxXXk4DJTZEIiaTa4GzMKzziU,20228
30
30
  dyff/schema/v0/r1/commands.py,sha256=jqbEvDRLpcVGWXqlbniuSKg3UIjlrpKt6_0hiwUpPfQ,20153
31
31
  dyff/schema/v0/r1/oci.py,sha256=YjHDVBJ2IIxqijll70OK6pM-qT6pq8tvU7D3YB9vGM0,6700
32
- dyff/schema/v0/r1/platform.py,sha256=Euclx-Hj6TPNZNqHObQi9HRZyN-XEvkm5PWKTgjtVTM,113794
33
- dyff/schema/v0/r1/requests.py,sha256=k9T-xI2DDCjvCCmEg_kZ0M6yl_ZG6uh8rocWCLZLKFA,18590
32
+ dyff/schema/v0/r1/platform.py,sha256=qAy2yBRtaRLrWbONDxOa2Z89lFstOBq8V0SsOg7cpIE,118312
33
+ dyff/schema/v0/r1/requests.py,sha256=OhkM9QpSimsGaX8TtjSHcWlHg1UYyPCiq-WW9DJ7FdQ,18548
34
34
  dyff/schema/v0/r1/responses.py,sha256=nxy7FPtfw2B_bljz5UGGuSE79HTkDQxKH56AJVmd4Qo,1287
35
35
  dyff/schema/v0/r1/test.py,sha256=X6dUyVd5svcPCI-PBMOAqEfK9jv3bRDvkQTJzwS96c0,10720
36
36
  dyff/schema/v0/r1/version.py,sha256=NONebgcv5Thsw_ymud6PacZdGjV6ndBrmLnap-obcpo,428
@@ -43,9 +43,9 @@ dyff/schema/v0/r1/dataset/text.py,sha256=MYG5seGODDryRSCy-g0Unh5dD0HCytmZ3FeElC-
43
43
  dyff/schema/v0/r1/dataset/vision.py,sha256=tJFF4dkhHX0UXTj1sPW-G22xTSI40gbYO465FuvmvAU,443
44
44
  dyff/schema/v0/r1/io/__init__.py,sha256=L5y8UhRnojerPYHumsxQJRcHCNz8Hj9NM8b47mewMNs,92
45
45
  dyff/schema/v0/r1/io/vllm.py,sha256=vWyLg-susbg0JDfv6VExBpgFdU2GHP2a14ChOdbckvs,5321
46
- dyff_schema-0.38.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
47
- dyff_schema-0.38.8.dist-info/licenses/NOTICE,sha256=YONACu0s_Ui6jNi-wtEsVQbTU1JIkh8wvLH6d1-Ni_w,43
48
- dyff_schema-0.38.8.dist-info/METADATA,sha256=MlHZqrl42WtH4VNitu9mFfnURbpwjD5HpPTxVdnrfps,3734
49
- dyff_schema-0.38.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
50
- dyff_schema-0.38.8.dist-info/top_level.txt,sha256=9e3VVdeX73t_sUJOPQPCcGtYO1JhoErhHIi3WoWGcFI,5
51
- dyff_schema-0.38.8.dist-info/RECORD,,
46
+ dyff_schema-0.39.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
47
+ dyff_schema-0.39.0.dist-info/licenses/NOTICE,sha256=YONACu0s_Ui6jNi-wtEsVQbTU1JIkh8wvLH6d1-Ni_w,43
48
+ dyff_schema-0.39.0.dist-info/METADATA,sha256=ZGqsePJhzMjBYADI2vpkJL0aur7pZLhFSSZ1tOCmIZs,3734
49
+ dyff_schema-0.39.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
50
+ dyff_schema-0.39.0.dist-info/top_level.txt,sha256=9e3VVdeX73t_sUJOPQPCcGtYO1JhoErhHIi3WoWGcFI,5
51
+ dyff_schema-0.39.0.dist-info/RECORD,,