clarifai 11.5.1__py3-none-any.whl → 11.5.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.
Files changed (30) hide show
  1. clarifai/__init__.py +1 -1
  2. clarifai/cli/model.py +42 -1
  3. clarifai/cli/pipeline.py +137 -0
  4. clarifai/cli/pipeline_step.py +104 -0
  5. clarifai/cli/templates/__init__.py +1 -0
  6. clarifai/cli/templates/pipeline_step_templates.py +64 -0
  7. clarifai/cli/templates/pipeline_templates.py +150 -0
  8. clarifai/client/auth/helper.py +46 -21
  9. clarifai/client/auth/register.py +5 -0
  10. clarifai/client/auth/stub.py +116 -12
  11. clarifai/client/base.py +9 -0
  12. clarifai/client/model.py +111 -7
  13. clarifai/client/model_client.py +355 -6
  14. clarifai/client/user.py +81 -0
  15. clarifai/runners/models/model_builder.py +52 -9
  16. clarifai/runners/pipeline_steps/__init__.py +0 -0
  17. clarifai/runners/pipeline_steps/pipeline_step_builder.py +510 -0
  18. clarifai/runners/pipelines/__init__.py +0 -0
  19. clarifai/runners/pipelines/pipeline_builder.py +313 -0
  20. clarifai/runners/utils/code_script.py +40 -7
  21. clarifai/runners/utils/const.py +2 -2
  22. clarifai/runners/utils/model_utils.py +135 -0
  23. clarifai/runners/utils/pipeline_validation.py +153 -0
  24. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/METADATA +1 -1
  25. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/RECORD +30 -19
  26. /clarifai/cli/{model_templates.py → templates/model_templates.py} +0 -0
  27. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/WHEEL +0 -0
  28. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/entry_points.txt +0 -0
  29. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/licenses/LICENSE +0 -0
  30. {clarifai-11.5.1.dist-info → clarifai-11.5.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,153 @@
1
+ """Pipeline configuration validation utilities."""
2
+
3
+ import re
4
+ from typing import Any, Dict, List
5
+
6
+ import yaml
7
+
8
+
9
+ class PipelineConfigValidator:
10
+ """Validator for pipeline configuration files."""
11
+
12
+ # Regex patterns for templateRef validation
13
+ TEMPLATE_REF_WITH_VERSION_PATTERN = re.compile(
14
+ r'^users/([^/]+)/apps/([^/]+)/pipeline-steps/([^/]+)/versions/([^/]+)$'
15
+ )
16
+ TEMPLATE_REF_WITHOUT_VERSION_PATTERN = re.compile(
17
+ r'^users/([^/]+)/apps/([^/]+)/pipeline-steps/([^/]+)$'
18
+ )
19
+
20
+ @classmethod
21
+ def validate_config(cls, config: Dict[str, Any]) -> None:
22
+ """Validate the pipeline configuration."""
23
+ cls._validate_pipeline_section(config)
24
+ cls._validate_orchestration_spec(config)
25
+
26
+ @classmethod
27
+ def _validate_pipeline_section(cls, config: Dict[str, Any]) -> None:
28
+ """Validate the pipeline section of the config."""
29
+ if "pipeline" not in config:
30
+ raise ValueError("'pipeline' section not found in config.yaml")
31
+
32
+ pipeline = config["pipeline"]
33
+ required_fields = ["id", "user_id", "app_id"]
34
+
35
+ for field in required_fields:
36
+ if field not in pipeline:
37
+ raise ValueError(f"'{field}' not found in pipeline section of config.yaml")
38
+ if not pipeline[field]:
39
+ raise ValueError(f"'{field}' cannot be empty in config.yaml")
40
+
41
+ # Validate step_directories if present
42
+ if "step_directories" in pipeline:
43
+ if not isinstance(pipeline["step_directories"], list):
44
+ raise ValueError("'step_directories' must be a list")
45
+
46
+ # Validate orchestration_spec is present
47
+ if "orchestration_spec" not in pipeline:
48
+ raise ValueError("'orchestration_spec' not found in pipeline section")
49
+
50
+ @classmethod
51
+ def _validate_orchestration_spec(cls, config: Dict[str, Any]) -> None:
52
+ """Validate the orchestration spec contains valid Argo workflow."""
53
+ pipeline = config["pipeline"]
54
+ orchestration_spec = pipeline["orchestration_spec"]
55
+
56
+ if "argo_orchestration_spec" not in orchestration_spec:
57
+ raise ValueError("'argo_orchestration_spec' not found in orchestration_spec")
58
+
59
+ argo_spec_str = orchestration_spec["argo_orchestration_spec"]
60
+
61
+ try:
62
+ argo_spec = yaml.safe_load(argo_spec_str)
63
+ except yaml.YAMLError as e:
64
+ raise ValueError(f"Invalid YAML in argo_orchestration_spec: {e}")
65
+
66
+ cls._validate_argo_workflow(argo_spec)
67
+
68
+ @classmethod
69
+ def _validate_argo_workflow(cls, argo_spec: Dict[str, Any]) -> None:
70
+ """Validate the Argo workflow structure."""
71
+ # Basic Argo workflow validation
72
+ if not isinstance(argo_spec, dict):
73
+ raise ValueError("argo_orchestration_spec must be a valid YAML object")
74
+
75
+ required_fields = ["apiVersion", "kind", "spec"]
76
+ for field in required_fields:
77
+ if field not in argo_spec:
78
+ raise ValueError(f"'{field}' not found in argo_orchestration_spec")
79
+
80
+ if argo_spec["apiVersion"] != "argoproj.io/v1alpha1":
81
+ raise ValueError("argo_orchestration_spec must have apiVersion 'argoproj.io/v1alpha1'")
82
+
83
+ if argo_spec["kind"] != "Workflow":
84
+ raise ValueError("argo_orchestration_spec must have kind 'Workflow'")
85
+
86
+ # Validate templates and steps
87
+ spec = argo_spec["spec"]
88
+ if "templates" not in spec:
89
+ raise ValueError("'templates' not found in argo_orchestration_spec.spec")
90
+
91
+ cls._validate_argo_templates(spec["templates"])
92
+
93
+ @classmethod
94
+ def _validate_argo_templates(cls, templates: List[Dict[str, Any]]) -> None:
95
+ """Validate Argo workflow templates."""
96
+ for template in templates:
97
+ if "steps" in template:
98
+ for step_group in template["steps"]:
99
+ for step in step_group:
100
+ if "templateRef" in step:
101
+ template_ref = step["templateRef"]
102
+ cls._validate_template_ref(template_ref)
103
+
104
+ @classmethod
105
+ def _validate_template_ref(cls, template_ref: Dict[str, Any]) -> None:
106
+ """Validate a templateRef in the Argo workflow."""
107
+ if "name" not in template_ref or "template" not in template_ref:
108
+ raise ValueError("templateRef must have both 'name' and 'template' fields")
109
+
110
+ name = template_ref["name"]
111
+ template = template_ref["template"]
112
+
113
+ if name != template:
114
+ raise ValueError(f"templateRef name '{name}' must match template '{template}'")
115
+
116
+ # Check if it matches either pattern
117
+ if not (
118
+ cls.TEMPLATE_REF_WITH_VERSION_PATTERN.match(name)
119
+ or cls.TEMPLATE_REF_WITHOUT_VERSION_PATTERN.match(name)
120
+ ):
121
+ raise ValueError(
122
+ f"templateRef name '{name}' must match either pattern:\n"
123
+ f" - users/{{user_id}}/apps/{{app_id}}/pipeline-steps/{{step_id}}\n"
124
+ f" - users/{{user_id}}/apps/{{app_id}}/pipeline-steps/{{step_id}}/versions/{{version_id}}"
125
+ )
126
+
127
+ @classmethod
128
+ def get_pipeline_steps_without_versions(cls, config: Dict[str, Any]) -> List[str]:
129
+ """Get list of pipeline step names that don't have versions in templateRef."""
130
+ pipeline = config["pipeline"]
131
+ orchestration_spec = pipeline["orchestration_spec"]
132
+ argo_spec_str = orchestration_spec["argo_orchestration_spec"]
133
+ argo_spec = yaml.safe_load(argo_spec_str)
134
+
135
+ steps_without_versions = []
136
+
137
+ for template in argo_spec["spec"]["templates"]:
138
+ if "steps" in template:
139
+ for step_group in template["steps"]:
140
+ for step in step_group:
141
+ if "templateRef" in step:
142
+ template_ref = step["templateRef"]
143
+ name = template_ref["name"]
144
+
145
+ # Check if it's without version
146
+ if cls.TEMPLATE_REF_WITHOUT_VERSION_PATTERN.match(name):
147
+ # Extract step name
148
+ parts = name.split('/')
149
+ step_name = parts[-1] # Last part is the step name
150
+ if step_name not in steps_without_versions:
151
+ steps_without_versions.append(step_name)
152
+
153
+ return steps_without_versions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clarifai
3
- Version: 11.5.1
3
+ Version: 11.5.3
4
4
  Home-page: https://github.com/Clarifai/clarifai-python
5
5
  Author: Clarifai
6
6
  Author-email: support@clarifai.com
@@ -1,4 +1,4 @@
1
- clarifai/__init__.py,sha256=A0jDR9AvI6Hw5Et83NIgHO8iH3ugm5KfZXEJRyobuHc,23
1
+ clarifai/__init__.py,sha256=GnS54jaOx5YkZd_HH8VH8I061jKN-JUULYPBgILv7jA,23
2
2
  clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  clarifai/errors.py,sha256=GXa6D4v_L404J83jnRNFPH7s-1V9lk7w6Ws99f1g-AY,2772
4
4
  clarifai/versions.py,sha256=ecSuEB_nOL2XSoYHDw2n23XUbm_KPOGjudMXmQrGdS8,224
@@ -8,29 +8,34 @@ clarifai/cli/__main__.py,sha256=7nPbLW7Jr2shkgMPvnxpn4xYGMvIcnqluJ69t9w4H_k,74
8
8
  clarifai/cli/base.py,sha256=mzfAHRhon6tKntpxk241GD-Sjrb2-V99nAOasElLuuw,8254
9
9
  clarifai/cli/compute_cluster.py,sha256=8Xss0Obrp6l1XuxJe0luOqU_pf8vXGDRi6jyIe8qR6k,2282
10
10
  clarifai/cli/deployment.py,sha256=9C4I6_kyMxRkWl6h681wc79-3mAtDHtTUaxRv05OZMs,4262
11
- clarifai/cli/model.py,sha256=9sJ5p4TJc41vOeeFoMC3e8cciscSU7TmvAgW0wfO54U,30191
12
- clarifai/cli/model_templates.py,sha256=_ZonIBnY9KKSJY31KZbUys_uN_k_Txu7Dip12KWfmSU,9633
11
+ clarifai/cli/model.py,sha256=71u7JS0xnxQOLp3s9cKGbT1hyhf1CIVxMeFMU2fiLTM,31553
13
12
  clarifai/cli/nodepool.py,sha256=H6OIdUW_EiyDUwZogzEDoYmVwEjLMsgoDlPyE7gjIuU,4245
13
+ clarifai/cli/pipeline.py,sha256=M8gW72IB5hx1OIf0pOytZhnw50euPnXxW4vuZ9Fqyqw,5477
14
+ clarifai/cli/pipeline_step.py,sha256=eOxU4MdPBuB01A00Rz6m9THLyTaTLOTKwGwSVyegkyI,3808
15
+ clarifai/cli/templates/__init__.py,sha256=HbMlZuYOMyVJde73ijNAevmSRUpIttGlHdwyO4W-JOs,44
16
+ clarifai/cli/templates/model_templates.py,sha256=_ZonIBnY9KKSJY31KZbUys_uN_k_Txu7Dip12KWfmSU,9633
17
+ clarifai/cli/templates/pipeline_step_templates.py,sha256=HU1BoU7wG71MviQAvyecxT_qo70XhTtPGYtoIQ-U-l0,1663
18
+ clarifai/cli/templates/pipeline_templates.py,sha256=mfHrEoRxICIv00zxfgIct2IpxcMmZ6zjHG8WLF1TPcI,4409
14
19
  clarifai/client/__init__.py,sha256=NhpNFRJY6mTi8ca-5hUeTEmYeDKHDNXY48FN63pDuos,703
15
20
  clarifai/client/app.py,sha256=1M9XDsPWIEsj0g-mgIeZ9Mvkt85UHSbrv6pEr-QKfNg,41423
16
- clarifai/client/base.py,sha256=zOmB5HJP_-NmF2BPka14W7VUeJ1OF-fNxeacLsaRj3E,8775
21
+ clarifai/client/base.py,sha256=rXQlB0BXbKLOgLVJW_2axYh0Vd_F0BbgJE_DXTQoG4U,9109
17
22
  clarifai/client/compute_cluster.py,sha256=ViPyh-FibXL1J0ypsVOTaQnR1ymKohmZEuA13RwA-hc,10254
18
23
  clarifai/client/dataset.py,sha256=OgdpZkQ_vYmRxL8-qphcNozpvPV1bWTlte9Jv6UkKb8,35299
19
24
  clarifai/client/deployment.py,sha256=QBf0tzkKBEpzNgmOEmWUJMOlVWdFEFc70Y44o8y75Gs,2875
20
25
  clarifai/client/input.py,sha256=jpX47qwn7aUBBIEuSSLHF5jk70XaWEh0prD065c9b-E,51205
21
26
  clarifai/client/lister.py,sha256=1YEm2suNxPaJO4x9V5szgD_YX6N_00vgSO-7m0HagY8,2208
22
- clarifai/client/model.py,sha256=cITBJ7J2C2FnVFtHlahcKP4ALYR45-q2y7RPjq2I2cY,85689
23
- clarifai/client/model_client.py,sha256=XOrrm1xOZt62eLX5KbvV-zKSpK4EJOPUTUrGnH8z_KE,22392
27
+ clarifai/client/model.py,sha256=Oh2zCa7XA_pBAEx9D8ME81H_BBqD7wJYoeB5CEjlI5E,89989
28
+ clarifai/client/model_client.py,sha256=4gIS0mKBdiNMA1x_6Wo6H7WbfLsmQix64EpONcQjQV4,37129
24
29
  clarifai/client/module.py,sha256=jLViQYvVV3FmRN_ivvbk83uwsx7CgYGeEx4dYAr6yD4,4537
25
30
  clarifai/client/nodepool.py,sha256=Y5zQ0JLdTjAp2TmVnx7AAOwaB2YUslk3nl7s6BQ90FQ,16415
26
31
  clarifai/client/runner.py,sha256=5xCiqByGGscfNm0IjHelhDTx8-9l8G0C3HL-3YZogK8,2253
27
32
  clarifai/client/search.py,sha256=3LLfATrdU43a0mRNITmJV-E53bhfafZkYsbwkTtlnyU,15661
28
- clarifai/client/user.py,sha256=_G_x3P6IJqtRqI2r0HDAhSfQJmqWgEfwEVmRTOJISbw,19052
33
+ clarifai/client/user.py,sha256=YDAXSOh7ACsvCjVctugiTu8MXFN_TDBoXuEKGXv_uHg,21997
29
34
  clarifai/client/workflow.py,sha256=Bqh8lAmJcSbviJebckchTxucYlU11UQEhFSov7elpsk,13417
30
35
  clarifai/client/auth/__init__.py,sha256=7EwR0NrozkAUwpUnCsqXvE_p0wqx_SelXlSpKShKJK0,136
31
- clarifai/client/auth/helper.py,sha256=kHBi8GTX19EUiD9n_QgCqilv127TDIpP0_o5MMtzFdY,15167
32
- clarifai/client/auth/register.py,sha256=pyY-Kg_64WpN6rXz1SyEzfqL14BS4yADtuYMxLJ4jx4,554
33
- clarifai/client/auth/stub.py,sha256=pU4FYeghooCBZmCRyNTdDfJaVe4WyeRBqE3xVwfmMTY,5388
36
+ clarifai/client/auth/helper.py,sha256=h6R4zsDEY6C1VmcxjYrIsFPOO_ujEjRR_JtpQ5WVuo4,16117
37
+ clarifai/client/auth/register.py,sha256=xIg1OoZ_GGnc0KQKII-R6q_cKN1JXW3BGcU2eyS-Kkc,871
38
+ clarifai/client/auth/stub.py,sha256=nKod8eNWaBnmsaNZ59dEt42TTcwC9mMgCzEMYPZggxc,9537
34
39
  clarifai/constants/base.py,sha256=ogmFSZYoF0YhGjHg5aiOc3MLqPr_poKAls6xaD0_C3U,89
35
40
  clarifai/constants/dataset.py,sha256=9saFE_VxCTCMlPTQbOU4KM_SzN_TQjwsrsFnpsc_Epo,556
36
41
  clarifai/constants/input.py,sha256=WcHwToUVIK9ItAhDefaSohQHCLNeR55PSjZ0BFnoZ3U,28
@@ -70,7 +75,7 @@ clarifai/runners/dockerfile_template/Dockerfile.template,sha256=DUH7F0-uLOV0LTjn
70
75
  clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
76
  clarifai/runners/models/dummy_openai_model.py,sha256=pcmAVbqTTGG4J3BLVjKfvM_SQ-GET_XexIUdLcr9Zvo,8373
72
77
  clarifai/runners/models/mcp_class.py,sha256=RdKn7rW4vYol0VRDZiLTSMfkqjLhO1ijXAQ0Rq0Jfnw,6647
73
- clarifai/runners/models/model_builder.py,sha256=s5TpCnLeiYLBgWHlCT6x6vpwTGX52oywViU6xDRl0MU,61599
78
+ clarifai/runners/models/model_builder.py,sha256=D47H1zm3_Xr-nlPYb_1dY8dxlMiM93kU4QYGEtyxK88,63403
74
79
  clarifai/runners/models/model_class.py,sha256=-euUF-eHUi4KXR_e1pIwvToDZ13CM6TSz2FolzildjM,16069
75
80
  clarifai/runners/models/model_run_locally.py,sha256=6-6WjEKc0ba3gAv4wOLdMs2XOzS3b-2bZHJS0wdVqJY,20088
76
81
  clarifai/runners/models/model_runner.py,sha256=SccX-RxTgruSpQaM21uMSl-z1x6fOa13fQZMQW8NNRY,7297
@@ -78,13 +83,19 @@ clarifai/runners/models/model_servicer.py,sha256=rRd_fNEXwqiBSzTUtPI2r07EBdcCPd8
78
83
  clarifai/runners/models/openai_class.py,sha256=aXlk5W6LWkh-A4eZYi74DeLW0i_86_9DYYGxpJHXI0w,6688
79
84
  clarifai/runners/models/visual_classifier_class.py,sha256=1ZoLfCT2crrgRbejjTMAIwpTRgQMiH9N9yflOVpFxSg,2721
80
85
  clarifai/runners/models/visual_detector_class.py,sha256=ky4oFAkGCKPpGPdgaOso-n6D3HcmnbKee_8hBsNiV8U,2883
86
+ clarifai/runners/pipeline_steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ clarifai/runners/pipeline_steps/pipeline_step_builder.py,sha256=E6Ce3b0RolYLMJHaUrKukphD7ndNZafZ8gIsaONiYUk,21047
88
+ clarifai/runners/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ clarifai/runners/pipelines/pipeline_builder.py,sha256=z_bCwjwQPFa_1AYkorhh5r6t6r5hC5K2D8Z1LTEzIpg,12801
81
90
  clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- clarifai/runners/utils/code_script.py,sha256=1n525IhMEdWlr9jBUG76tMa42piZtl0CmWYBmkvu368,12769
83
- clarifai/runners/utils/const.py,sha256=B0TnmVgjh5NlsXIkowrlgz2QdsgLj4a-gu4Igc9ukCo,1546
91
+ clarifai/runners/utils/code_script.py,sha256=4wkInN_7MgCvMt9KLJA5_13iF5UFdeQLEhs0T5GvsHQ,13830
92
+ clarifai/runners/utils/const.py,sha256=MK7lTzzJKbOiyiUtG_jlJXfz_xNKMn5LjkQ9vjbttXE,1538
84
93
  clarifai/runners/utils/data_utils.py,sha256=HRpMYR2O0OiDpXXhOManLHTeomC4bFnXMHVAiT_12yE,20856
85
94
  clarifai/runners/utils/loader.py,sha256=K5Y8MPbIe5STw2gDnrL8KqFgKNxEo7bz-RV0ip1T4PM,10900
86
95
  clarifai/runners/utils/method_signatures.py,sha256=qdHaO8ZIgP6BBXXMhMPhcQ46dse-XMP2t4VJCNG7O3Q,18335
96
+ clarifai/runners/utils/model_utils.py,sha256=Cn3_89ZMhIR6f61H-btcK_Luwq0CMAx5fMxPxwngo68,4530
87
97
  clarifai/runners/utils/openai_convertor.py,sha256=ZlIrvvfHttD_DavLvmKZdL8gNq_TQvQtZVnYamwdWz4,8248
98
+ clarifai/runners/utils/pipeline_validation.py,sha256=RWWWUA3mNCXHCSNpuofMGfXfWEYe7LrYKwIc-1VFvQs,6444
88
99
  clarifai/runners/utils/serializers.py,sha256=pI7GqMTC0T3Lu_X8v8TO4RiplO-gC_49Ns37jYwsPtg,7908
89
100
  clarifai/runners/utils/url_fetcher.py,sha256=Segkvi-ktPa3-koOpUu8DNZeWOaK6G82Ya9b7_oIKwo,1778
90
101
  clarifai/runners/utils/data_types/__init__.py,sha256=iBtmPkIoLK9ew6ZiXElGt2YBBTDLEA0fmxE_eOYzvhk,478
@@ -107,9 +118,9 @@ clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
107
118
  clarifai/workflows/export.py,sha256=HvUYG9N_-UZoRR0-_tdGbZ950_AeBqawSppgUxQebR0,1913
108
119
  clarifai/workflows/utils.py,sha256=ESL3INcouNcLKCh-nMpfXX-YbtCzX7tz7hT57_RGQ3M,2079
109
120
  clarifai/workflows/validate.py,sha256=UhmukyHkfxiMFrPPeBdUTiCOHQT5-shqivlBYEyKTlU,2931
110
- clarifai-11.5.1.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
111
- clarifai-11.5.1.dist-info/METADATA,sha256=-TWdB_qQgO1GbJrjYq6dpEn8wJVgftsyK_E664VBEgU,22736
112
- clarifai-11.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
113
- clarifai-11.5.1.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
114
- clarifai-11.5.1.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
115
- clarifai-11.5.1.dist-info/RECORD,,
121
+ clarifai-11.5.3.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
122
+ clarifai-11.5.3.dist-info/METADATA,sha256=9lNeftFBxjiGsh8zvuKItgl4nh8P0c15fdgxUkiiiEg,22736
123
+ clarifai-11.5.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
124
+ clarifai-11.5.3.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
125
+ clarifai-11.5.3.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
126
+ clarifai-11.5.3.dist-info/RECORD,,