seekrai 0.5.26__py3-none-any.whl → 0.5.29__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.
seekrai/types/__init__.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from seekrai.types.abstract import SeekrFlowClient
2
2
  from seekrai.types.agents import (
3
3
  Agent,
4
+ AgentAsToolLegacy,
4
5
  AgentDeleteResponse,
5
6
  CreateAgentRequest,
6
7
  EnvConfig,
@@ -47,6 +48,7 @@ from seekrai.types.agents import (
47
48
  WebSearchEnv,
48
49
  )
49
50
  from seekrai.types.agents.tools.schemas import (
51
+ AgentAsToolLegacy,
50
52
  FileSearch,
51
53
  FileSearchEnv,
52
54
  RunPython,
@@ -120,6 +122,9 @@ from seekrai.types.projects import (
120
122
  ProjectWithRuns,
121
123
  )
122
124
  from seekrai.types.tools import (
125
+ AgentAsTool,
126
+ AgentAsToolConfig,
127
+ CreateAgentAsTool,
123
128
  CreateFileSearch,
124
129
  CreateRunPython,
125
130
  CreateToolRequest,
@@ -132,6 +137,7 @@ from seekrai.types.tools import (
132
137
  ToolAgentSummaryResponse,
133
138
  ToolDeleteResponse,
134
139
  ToolResponse,
140
+ UpdateAgentAsTool,
135
141
  UpdateFileSearch,
136
142
  UpdateRunPython,
137
143
  UpdateToolRequest,
@@ -258,4 +264,9 @@ __all__ = [
258
264
  "RunPythonEnv",
259
265
  "WebSearch",
260
266
  "WebSearchEnv",
267
+ "AgentAsToolLegacy",
268
+ "AgentAsTool",
269
+ "CreateAgentAsTool",
270
+ "AgentAsToolConfig",
271
+ "UpdateAgentAsTool",
261
272
  ]
@@ -51,6 +51,7 @@ from seekrai.types.agents.tools import (
51
51
  ToolBase,
52
52
  )
53
53
  from seekrai.types.agents.tools.schemas import (
54
+ AgentAsToolLegacy,
54
55
  FileSearch,
55
56
  FileSearchEnv,
56
57
  RunPython,
@@ -106,6 +107,7 @@ __all__ = [
106
107
  "RunPythonEnv",
107
108
  "WebSearch",
108
109
  "WebSearchEnv",
110
+ "AgentAsToolLegacy",
109
111
  "PythonFunctionBase",
110
112
  "PythonFunctionResponse",
111
113
  "DeletePythonFunctionResponse",
@@ -1,5 +1,6 @@
1
1
  from seekrai.types.agents.tools.env_model_config import EnvConfig
2
2
  from seekrai.types.agents.tools.schemas import (
3
+ AgentAsToolLegacy,
3
4
  FileSearch,
4
5
  FileSearchEnv,
5
6
  RunPython,
@@ -23,4 +24,5 @@ __all__ = [
23
24
  "RunPythonEnv",
24
25
  "WebSearch",
25
26
  "WebSearchEnv",
27
+ "AgentAsToolLegacy",
26
28
  ]
@@ -1,3 +1,4 @@
1
+ from seekrai.types.agents.tools.schemas.agent_as_tool import AgentAsToolLegacy
1
2
  from seekrai.types.agents.tools.schemas.file_search import FileSearch
2
3
  from seekrai.types.agents.tools.schemas.file_search_env import FileSearchEnv
3
4
  from seekrai.types.agents.tools.schemas.run_python import RunPython
@@ -13,4 +14,5 @@ __all__ = [
13
14
  "RunPythonEnv",
14
15
  "WebSearch",
15
16
  "WebSearchEnv",
17
+ "AgentAsToolLegacy",
16
18
  ]
@@ -0,0 +1,16 @@
1
+ from typing import Literal
2
+
3
+ from seekrai.types.agents.tools import EnvConfig
4
+ from seekrai.types.agents.tools.tool import ToolBase, ToolType
5
+
6
+
7
+ class AgentAsToolLegacy(ToolBase[Literal["agent_as_tool"], EnvConfig]):
8
+ name: Literal["agent_as_tool"] = ToolType.AGENT_AS_TOOL.value
9
+ description: str
10
+ agent_id: str
11
+
12
+ model_config = {
13
+ "json_schema_extra": {
14
+ "deprecated": True,
15
+ }
16
+ }
@@ -2,9 +2,13 @@ from typing import Annotated, Union
2
2
 
3
3
  from pydantic import Field
4
4
 
5
+ from seekrai.types.agents.tools.schemas.agent_as_tool import AgentAsToolLegacy
5
6
  from seekrai.types.agents.tools.schemas.file_search import FileSearch
6
7
  from seekrai.types.agents.tools.schemas.run_python import RunPython
7
8
  from seekrai.types.agents.tools.schemas.web_search import WebSearch
8
9
 
9
10
 
10
- Tool = Annotated[Union[FileSearch, WebSearch, RunPython], Field(discriminator="name")]
11
+ Tool = Annotated[
12
+ Union[FileSearch, WebSearch, RunPython, AgentAsToolLegacy],
13
+ Field(discriminator="name"),
14
+ ]
seekrai/types/enums.py CHANGED
@@ -28,3 +28,4 @@ class ToolType(str, Enum):
28
28
  FILE_SEARCH = "file_search"
29
29
  WEB_SEARCH = "web_search"
30
30
  RUN_PYTHON = "run_python"
31
+ AGENT_AS_TOOL = "agent_as_tool"
seekrai/types/finetune.py CHANGED
@@ -1,15 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import warnings
3
4
  from datetime import datetime
4
5
  from enum import Enum
5
- from typing import Any, Dict, List, Literal, Optional
6
+ from typing import Any, Callable, Dict, List, Literal, Optional
6
7
 
7
- from pydantic import Field
8
+ from pydantic import Field, field_validator, model_serializer, model_validator
8
9
 
9
10
  from seekrai.types.abstract import BaseModel
10
11
  from seekrai.types.common import (
11
12
  ObjectType,
12
13
  )
14
+ from seekrai.utils._log import log_info
13
15
 
14
16
 
15
17
  class FinetuneJobStatus(str, Enum):
@@ -77,8 +79,28 @@ class FinetuneEventType(str, Enum):
77
79
 
78
80
  class FineTuneType(str, Enum):
79
81
  STANDARD = "STANDARD"
82
+ GRPO = "GRPO" # deprecated
80
83
  PREFERENCE = "PREFERENCE"
81
- GRPO = "GRPO"
84
+ REINFORCEMENT = "REINFORCEMENT"
85
+
86
+
87
+ class GraderType(str, Enum):
88
+ FORMAT_CHECK = "format_check"
89
+ MATH_ACCURACY = "math_accuracy"
90
+ STRING_CHECK = "string_check"
91
+ TEXT_SIMILARITY = "text_similarity"
92
+
93
+
94
+ class StringOperation(str, Enum):
95
+ EQUALS = "equals"
96
+ NOT_EQUALS = "not_equals"
97
+ CONTAINS = "contains"
98
+ CASE_INSENSITIVE_CONTAINS = "case_insensitive_contains"
99
+
100
+
101
+ class TextSimilarityOperation(str, Enum):
102
+ BLEU = "bleu"
103
+ ROUGE = "rouge"
82
104
 
83
105
 
84
106
  class FinetuneEvent(BaseModel):
@@ -93,6 +115,17 @@ class FinetuneEvent(BaseModel):
93
115
  # metrics that we expose
94
116
  loss: float | None = None
95
117
  epoch: float | None = None
118
+ reward: float | None = None
119
+
120
+ @model_serializer(mode="wrap")
121
+ def serialize_model(
122
+ self, handler: Callable[[Any], dict[str, Any]]
123
+ ) -> dict[str, Any]:
124
+ # Remove 'reward' if it's None
125
+ dump_dict = handler(self)
126
+ if dump_dict.get("reward") is None:
127
+ del dump_dict["reward"]
128
+ return dump_dict
96
129
 
97
130
 
98
131
  class LoRAConfig(BaseModel):
@@ -111,6 +144,126 @@ class LoRAConfig(BaseModel):
111
144
  extras: Dict[str, Any] = Field(default_factory=dict)
112
145
 
113
146
 
147
+ class Grader(BaseModel):
148
+ type: GraderType
149
+ weight: float | None = Field(default=None, gt=0.0, le=1.0)
150
+ operation: StringOperation | TextSimilarityOperation | None = Field(default=None)
151
+
152
+ @model_validator(mode="before")
153
+ @classmethod
154
+ def validate_operation(cls, data: Any) -> Any:
155
+ if not isinstance(data, dict):
156
+ return data
157
+
158
+ grader_type = data.get("type")
159
+ operation_value = data.get("operation")
160
+
161
+ if grader_type == GraderType.STRING_CHECK:
162
+ if not operation_value:
163
+ raise ValueError(
164
+ "string_check grader is missing required StringOperation"
165
+ )
166
+ if isinstance(operation_value, str):
167
+ try:
168
+ # Convert to enum to validate it's a valid value
169
+ data["operation"] = StringOperation(operation_value.lower())
170
+ except ValueError:
171
+ raise ValueError(
172
+ f"Invalid operation for string_check grader: "
173
+ f"expected StringOperation, but got type '{type(operation_value).__name__}' with value '{operation_value}'"
174
+ )
175
+ elif grader_type == GraderType.TEXT_SIMILARITY:
176
+ if not operation_value:
177
+ raise ValueError(
178
+ "text_similarity grader is missing required TextSimilarityOperation"
179
+ )
180
+ if isinstance(operation_value, str):
181
+ try:
182
+ data["operation"] = TextSimilarityOperation(operation_value.lower())
183
+ except ValueError:
184
+ raise ValueError(
185
+ f"Invalid operation for text_similarity grader: "
186
+ f"expected TextSimilarityOperation, got type '{type(operation_value).__name__}' with value '{operation_value}'"
187
+ )
188
+
189
+ elif grader_type in (GraderType.FORMAT_CHECK, GraderType.MATH_ACCURACY):
190
+ if operation_value:
191
+ raise ValueError(f"{grader_type} grader cannot have an operation")
192
+ data["operation"] = None
193
+
194
+ return data
195
+
196
+
197
+ class RewardComponents(BaseModel):
198
+ format_reward_weight: float = Field(default=0.1, gt=0.0, le=1.0)
199
+ graders: list[Grader] = Field(min_length=1)
200
+
201
+ @model_validator(mode="after")
202
+ def validate_weights(self) -> "RewardComponents":
203
+ is_format_weight_specified = "format_reward_weight" in self.model_fields_set
204
+
205
+ grader_weights_specified = [
206
+ grader.weight is not None for grader in self.graders
207
+ ]
208
+
209
+ all_graders_have_weights = all(grader_weights_specified)
210
+ some_graders_have_weights = any(grader_weights_specified) and not all(
211
+ grader_weights_specified
212
+ )
213
+ no_graders_have_weights = not any(grader_weights_specified)
214
+
215
+ if some_graders_have_weights:
216
+ raise ValueError(
217
+ "Only some graders have weights specified. Either all graders must have weights specified, or none of them."
218
+ )
219
+
220
+ if all_graders_have_weights and is_format_weight_specified:
221
+ self._validate_weights_sum_to_one()
222
+
223
+ elif all_graders_have_weights and not is_format_weight_specified:
224
+ self._normalize_grader_weights()
225
+
226
+ elif no_graders_have_weights:
227
+ self._initialize_grader_weights()
228
+ self._normalize_grader_weights()
229
+
230
+ return self
231
+
232
+ def _validate_weights_sum_to_one(self) -> None:
233
+ """Validate that format_reward_weight and grader weights sum to 1.0"""
234
+ total_weight = self.format_reward_weight + sum( # type: ignore[operator]
235
+ grader.weight # type: ignore[misc]
236
+ for grader in self.graders
237
+ )
238
+
239
+ if abs(total_weight - 1.0) > 1e-10:
240
+ raise ValueError(
241
+ f"When all weights are explicitly provided, they must sum to 1.0. "
242
+ f"Got format_reward_weight={self.format_reward_weight}, "
243
+ f"graders={self.graders}"
244
+ )
245
+
246
+ def _normalize_grader_weights(self) -> None:
247
+ """Normalize only grader weights to fill (1 - format_reward_weight)"""
248
+ total_grader_weight = sum(grader.weight for grader in self.graders) # type: ignore[misc]
249
+ target_grader_total = 1.0 - self.format_reward_weight
250
+
251
+ # only normalize if weights aren't already properly normalized
252
+ if abs(total_grader_weight - target_grader_total) > 1e-10:
253
+ scale_factor = target_grader_total / total_grader_weight
254
+ for grader in self.graders:
255
+ original_weight = grader.weight
256
+ grader.weight *= scale_factor # type: ignore[operator]
257
+ log_info(
258
+ f"{grader.type}'s weight scaled from {original_weight} to {grader.weight:.2f}"
259
+ )
260
+
261
+ def _initialize_grader_weights(self) -> None:
262
+ """Initialize all grader weights when none are provided"""
263
+ for grader in self.graders:
264
+ grader.weight = 1.0
265
+
266
+
114
267
  class TrainingConfig(BaseModel):
115
268
  # training file ID
116
269
  training_files: List[str]
@@ -136,6 +289,45 @@ class TrainingConfig(BaseModel):
136
289
  fine_tune_type: FineTuneType = FineTuneType.STANDARD
137
290
  # LoRA config
138
291
  lora_config: Optional[LoRAConfig] = None
292
+ # reward_components are REINFORCEMENT-specific
293
+ reward_components: Optional[RewardComponents] = None
294
+
295
+ @model_validator(mode="after")
296
+ def validate_reward_components(self) -> "TrainingConfig":
297
+ # TODO: re-enable the below and make reward_components required for REINFORCEMENT. Disabled for now for backwards-compatibility
298
+ # if (
299
+ # self.fine_tune_type in (FineTuneType.REINFORCEMENT, FineTuneType.GRPO)
300
+ # and not self.reward_components
301
+ # ):
302
+ # raise ValueError("REINFORCEMENT fine-tuning requires reward components")
303
+ if (
304
+ self.fine_tune_type in (FineTuneType.REINFORCEMENT, FineTuneType.GRPO)
305
+ and not self.reward_components
306
+ ):
307
+ self.reward_components = RewardComponents(
308
+ format_reward_weight=0.1,
309
+ graders=[Grader(type=GraderType.MATH_ACCURACY, weight=0.9)],
310
+ )
311
+ if self.fine_tune_type == FineTuneType.STANDARD and self.reward_components:
312
+ raise ValueError(
313
+ "Reward components are incompatible with standard fine-tuning"
314
+ )
315
+ if self.fine_tune_type == FineTuneType.PREFERENCE and self.reward_components:
316
+ raise ValueError(
317
+ "Reward components are incompatible with preference fine-tuning"
318
+ )
319
+
320
+ return self
321
+
322
+ @field_validator("fine_tune_type")
323
+ def validate_fine_tune_type(cls, v: Any) -> Any:
324
+ if v == FineTuneType.GRPO:
325
+ warnings.warn(
326
+ "FineTuneType.GRPO is deprecated and will be removed in a future version. Use FineTuneType.REINFORCEMENT",
327
+ DeprecationWarning,
328
+ stacklevel=2,
329
+ )
330
+ return v
139
331
 
140
332
 
141
333
  class AcceleratorType(str, Enum):
@@ -172,6 +364,7 @@ class FinetuneResponse(BaseModel):
172
364
  id: str | None = None
173
365
  # fine-tune type
174
366
  fine_tune_type: FineTuneType = FineTuneType.STANDARD
367
+ reward_components: Optional[RewardComponents] = None
175
368
  # training file id
176
369
  training_files: List[str] | None = None
177
370
  # validation file id
@@ -228,6 +421,16 @@ class FinetuneResponse(BaseModel):
228
421
  # training_file_num_lines: int | None = Field(None, alias="TrainingFileNumLines")
229
422
  # training_file_size: int | None = Field(None, alias="TrainingFileSize")
230
423
 
424
+ @model_serializer(mode="wrap")
425
+ def serialize_model(
426
+ self, handler: Callable[[Any], dict[str, Any]]
427
+ ) -> dict[str, Any]:
428
+ # Remove 'reward_components' if it's None
429
+ dump_dict = handler(self)
430
+ if dump_dict.get("reward_components") is None:
431
+ del dump_dict["reward_components"]
432
+ return dump_dict
433
+
231
434
 
232
435
  class FinetuneList(BaseModel):
233
436
  # object type
seekrai/types/tools.py CHANGED
@@ -62,6 +62,15 @@ class CreateRunPython(CreateTool):
62
62
  config: RunPythonConfig
63
63
 
64
64
 
65
+ class AgentAsToolConfig(ToolConfig):
66
+ agent_id: str
67
+
68
+
69
+ class CreateAgentAsTool(CreateTool):
70
+ type: Literal[ToolType.AGENT_AS_TOOL] = ToolType.AGENT_AS_TOOL
71
+ config: AgentAsToolConfig
72
+
73
+
65
74
  class Tool(BaseModel):
66
75
  type: ToolType
67
76
  name: Annotated[str, AfterValidator(validate_length)]
@@ -88,13 +97,19 @@ class RunPythonTool(Tool):
88
97
  config: RunPythonConfig
89
98
 
90
99
 
100
+ class AgentAsTool(Tool):
101
+ type: Literal[ToolType.AGENT_AS_TOOL] = ToolType.AGENT_AS_TOOL
102
+ config: AgentAsToolConfig
103
+
104
+
91
105
  CreateToolRequest = Annotated[
92
- Union[CreateFileSearch, CreateRunPython, CreateWebSearch],
106
+ Union[CreateFileSearch, CreateRunPython, CreateWebSearch, CreateAgentAsTool],
93
107
  Field(discriminator="type"),
94
108
  ]
95
109
 
96
110
  ToolResponse = Annotated[
97
- Union[FileSearchTool, WebSearchTool, RunPythonTool], Field(discriminator="type")
111
+ Union[FileSearchTool, WebSearchTool, RunPythonTool, AgentAsTool],
112
+ Field(discriminator="type"),
98
113
  ]
99
114
 
100
115
 
@@ -110,6 +125,10 @@ class UpdateRunPython(CreateRunPython):
110
125
  pass
111
126
 
112
127
 
128
+ class UpdateAgentAsTool(CreateAgentAsTool):
129
+ pass
130
+
131
+
113
132
  UpdateToolRequest = Annotated[
114
133
  Union[UpdateFileSearch, UpdateWebSearch, UpdateRunPython],
115
134
  Field(discriminator="type"),
@@ -117,7 +136,7 @@ UpdateToolRequest = Annotated[
117
136
 
118
137
 
119
138
  class GetToolsResponse(BaseModel):
120
- """Response schema for paginated tool list."""
139
+ """Response schema for a paginated tool list."""
121
140
 
122
141
  data: list[ToolResponse]
123
142
  total: Optional[int] = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seekrai
3
- Version: 0.5.26
3
+ Version: 0.5.29
4
4
  Summary: Python client for SeekrAI
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -30,17 +30,18 @@ seekrai/resources/resource_base.py,sha256=rFIHFeqKPiAEbMYcMiIGHIym7qxwmh-EGsWiZc
30
30
  seekrai/resources/tools.py,sha256=NH47V0Ks6yXLr0yzSVegWGKJNF1PblUhkYThz0BBKO0,11259
31
31
  seekrai/resources/vectordb.py,sha256=1uUsyCUJdVAVUnua9RJWqf-j0HDD74EPeERUBjqVvmg,15797
32
32
  seekrai/seekrflow_response.py,sha256=5RFEQzamDy7sTSDkxSsZQThZ3biNmeCPeHWdrFId5Go,1320
33
- seekrai/types/__init__.py,sha256=-9Z2sTV_qsdQ0VOoh3_R8amGFJpQiESFxcTOrTXgCC4,5816
33
+ seekrai/types/__init__.py,sha256=c27Om5Yv8f-V-d9reA96ecPjc5ldeVnNLDjxrdi-VTY,6067
34
34
  seekrai/types/abstract.py,sha256=TqWFQV_6bPblywfCH-r8FCkXWvPkc9KlJ4QVgyrnaMc,642
35
- seekrai/types/agents/__init__.py,sha256=yEyuhWaiBP0e5l669O0FqSEnRMPhJC473JgYG7YFPUs,2356
35
+ seekrai/types/agents/__init__.py,sha256=Ukt-s8yz1sLNQuQUYxfi5_77Ni_oGqetjqBajW5sWx4,2404
36
36
  seekrai/types/agents/agent.py,sha256=VIMF6gXhlLViVsCBGgPo54UdJqpMjb_ystNNx9n94FY,1543
37
37
  seekrai/types/agents/observability.py,sha256=kOpBrNsrOzSbf-AsRBWAxRB9FqO0063CshUr-r2hHBE,963
38
38
  seekrai/types/agents/python_functions.py,sha256=31Jm46gryHsgNsC7nlivuyY0TSko58y2YVxsu_7bEAg,653
39
39
  seekrai/types/agents/runs.py,sha256=JgvasNM_eesGbwnqeAbRzPNvbzLAG1_N2IU7M7OHD1w,4933
40
40
  seekrai/types/agents/threads.py,sha256=TinCMKv1bi5LzboDyCx1XI4Zzd8UzUZos4VOrTNhmEc,6835
41
- seekrai/types/agents/tools/__init__.py,sha256=Uh9kzxdUQw8RPpeazUqP3FYMmbfLzeSldGgL8dD4K5U,509
41
+ seekrai/types/agents/tools/__init__.py,sha256=91FbBuKKMxloI-iebI7FYLcWIJT8dwz5tyAnteaXkpU,557
42
42
  seekrai/types/agents/tools/env_model_config.py,sha256=9POx2DPwfSXgoaziJv7QvKeMrhMsYD1exnanSRK48vw,177
43
- seekrai/types/agents/tools/schemas/__init__.py,sha256=_HQoqgBk4T1IvlD0Yt3REz0_x_oVFTgITTd7H2ZJXws,562
43
+ seekrai/types/agents/tools/schemas/__init__.py,sha256=D4m_2mTjQM_zWPcalKgoGWq6aKdrCqZRvc2d6FOtJQo,666
44
+ seekrai/types/agents/tools/schemas/agent_as_tool.py,sha256=ypNRKgwZDKzNyHnbLNbr7dcUIOwFYgHBujuOgPVob5Q,420
44
45
  seekrai/types/agents/tools/schemas/file_search.py,sha256=0e9jL4B7-GSYGrkGBA4I6PHd2vP6vz8KfLSp2DIeg2A,459
45
46
  seekrai/types/agents/tools/schemas/file_search_env.py,sha256=VGM3fkBjbp0wJVwgtgxKw_kEKP0qwvkGpJQZsvlOtcY,683
46
47
  seekrai/types/agents/tools/schemas/run_python.py,sha256=Gq-LAXyXswW_IhHBfdEvw3WZuuI62R9HRfj5YoLp06c,451
@@ -48,23 +49,23 @@ seekrai/types/agents/tools/schemas/run_python_env.py,sha256=0GcyrKILbRRz-6CufG9i
48
49
  seekrai/types/agents/tools/schemas/web_search.py,sha256=jAF9OMQbUODd5egzbct5CgFtMm-0Y62lvXFRbEONAlk,451
49
50
  seekrai/types/agents/tools/schemas/web_search_env.py,sha256=R3fGXV43ZacbgoSy-M43rsTe5FFPU-t2VPMBnTVj7M8,283
50
51
  seekrai/types/agents/tools/tool.py,sha256=XdbYzSn0Rr-m9s34Aa1NDQ-35Kpzk4rcaXY3dKrg-Ys,514
51
- seekrai/types/agents/tools/tool_types.py,sha256=1tF_kE6Z_zzuZpOAK1HrHsHkXFPEoK0PdYv-pbTLfkY,360
52
+ seekrai/types/agents/tools/tool_types.py,sha256=5MtxL-DY2VUA0RHPO7T3BluRsoYCWZLXeHkEww5SVcA,469
52
53
  seekrai/types/alignment.py,sha256=nWcc4kQLs40-T0_HC3MnGkLd-StwBvwCXQrjUVJ5dEI,2973
53
54
  seekrai/types/chat_completions.py,sha256=-ganbaf5wDlNIj6zWGjcmkCwTIoCUthyVO9vuBcQiwk,3759
54
55
  seekrai/types/common.py,sha256=YI1pE-i_lDLU2o6FjoINdIhPXsV9lUl2MeAg2aRtT-M,2062
55
56
  seekrai/types/completions.py,sha256=lm9AFdZR3Xg5AHPkV-qETHikkwMJmkHrLGr5GG-YR-M,2171
56
57
  seekrai/types/deployments.py,sha256=a0zew1DuB9vPQXcBT2R4Tdn_8z5qleh6V6i4T4xyYZo,1798
57
58
  seekrai/types/embeddings.py,sha256=OANoLNOs0aceS8NppVvvcNYQbF7-pAOAmcr30pw64OU,749
58
- seekrai/types/enums.py,sha256=sQ1CW-ctbhpV2jM1cEAEy7ZUdzZa0IC85YvycjvudHE,633
59
+ seekrai/types/enums.py,sha256=v6HDfpgKJ__fCouWYPBbfD6ZjsXCMrnNt9zTuALBsp0,669
59
60
  seekrai/types/error.py,sha256=uTKISs9aRC4_6zwirtNkanxepN8KY-SqCq0kNbfZylQ,370
60
61
  seekrai/types/explainability.py,sha256=Ih-8hCm5r22EMMtr83cDy8vePo7_Ik7UdUcXhsj5Zm0,835
61
62
  seekrai/types/files.py,sha256=kOy4s8D4tlsenyWmiiEyAS0jDAdxMScBu5j1GwQCf3E,2808
62
- seekrai/types/finetune.py,sha256=VHAzIvU-B99TEVsuwl0pf8TODFOMYKT1dxr0kRX4Z4o,7218
63
+ seekrai/types/finetune.py,sha256=-dRSjRqJVu2-dEfykOJYTuuzt6Ok1nx91gJzQ_WAqEU,15341
63
64
  seekrai/types/images.py,sha256=Fusj8OhVYFsT8kz636lRGGivLbPXo_ZNgakKwmzJi3U,914
64
65
  seekrai/types/ingestion.py,sha256=uUdKOR4xqSfAXWQOR1UOltSlOnuyAwKVA1Q2a6Yslk8,919
65
66
  seekrai/types/models.py,sha256=9Z0nvLdlAfpF8mNRW5-IqBdDHoE-3qQ5przmIDJgwLo,1345
66
67
  seekrai/types/projects.py,sha256=JFgpZdovia8Orcnhp6QkIEAXzyPCfKT_bUiwjxUaHHQ,670
67
- seekrai/types/tools.py,sha256=k6CcZwFhP_is-9KwZhRMWhhp6-z6HKwbbnrg0LOsS2I,3525
68
+ seekrai/types/tools.py,sha256=VkpEFVyTEGk3lzBky6lh7sAQF9iWGZfFPRI417tavLI,3936
68
69
  seekrai/types/vectordb.py,sha256=Fw3ZrEvWU5OHzXNIUXtD24JVG7pCULfudX_WDOazJnk,2454
69
70
  seekrai/utils/__init__.py,sha256=dfbiYEc47EBVRkq6C4O9y6tTGuPuV3LbV3__v01Mbds,658
70
71
  seekrai/utils/_log.py,sha256=Cayw5B394H2WGVTXPXS2AN8znQdxsgrLqADXgqmokvU,1649
@@ -72,8 +73,8 @@ seekrai/utils/api_helpers.py,sha256=0Y8BblNIr9h_R12zdmhkxgTlxgoRkbq84QNi4nNWGu8,
72
73
  seekrai/utils/files.py,sha256=7ixn_hgV-6pEhYqLyOp-EN0o8c1CzUwJzX9n3PQ5oqo,7164
73
74
  seekrai/utils/tools.py,sha256=jgJTL-dOIouDbEJLdQpQfpXhqaz_poQYS52adyUtBjo,1781
74
75
  seekrai/version.py,sha256=q6iGQVFor8zXiPP5F-3vy9TndOxKv5JXbaNJ2kdOQws,125
75
- seekrai-0.5.26.dist-info/METADATA,sha256=6DxW3YlPHwJzM0fCH7ly9xq3xjjn3EloDfb9OMVNuuY,4788
76
- seekrai-0.5.26.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
77
- seekrai-0.5.26.dist-info/entry_points.txt,sha256=N49yOEGi1sK7Xr13F_rkkcOxQ88suyiMoOmRhUHTZ_U,48
78
- seekrai-0.5.26.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
79
- seekrai-0.5.26.dist-info/RECORD,,
76
+ seekrai-0.5.29.dist-info/METADATA,sha256=bHPgRE1YAJ86dCrS3VCEoE2rMt7lh63iy2tnZNiCAh0,4788
77
+ seekrai-0.5.29.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
78
+ seekrai-0.5.29.dist-info/entry_points.txt,sha256=N49yOEGi1sK7Xr13F_rkkcOxQ88suyiMoOmRhUHTZ_U,48
79
+ seekrai-0.5.29.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
80
+ seekrai-0.5.29.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.3.0
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any