lumen-resources 0.2.2__py3-none-any.whl → 0.3.1__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.
@@ -38,25 +38,20 @@ The package follows a layered architecture:
38
38
  - CLI layer: User-friendly command-line interface
39
39
  """
40
40
 
41
- from .lumen_config import LumenConfig, Runtime, Region
42
41
  from .downloader import Downloader, DownloadResult
43
42
  from .exceptions import (
44
- ResourceError,
45
43
  ConfigError,
46
44
  DownloadError,
45
+ ModelInfoError,
47
46
  PlatformUnavailableError,
47
+ ResourceError,
48
48
  ValidationError,
49
- ModelInfoError,
50
49
  )
50
+ from .lumen_config import LumenConfig, Region, Runtime
51
51
  from .lumen_config_validator import load_and_validate_config
52
-
53
- from .model_info import ModelInfo, Source, Runtimes, Metadata
52
+ from .model_info import Metadata, ModelInfo, Runtimes, Source
54
53
  from .model_info_validator import load_and_validate_model_info
55
- from .result_schemas import (
56
- EmbeddingV1,
57
- FaceV1,
58
- LabelsV1
59
- )
54
+ from .result_schemas import OCRV1, EmbeddingV1, FaceV1, LabelsV1
60
55
 
61
56
  __version__ = "0.1.0"
62
57
 
@@ -76,6 +71,7 @@ __all__ = [
76
71
  "FaceV1",
77
72
  "EmbeddingV1",
78
73
  "LabelsV1",
74
+ "OCRV1",
79
75
  # Downloader
80
76
  "Downloader",
81
77
  "DownloadResult",
@@ -183,6 +183,7 @@ class Downloader:
183
183
  patterns = [
184
184
  "model_info.json",
185
185
  "*config*",
186
+ "*.txt",
186
187
  ] # Always include model_info.json and config files.
187
188
 
188
189
  if runtime == Runtime.torch:
@@ -1,115 +1,42 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: model_info-schema.json
3
- # timestamp: 2025-10-19T06:58:43+00:00
3
+ # timestamp: 2025-12-11T07:52:17+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from datetime import date
8
8
  from enum import Enum
9
+ from typing import Any
9
10
 
10
11
  from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
11
12
 
12
13
 
13
14
  class Format(Enum):
14
- """Model source format type.
15
-
16
- Defines the format and source platform for a model. Different formats
17
- have different loading mechanisms and repository structures.
18
-
19
- Attributes:
20
- huggingface: Hugging Face Hub model format.
21
- openclip: OpenCLIP model format.
22
- modelscope: ModelScope model format.
23
- custom: Custom model format.
24
-
25
- Example:
26
- >>> source = Source(format=Format.huggingface, repo_id="openai/clip-vit-base-patch32")
27
- >>> print(source.format.value)
28
- 'huggingface'
29
- """
30
-
31
- huggingface = "huggingface"
32
- openclip = "openclip"
33
- modelscope = "modelscope"
34
- custom = "custom"
15
+ huggingface = 'huggingface'
16
+ openclip = 'openclip'
17
+ modelscope = 'modelscope'
18
+ custom = 'custom'
35
19
 
36
20
 
37
21
  class Source(BaseModel):
38
- """Model source information.
39
-
40
- Contains information about where and how to obtain the model, including
41
- the format type and repository identifier.
42
-
43
- Attributes:
44
- format: Model format type (huggingface, openclip, modelscope, custom).
45
- repo_id: Repository identifier for the model source.
46
-
47
- Example:
48
- >>> source = Source(
49
- ... format=Format.huggingface,
50
- ... repo_id="openai/clip-vit-base-patch32"
51
- ... )
52
- >>> print(source.repo_id)
53
- 'openai/clip-vit-base-patch32'
54
- """
55
-
56
22
  model_config = ConfigDict(
57
- extra="forbid",
23
+ extra='forbid',
58
24
  )
59
25
  format: Format
60
- repo_id: str = Field(
61
- ..., description="Repository identifier for model source", min_length=1
62
- )
26
+ repo_id: str = Field(..., min_length=1)
27
+ """
28
+ Repository identifier for model source
29
+ """
63
30
 
64
31
 
65
32
  class Requirements(BaseModel):
66
- """Python environment requirements for model runtime.
67
-
68
- Specifies the Python version and package dependencies required to run
69
- the model in a specific runtime configuration.
70
-
71
- Attributes:
72
- python: Minimum Python version requirement.
73
- dependencies: List of required Python package dependencies.
74
-
75
- Example:
76
- >>> req = Requirements(
77
- ... python=">=3.8",
78
- ... dependencies=["torch", "transformers", "pillow"]
79
- ... )
80
- >>> print(req.python)
81
- '>=3.8'
82
- """
83
-
84
33
  python: str | None = None
85
34
  dependencies: list[str] | None = None
86
35
 
87
36
 
88
37
  class Runtimes(BaseModel):
89
- """Runtime configuration for a specific model execution environment.
90
-
91
- Defines the availability, file requirements, device compatibility, and
92
- dependencies for a model runtime (e.g., torch, onnx, rknn).
93
-
94
- Attributes:
95
- available: Whether this runtime is available for the model.
96
- files: List of required files or dict mapping runtime to file lists.
97
- devices: List of compatible devices for this runtime.
98
- requirements: Python environment requirements for this runtime.
99
-
100
- Example:
101
- >>> runtime = Runtimes(
102
- ... available=True,
103
- ... files=["model.pt", "config.json"],
104
- ... devices=["cuda", "cpu"],
105
- ... requirements=Requirements(python=">=3.8", dependencies=["torch"])
106
- ... )
107
- >>> print(runtime.available)
108
- True
109
- """
110
-
111
38
  model_config = ConfigDict(
112
- extra="forbid",
39
+ extra='forbid',
113
40
  )
114
41
  available: bool
115
42
  files: list[str] | dict[str, list[str]] | None = None
@@ -118,56 +45,16 @@ class Runtimes(BaseModel):
118
45
 
119
46
 
120
47
  class Datasets(BaseModel):
121
- """Dataset configuration for model evaluation and inference.
122
-
123
- Defines the label and embedding datasets used for zero-shot classification
124
- or other dataset-specific model operations.
125
-
126
- Attributes:
127
- labels: Dataset identifier for class labels.
128
- embeddings: Dataset identifier for embeddings.
129
-
130
- Example:
131
- >>> dataset = Datasets(
132
- ... labels="imagenet1k_labels",
133
- ... embeddings="imagenet1k_embeddings"
134
- ... )
135
- >>> print(dataset.labels)
136
- 'imagenet1k_labels'
137
- """
138
-
139
48
  model_config = ConfigDict(
140
- extra="forbid",
49
+ extra='forbid',
141
50
  )
142
51
  labels: str
143
52
  embeddings: str
144
53
 
145
54
 
146
55
  class Metadata(BaseModel):
147
- """Model metadata information.
148
-
149
- Contains descriptive metadata about the model including licensing,
150
- authorship, creation dates, and categorization tags.
151
-
152
- Attributes:
153
- license: License identifier for the model.
154
- author: Model author or organization.
155
- created_at: Model creation date.
156
- updated_at: Last model update timestamp.
157
- tags: List of descriptive tags for categorization.
158
-
159
- Example:
160
- >>> metadata = Metadata(
161
- ... license="MIT",
162
- ... author="OpenAI",
163
- ... tags=["computer-vision", "multimodal", "clip"]
164
- ... )
165
- >>> print(metadata.license)
166
- 'MIT'
167
- """
168
-
169
56
  model_config = ConfigDict(
170
- extra="forbid",
57
+ extra='forbid',
171
58
  )
172
59
  license: str | None = None
173
60
  author: str | None = None
@@ -177,57 +64,38 @@ class Metadata(BaseModel):
177
64
 
178
65
 
179
66
  class ModelInfo(BaseModel):
180
- """Schema for Lumen AI model configuration files.
181
-
182
- Complete model definition including source information, runtime configurations,
183
- dataset compatibility, and metadata. This is the top-level schema for
184
- model_info.json files.
185
-
186
- Attributes:
187
- name: Model name identifier, also OpenCLIP model identifier if applicable.
188
- version: Model version following semantic versioning (X.Y.Z).
189
- description: Model description and purpose.
190
- model_type: Type/category of the model.
191
- embedding_dim: Dimension of the model's embedding space.
192
- source: Model source information including format and repository.
193
- runtimes: Dictionary mapping runtime names to runtime configurations.
194
- datasets: Optional dataset configurations for model evaluation.
195
- metadata: Optional model metadata including license and author.
196
-
197
- Example:
198
- >>> model_info = ModelInfo(
199
- ... name="ViT-B-32",
200
- ... version="1.0.0",
201
- ... description="Vision Transformer for CLIP",
202
- ... model_type="vision-transformer",
203
- ... embedding_dim=512,
204
- ... source=Source(format=Format.huggingface, repo_id="openai/clip-vit-base-patch32"),
205
- ... runtimes={"torch": Runtimes(available=True)}
206
- ... )
207
- >>> print(model_info.name)
208
- 'ViT-B-32'
67
+ """
68
+ Schema for Lumen AI model configuration files
209
69
  """
210
70
 
211
71
  model_config = ConfigDict(
212
- extra="forbid",
213
- )
214
- name: str = Field(
215
- ...,
216
- description="Model name identifier, this is also openclip model identifier if openclip is set as source format",
217
- max_length=100,
218
- min_length=1,
219
- )
220
- version: str = Field(
221
- ..., description="Model version", pattern="^[0-9]+\\.[0-9]+\\.[0-9]+$"
222
- )
223
- description: str = Field(
224
- ..., description="Model description and purpose", max_length=500, min_length=1
225
- )
226
- model_type: str = Field(..., description="Type of the model")
227
- embedding_dim: int = Field(
228
- ..., description="Dimension of the embedding space", ge=1, le=100000
72
+ extra='forbid',
229
73
  )
74
+ name: str = Field(..., max_length=100, min_length=1)
75
+ """
76
+ Model name identifier, this is also openclip model identifier if openclip is set as source format
77
+ """
78
+ version: str = Field(..., pattern='^[0-9]+\\.[0-9]+\\.[0-9]+$')
79
+ """
80
+ Model version
81
+ """
82
+ description: str = Field(..., max_length=500, min_length=1)
83
+ """
84
+ Model description and purpose
85
+ """
86
+ model_type: str
87
+ """
88
+ Type of the model
89
+ """
90
+ embedding_dim: int | None = Field(None, ge=1, le=100000)
91
+ """
92
+ Dimension of the embedding space
93
+ """
230
94
  source: Source
231
95
  runtimes: dict[str, Runtimes]
232
96
  datasets: dict[str, Datasets] | None = None
97
+ extra_metadata: dict[str, Any] | None = None
98
+ """
99
+ Additional model-specific configuration and metadata
100
+ """
233
101
  metadata: Metadata | None = None
@@ -1,14 +1,11 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: result_schemas
3
- # timestamp: 2025-11-28T17:04:43+00:00
3
+ # timestamp: 2025-12-10T15:13:26+00:00
4
4
 
5
5
 
6
6
  from .embedding_v1 import EmbeddingV1
7
7
  from .face_v1 import FaceV1
8
8
  from .labels_v1 import LabelsV1
9
+ from .ocr_v1 import OCRV1
9
10
 
10
- __all__ = [
11
- "FaceV1",
12
- "EmbeddingV1",
13
- "LabelsV1",
14
- ]
11
+ __all__ = ["FaceV1", "EmbeddingV1", "LabelsV1", "OCRV1"]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: embedding_v1.json
3
- # timestamp: 2025-11-28T17:04:43+00:00
3
+ # timestamp: 2025-12-10T15:13:26+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: face_v1.json
3
- # timestamp: 2025-11-28T17:04:43+00:00
3
+ # timestamp: 2025-12-10T15:13:26+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: labels_v1.json
3
- # timestamp: 2025-11-28T17:04:43+00:00
3
+ # timestamp: 2025-12-10T15:13:26+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -0,0 +1,54 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: ocr_v1.json
3
+ # timestamp: 2025-12-10T15:13:26+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from pydantic import BaseModel, ConfigDict, Field, RootModel
8
+
9
+
10
+ class BoxItem(RootModel[list[int]]):
11
+ root: list[int] = Field(..., max_length=2, min_length=2)
12
+ """
13
+ Point coordinates [x, y]
14
+ """
15
+
16
+
17
+ class Item(BaseModel):
18
+ model_config = ConfigDict(
19
+ extra='forbid',
20
+ )
21
+ box: list[BoxItem] = Field(..., min_length=3)
22
+ """
23
+ Polygon coordinates defining the text region (usually 4 points for rotated rectangle: TL, TR, BR, BL)
24
+ """
25
+ text: str
26
+ """
27
+ Recognized text content
28
+ """
29
+ confidence: float = Field(..., ge=0.0, le=1.0)
30
+ """
31
+ Recognition confidence score
32
+ """
33
+
34
+
35
+ class OCRV1(BaseModel):
36
+ """
37
+ Universal schema for OCR text detection and recognition responses across Lumen services
38
+ """
39
+
40
+ model_config = ConfigDict(
41
+ extra='forbid',
42
+ )
43
+ items: list[Item]
44
+ """
45
+ Detected text regions with content and metadata
46
+ """
47
+ count: int = Field(..., ge=0)
48
+ """
49
+ Number of detected text regions
50
+ """
51
+ model_id: str = Field(..., min_length=1)
52
+ """
53
+ Model identifier (combined detection and recognition models)
54
+ """
@@ -9,7 +9,6 @@
9
9
  "version",
10
10
  "description",
11
11
  "model_type",
12
- "embedding_dim",
13
12
  "source",
14
13
  "runtimes"
15
14
  ],
@@ -135,6 +134,11 @@
135
134
  },
136
135
  "additionalProperties": false
137
136
  },
137
+ "extra_metadata": {
138
+ "type": "object",
139
+ "description": "Additional model-specific configuration and metadata",
140
+ "additionalProperties": true
141
+ },
138
142
  "metadata": {
139
143
  "type": "object",
140
144
  "properties": {
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "OCRV1",
4
+ "description": "Universal schema for OCR text detection and recognition responses across Lumen services",
5
+ "type": "object",
6
+ "properties": {
7
+ "items": {
8
+ "type": "array",
9
+ "items": {
10
+ "type": "object",
11
+ "properties": {
12
+ "box": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "integer"
18
+ },
19
+ "minItems": 2,
20
+ "maxItems": 2,
21
+ "description": "Point coordinates [x, y]"
22
+ },
23
+ "minItems": 3,
24
+ "description": "Polygon coordinates defining the text region (usually 4 points for rotated rectangle: TL, TR, BR, BL)"
25
+ },
26
+ "text": {
27
+ "type": "string",
28
+ "description": "Recognized text content"
29
+ },
30
+ "confidence": {
31
+ "type": "number",
32
+ "minimum": 0.0,
33
+ "maximum": 1.0,
34
+ "description": "Recognition confidence score"
35
+ }
36
+ },
37
+ "required": ["box", "text", "confidence"],
38
+ "additionalProperties": false
39
+ },
40
+ "description": "Detected text regions with content and metadata"
41
+ },
42
+ "count": {
43
+ "type": "integer",
44
+ "minimum": 0,
45
+ "description": "Number of detected text regions"
46
+ },
47
+ "model_id": {
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "description": "Model identifier (combined detection and recognition models)"
51
+ }
52
+ },
53
+ "required": ["items", "count", "model_id"],
54
+ "additionalProperties": false
55
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lumen-resources
3
- Version: 0.2.2
3
+ Version: 0.3.1
4
4
  Summary: Unified model resource management for Lumen ML services
5
5
  Author-email: EdwinZhanCN <support@lumilio.org>
6
6
  License: MIT
@@ -0,0 +1,26 @@
1
+ lumen_resources/__init__.py,sha256=yS4AldwTQlRYfu35DlqBlnoSNXyGw0G0P41AUlZyFac,2687
2
+ lumen_resources/cli.py,sha256=gGGfe0BmqjZX-2fIEEQ-MgElMn21OrabPs7Fcu6aY6A,14204
3
+ lumen_resources/downloader.py,sha256=nQtYcCfSHdWpCqB9zy6-Ri0Ot7j8Hdz--F4oNNPa04Q,17655
4
+ lumen_resources/exceptions.py,sha256=cUS76Revda0Vt6rPeUNLI2QhluNyLon1GiF5ZM4Kx30,3148
5
+ lumen_resources/lumen_config.py,sha256=EtWdlWiN6sP8QZxJfw3mZZKkN_9Kh6aRl-EeC4iSpKg,14814
6
+ lumen_resources/lumen_config_validator.py,sha256=6ZaCVZViEPSDTfbke37P0bDSNI7hE5K8H17bv1V8KSE,9734
7
+ lumen_resources/model_info.py,sha256=O7LRJnC2OJ5uAuic074hzWThruHhVyMg5Kt7eNAdZQ4,2355
8
+ lumen_resources/model_info_validator.py,sha256=91QsUCRuxZT3wCt7xI3wsLVBmEiVXxJUk8d2MOHwNb0,9294
9
+ lumen_resources/platform.py,sha256=EwqjQMoQY2jK0VP1jstgIW_Lu82Cxn9HDxwdCj1EN8w,9824
10
+ lumen_resources/result_schemas/README.md,sha256=nPbihM4RCJxFbBHyUsRYLljyaRjULuMQgW6K1nWYGy0,384
11
+ lumen_resources/result_schemas/__init__.py,sha256=7nsrPKQE9WN39-DwTSrir4sZD7IiDlxfuY12TPKbJ8s,289
12
+ lumen_resources/result_schemas/embedding_v1.py,sha256=VtU4Uy_tTKDIKy4cKZxH_rp_L6VGDlz-ptUbWBwkebw,671
13
+ lumen_resources/result_schemas/face_v1.py,sha256=d-cHhkwvrKw4x7CT_UsihIpDrnxuqnkrnQ38_I3ZfvI,1314
14
+ lumen_resources/result_schemas/labels_v1.py,sha256=S8hgrcJs1XlxOibfgeqiXcNv2epdShuN83kuunQEVbw,829
15
+ lumen_resources/result_schemas/ocr_v1.py,sha256=XddG9tKp2Nw77NEGmRTYGJFoFbXfLFjoPJFzYuiLtAI,1259
16
+ lumen_resources/schemas/config-schema.yaml,sha256=FC4Iz4O-nzAvFXkGMhLkAxy2-efq47wPgcID962Vjx4,8167
17
+ lumen_resources/schemas/model_info-schema.json,sha256=VkARnNvzdFKee_AROQG9AUU5Q9s2P_dt7Nvm9Mj39aU,5837
18
+ lumen_resources/schemas/result_schemas/embedding_v1.json,sha256=6iZaXbmkP0J5fXGD4Gkrt6AZPvpK6FZaQ754sOXxFrc,841
19
+ lumen_resources/schemas/result_schemas/face_v1.json,sha256=XcnHxwP_KR8lAv6s6npjWQxwyYAQTuBLEKrvlOqH84g,1771
20
+ lumen_resources/schemas/result_schemas/labels_v1.json,sha256=AnOiM0VCuIKrLdrbA73pmu4QD4QaHIDNsANeU3BIOeg,1222
21
+ lumen_resources/schemas/result_schemas/ocr_v1.json,sha256=btVUZjR_RW4CLJjIyEGCITPJFJxMqGSM7QX8OyfVguo,1653
22
+ lumen_resources-0.3.1.dist-info/METADATA,sha256=Al6kVXuTCVTb0TxP6_BbcxaeHIEjAVLumZMpsSs0Bi0,4002
23
+ lumen_resources-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
24
+ lumen_resources-0.3.1.dist-info/entry_points.txt,sha256=fLCrIB9BxyIDAbJVqDGW4QyvLPlvL53WI-6lkTZ3h2M,61
25
+ lumen_resources-0.3.1.dist-info/top_level.txt,sha256=XgLNoNrF2RIpI2sYIpjLuUREYRVHW13ElHoCnFYHjAQ,16
26
+ lumen_resources-0.3.1.dist-info/RECORD,,
@@ -1,24 +0,0 @@
1
- lumen_resources/__init__.py,sha256=vwiadtQgIE2Dopk1bQBahH-9JBdLrMjxPQTzRn0BJ-k,2684
2
- lumen_resources/cli.py,sha256=gGGfe0BmqjZX-2fIEEQ-MgElMn21OrabPs7Fcu6aY6A,14204
3
- lumen_resources/downloader.py,sha256=h9ch7O2BdMnqxnOd8tDstAVcPLBErVVnnTSJN9veABQ,17634
4
- lumen_resources/exceptions.py,sha256=cUS76Revda0Vt6rPeUNLI2QhluNyLon1GiF5ZM4Kx30,3148
5
- lumen_resources/lumen_config.py,sha256=EtWdlWiN6sP8QZxJfw3mZZKkN_9Kh6aRl-EeC4iSpKg,14814
6
- lumen_resources/lumen_config_validator.py,sha256=6ZaCVZViEPSDTfbke37P0bDSNI7hE5K8H17bv1V8KSE,9734
7
- lumen_resources/model_info.py,sha256=qHvwJbU2h-Fdr5iCJLfjZMIc5FKlXTg6hrN0CVEZFVo,7259
8
- lumen_resources/model_info_validator.py,sha256=91QsUCRuxZT3wCt7xI3wsLVBmEiVXxJUk8d2MOHwNb0,9294
9
- lumen_resources/platform.py,sha256=EwqjQMoQY2jK0VP1jstgIW_Lu82Cxn9HDxwdCj1EN8w,9824
10
- lumen_resources/result_schemas/README.md,sha256=nPbihM4RCJxFbBHyUsRYLljyaRjULuMQgW6K1nWYGy0,384
11
- lumen_resources/result_schemas/__init__.py,sha256=CnpSCH01YXBIW9BQH1xmcqIDNTf5-IDJ1G7k-ZTF6D4,269
12
- lumen_resources/result_schemas/embedding_v1.py,sha256=RJXVNWt8Qv-6ZvKqqddacGoIszy6n9Z3PQ1rsIPbcYs,671
13
- lumen_resources/result_schemas/face_v1.py,sha256=fkT2cD59NDpIVvMhdPMz22zH7d42FGgzlc957NPBPPI,1314
14
- lumen_resources/result_schemas/labels_v1.py,sha256=8GsqQlWH1G--pptrPwo8124D1xUc5gXtn95OolLwE0k,829
15
- lumen_resources/schemas/config-schema.yaml,sha256=FC4Iz4O-nzAvFXkGMhLkAxy2-efq47wPgcID962Vjx4,8167
16
- lumen_resources/schemas/model_info-schema.json,sha256=Qee-Pd6XdVSaij6Cqxn1GaSMRIrPRp0rvTPfWTp_8ms,5669
17
- lumen_resources/schemas/result_schemas/embedding_v1.json,sha256=6iZaXbmkP0J5fXGD4Gkrt6AZPvpK6FZaQ754sOXxFrc,841
18
- lumen_resources/schemas/result_schemas/face_v1.json,sha256=XcnHxwP_KR8lAv6s6npjWQxwyYAQTuBLEKrvlOqH84g,1771
19
- lumen_resources/schemas/result_schemas/labels_v1.json,sha256=AnOiM0VCuIKrLdrbA73pmu4QD4QaHIDNsANeU3BIOeg,1222
20
- lumen_resources-0.2.2.dist-info/METADATA,sha256=eHfm1uBIZVpkv39QvceEoOiXupgt5uzYE4c8LSaG8z0,4002
21
- lumen_resources-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
22
- lumen_resources-0.2.2.dist-info/entry_points.txt,sha256=fLCrIB9BxyIDAbJVqDGW4QyvLPlvL53WI-6lkTZ3h2M,61
23
- lumen_resources-0.2.2.dist-info/top_level.txt,sha256=XgLNoNrF2RIpI2sYIpjLuUREYRVHW13ElHoCnFYHjAQ,16
24
- lumen_resources-0.2.2.dist-info/RECORD,,