seekrai 0.5.1__py3-none-any.whl → 0.5.5__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.
@@ -22,6 +22,8 @@ def parse_data_line(line: str) -> str:
22
22
  def parse_stream(chunks: Iterator[str]) -> Iterator[Any]:
23
23
  buffer = []
24
24
  for chunk in chunks:
25
+ if chunk == "data: [DONE]":
26
+ break
25
27
  content = parse_data_line(chunk)
26
28
 
27
29
  if content:
@@ -4,6 +4,7 @@ from seekrai.resources.chat import AsyncChat, Chat
4
4
  from seekrai.resources.completions import AsyncCompletions, Completions
5
5
  from seekrai.resources.deployments import AsyncDeployments, Deployments
6
6
  from seekrai.resources.embeddings import AsyncEmbeddings, Embeddings
7
+ from seekrai.resources.explainability import AsyncExplainability, Explainability
7
8
  from seekrai.resources.files import AsyncFiles, Files
8
9
  from seekrai.resources.finetune import AsyncFineTuning, FineTuning
9
10
  from seekrai.resources.images import AsyncImages, Images
@@ -41,4 +42,6 @@ __all__ = [
41
42
  "VectorDatabase",
42
43
  "AsyncVectorDatabase",
43
44
  "AgentInference",
45
+ "AsyncExplainability",
46
+ "Explainability",
44
47
  ]
@@ -1,8 +1,8 @@
1
- from typing import Any, AsyncGenerator, Iterator, Union
1
+ from typing import Any, AsyncGenerator, Iterator, Optional, Union
2
2
 
3
3
  from seekrai.abstract import api_requestor
4
4
  from seekrai.seekrflow_response import SeekrFlowResponse
5
- from seekrai.types import Run, RunRequest, RunResponse, SeekrFlowRequest
5
+ from seekrai.types import ModelSettings, Run, RunRequest, RunResponse, SeekrFlowRequest
6
6
 
7
7
 
8
8
  class AgentInference:
@@ -16,7 +16,7 @@ class AgentInference:
16
16
  thread_id: str,
17
17
  *,
18
18
  stream: bool = False,
19
- **model_settings: Any,
19
+ model_settings: Optional[ModelSettings] = None,
20
20
  ) -> Union[RunResponse, Iterator[Any]]:
21
21
  """
22
22
  Run an inference call on a deployed agent.
@@ -25,13 +25,14 @@ class AgentInference:
25
25
  agent_id (str): The unique identifier of the deployed agent.
26
26
  thread_id (str): A thread identifier.
27
27
  stream (bool, optional): Whether to stream the response. Defaults to False.
28
- **model_settings: Additional parameters (such as temperature, max_tokens, etc).
28
+ model_settings (optional): Additional parameters (such as temperature, max_tokens, etc).
29
29
 
30
30
  Returns:
31
31
  A dictionary with the response (if non-streaming) or an iterator over response chunks.
32
32
  """
33
33
  payload = RunRequest(agent_id=agent_id).model_dump()
34
- payload.update(model_settings)
34
+ if model_settings is not None:
35
+ payload["model_settings"] = model_settings.model_dump()
35
36
  endpoint = f"threads/{thread_id}/runs"
36
37
  if stream:
37
38
  endpoint += "/stream"
@@ -146,7 +147,7 @@ class AsyncAgentInference:
146
147
  thread_id: str,
147
148
  *,
148
149
  stream: bool = False,
149
- **model_settings: Any,
150
+ model_settings: Optional[ModelSettings] = None,
150
151
  ) -> Union[RunResponse, AsyncGenerator[Any, None]]:
151
152
  """
152
153
  Run an inference call on a deployed agent.
@@ -155,13 +156,14 @@ class AsyncAgentInference:
155
156
  agent_id (str): The unique identifier of the deployed agent.
156
157
  thread_id (str): A thread identifier.
157
158
  stream (bool, optional): Whether to stream the response. Defaults to False.
158
- **model_settings: Additional parameters (such as temperature, max_tokens, etc).
159
+ model_settings (optional): Additional parameters (such as temperature, max_tokens, etc).
159
160
 
160
161
  Returns:
161
162
  A dictionary with the response (if non-streaming) or an iterator over response chunks.
162
163
  """
163
164
  payload = RunRequest(agent_id=agent_id).model_dump()
164
- payload.update(model_settings)
165
+ if model_settings is not None:
166
+ payload["model_settings"] = model_settings.model_dump()
165
167
  endpoint = f"threads/{thread_id}/runs"
166
168
  if stream:
167
169
  endpoint += "/stream"
@@ -22,6 +22,7 @@ class ChatCompletions:
22
22
  *,
23
23
  messages: List[Dict[str, str]],
24
24
  model: str,
25
+ max_completion_tokens: int | None = None,
25
26
  max_tokens: int | None = 512,
26
27
  stop: List[str] | None = None,
27
28
  temperature: float = 0.7,
@@ -36,7 +37,7 @@ class ChatCompletions:
36
37
  safety_model: str | None = None,
37
38
  response_format: Dict[str, str | Dict[str, Any]] | None = None,
38
39
  tools: Dict[str, str | Dict[str, Any]] | None = None,
39
- tool_choice: str | Dict[str, str | Dict[str, str]] | None = "auto",
40
+ tool_choice: str | Dict[str, str | Dict[str, str]] | None = None,
40
41
  ) -> ChatCompletionResponse | Iterator[ChatCompletionChunk]:
41
42
  """
42
43
  Method to generate completions based on a given prompt using a specified model.
@@ -45,6 +46,7 @@ class ChatCompletions:
45
46
  messages (List[Dict[str, str]]): A list of messages in the format
46
47
  `[{"role": seekrai.types.chat_completions.MessageRole, "content": TEXT}, ...]`
47
48
  model (str): The name of the model to query.
49
+ max_completion_tokens (int, optional): The maximum number of tokens the output can contain.
48
50
  max_tokens (int, optional): The maximum number of tokens to generate.
49
51
  Defaults to 512.
50
52
  stop (List[str], optional): List of strings at which to stop generation.
@@ -99,6 +101,7 @@ class ChatCompletions:
99
101
  top_p=top_p,
100
102
  top_k=top_k,
101
103
  temperature=temperature,
104
+ max_completion_tokens=max_completion_tokens,
102
105
  max_tokens=max_tokens,
103
106
  stop=stop,
104
107
  repetition_penalty=repetition_penalty,
@@ -110,14 +113,16 @@ class ChatCompletions:
110
113
  safety_model=safety_model,
111
114
  response_format=response_format,
112
115
  tools=tools or [],
113
- tool_choice=tool_choice,
114
116
  ).model_dump()
117
+ if tool_choice is not None:
118
+ parameter_payload["tool_choice"] = tool_choice
115
119
 
116
120
  response, _, _ = requestor.request(
117
121
  options=SeekrFlowRequest(
118
122
  method="POST",
119
123
  url="inference/chat/completions",
120
124
  params=parameter_payload,
125
+ headers={"content-type": "application/json"},
121
126
  ),
122
127
  stream=stream,
123
128
  )
@@ -139,6 +144,7 @@ class AsyncChatCompletions:
139
144
  *,
140
145
  messages: List[Dict[str, str]],
141
146
  model: str,
147
+ max_completion_tokens: int | None = None,
142
148
  max_tokens: int | None = 512,
143
149
  stop: List[str] | None = None,
144
150
  temperature: float = 0.7,
@@ -162,6 +168,7 @@ class AsyncChatCompletions:
162
168
  messages (List[Dict[str, str]]): A list of messages in the format
163
169
  `[{"role": seekrai.types.chat_completions.MessageRole, "content": TEXT}, ...]`
164
170
  model (str): The name of the model to query.
171
+ max_completion_tokens (int, optional): The maximum number of tokens the output can contain.
165
172
  max_tokens (int, optional): The maximum number of tokens to generate.
166
173
  Defaults to 512.
167
174
  stop (List[str], optional): List of strings at which to stop generation.
@@ -217,6 +224,7 @@ class AsyncChatCompletions:
217
224
  top_p=top_p,
218
225
  top_k=top_k,
219
226
  temperature=temperature,
227
+ max_completion_tokens=max_completion_tokens,
220
228
  max_tokens=max_tokens,
221
229
  stop=stop,
222
230
  repetition_penalty=repetition_penalty,
@@ -236,6 +244,7 @@ class AsyncChatCompletions:
236
244
  method="POST",
237
245
  url="inference/chat/completions",
238
246
  params=parameter_payload,
247
+ headers={"content-type": "application/json"},
239
248
  ),
240
249
  stream=stream,
241
250
  )
@@ -0,0 +1,84 @@
1
+ from typing import Optional
2
+
3
+ from seekrai.abstract import api_requestor
4
+ from seekrai.resources.resource_base import ResourceBase
5
+ from seekrai.seekrflow_response import SeekrFlowResponse
6
+ from seekrai.types import (
7
+ SeekrFlowRequest,
8
+ )
9
+ from seekrai.types.explainability import (
10
+ InfluentialFinetuningDataRequest,
11
+ InfluentialFinetuningDataResponse,
12
+ )
13
+
14
+
15
+ class Explainability(ResourceBase):
16
+ def get_influential_finetuning_data(
17
+ self, model_id: str, question: str, answer: Optional[str], k: int = 5
18
+ ) -> InfluentialFinetuningDataResponse:
19
+ """
20
+ Retrieve influential QA pair fine tuning data for a specific model.
21
+ Args:
22
+ - model_id (str): ID of the model to explain.
23
+ - question (str): question from user,
24
+ - answer (str | None): answer of the finetuned model to the question; if None, the answer is retrieved from the finetuned model specified by model_id,
25
+ - k (int): the number of results to be retrieved (5 by default)
26
+ Returns:
27
+ InfluentialFinetuningDataResponse: Object containing the influential fine tuning data.
28
+ """
29
+ requestor = api_requestor.APIRequestor(
30
+ client=self._client,
31
+ )
32
+ # Create query parameters dictionary
33
+ parameter_payload = InfluentialFinetuningDataRequest(
34
+ question=question, answer=answer, k=k
35
+ ).model_dump()
36
+
37
+ # if limit is not None:
38
+ # params["limit"] = limit
39
+ # TODO limits =? timeout: float | None = None, max_retries: int | None = None,
40
+
41
+ response, _, _ = requestor.request(
42
+ options=SeekrFlowRequest(
43
+ method="GET",
44
+ url=f"v1/flow/explain/models/{model_id}/influential-finetuning-data",
45
+ params=parameter_payload,
46
+ ),
47
+ stream=False,
48
+ )
49
+ assert isinstance(response, SeekrFlowResponse)
50
+ return InfluentialFinetuningDataResponse(**response.data)
51
+
52
+
53
+ class AsyncExplainability(ResourceBase):
54
+ async def get_influential_finetuning_data(
55
+ self, model_id: str, question: str, answer: Optional[str], k: int = 5
56
+ ) -> InfluentialFinetuningDataResponse:
57
+ """
58
+ Retrieve influential QA pair finetuning data for a specific model asynchronously.
59
+ Args:
60
+ - model_id (str): ID of the model to explain.
61
+ - question (str): question from user,
62
+ - answer (str | None): answer of the finetuned model to the question; if None, the answer is retrieved from the finetuned model specified by model_id,
63
+ - k (int): the number of results to be retrieved (5 by default),
64
+ Returns:
65
+ InfluentialFinetuningDataResponse: Object containing the influential finetuning data.
66
+ """
67
+ requestor = api_requestor.APIRequestor(
68
+ client=self._client,
69
+ )
70
+ # Create query parameters dictionary
71
+ parameter_payload = InfluentialFinetuningDataRequest(
72
+ model_id=model_id, question=question, answer=answer, k=k
73
+ ).model_dump()
74
+
75
+ response, _, _ = await requestor.arequest(
76
+ options=SeekrFlowRequest(
77
+ method="GET",
78
+ url=f"v1/flow/explain/models/{model_id}/influential-finetuning-data",
79
+ params=parameter_payload,
80
+ ),
81
+ stream=False,
82
+ )
83
+ assert isinstance(response, SeekrFlowResponse)
84
+ return InfluentialFinetuningDataResponse(**response.data)
seekrai/types/__init__.py CHANGED
@@ -13,9 +13,11 @@ from seekrai.types.agents import (
13
13
  InputMessage,
14
14
  InputText,
15
15
  MessageUpdateRequest,
16
+ ModelSettings,
16
17
  OutputGuardrail,
17
18
  OutputMessage,
18
19
  OutputText,
20
+ ReasoningEffort,
19
21
  Run,
20
22
  RunRequest,
21
23
  RunResponse,
@@ -183,9 +185,11 @@ __all__ = [
183
185
  "RunUsage",
184
186
  "RunStatus",
185
187
  "RunStepUsage",
188
+ "ModelSettings",
186
189
  "Agent",
187
190
  "AgentStatus",
188
191
  "CreateAgentRequest",
192
+ "ReasoningEffort",
189
193
  "AgentDeleteResponse",
190
194
  "ToolBase",
191
195
  "ToolType",
@@ -3,8 +3,10 @@ from seekrai.types.agents.agent import (
3
3
  AgentDeleteResponse,
4
4
  AgentStatus,
5
5
  CreateAgentRequest,
6
+ ReasoningEffort,
6
7
  )
7
8
  from seekrai.types.agents.runs import (
9
+ ModelSettings,
8
10
  Run,
9
11
  RunRequest,
10
12
  RunResponse,
@@ -51,6 +53,7 @@ __all__ = [
51
53
  "RunUsage",
52
54
  "RunStatus",
53
55
  "RunStepUsage",
56
+ "ModelSettings",
54
57
  "MessageUpdateRequest",
55
58
  "ThreadCreateRequest",
56
59
  "ThreadStatus",
@@ -78,6 +81,7 @@ __all__ = [
78
81
  "Agent",
79
82
  "AgentStatus",
80
83
  "CreateAgentRequest",
84
+ "ReasoningEffort",
81
85
  "AgentDeleteResponse",
82
86
  "ToolBase",
83
87
  "ToolType",
@@ -14,11 +14,17 @@ class AgentStatus(str, enum.Enum):
14
14
  FAILED = "Failed"
15
15
 
16
16
 
17
+ class ReasoningEffort(str, enum.Enum):
18
+ PERFORMANCE_OPTIMIZED = "performance_optimized"
19
+ SPEED_OPTIMIZED = "speed_optimized"
20
+
21
+
17
22
  class CreateAgentRequest(BaseModel):
18
23
  name: str
19
24
  instructions: str
20
25
  tools: list[Tool]
21
26
  model_id: str
27
+ reasoning_effort: Optional[ReasoningEffort] = None
22
28
 
23
29
 
24
30
  class Agent(BaseModel):
@@ -35,6 +41,7 @@ class Agent(BaseModel):
35
41
  updated_at: datetime
36
42
  last_deployed_at: Optional[datetime] = None
37
43
  active_duration: int = Field(default=0, ge=0)
44
+ reasoning_effort: ReasoningEffort
38
45
 
39
46
 
40
47
  class AgentDeleteResponse(BaseModel):
@@ -115,3 +115,20 @@ class RunStep(BaseModel):
115
115
  completed_at: Optional[datetime.datetime] = None
116
116
  meta_data: dict[str, Any] = Field(default_factory=dict)
117
117
  usage: Optional[RunStepUsage] = None
118
+
119
+
120
+ class ModelSettings(BaseModel):
121
+ """Settings to use when calling an LLM.
122
+
123
+ This class holds optional model configuration parameters (e.g. temperature,
124
+ top_p, penalties, truncation, etc.).
125
+
126
+ Not all models/providers support all of these parameters, so please check the API documentation
127
+ for the specific model and provider you are using.
128
+ """
129
+
130
+ temperature: float = Field(default=1.0, ge=0.0, le=2.0)
131
+ top_p: float = Field(default=1.0, ge=0.0, le=1.0)
132
+ frequency_penalty: float = Field(default=0.0, ge=-2.0, le=2.0)
133
+ presence_penalty: float = Field(default=0.0, ge=-2.0, le=2.0)
134
+ max_tokens: Optional[int] = None
@@ -5,7 +5,11 @@ from seekrai.types.agents.tools.env_model_config import EnvConfig
5
5
 
6
6
  # TODO: figure out better way of creating tool environment models (within tool ideally), but retaining separate model_configs
7
7
  class FileSearchEnv(EnvConfig):
8
- file_search_index: str
9
- document_tool_desc: str
10
- top_k: int = Field(default=10)
11
- score_threshold: int = Field(default=0)
8
+ file_search_index: str = Field(min_length=1)
9
+ document_tool_desc: str = Field(min_length=1)
10
+ top_k: int = Field(
11
+ default=10, ge=1, le=100, description="Top K must be >= 1 and <= 100"
12
+ )
13
+ score_threshold: float = Field(
14
+ default=0, ge=0, lt=1.0, description="Score must be ≥ 0.0 and < 1.0"
15
+ )
@@ -78,6 +78,7 @@ class ChatCompletionRequest(BaseModel):
78
78
  messages: List[ChatCompletionMessage]
79
79
  # model name
80
80
  model: str
81
+ max_completion_tokens: int | None = None
81
82
  # stopping criteria: max tokens to generate
82
83
  max_tokens: int | None = None
83
84
  # stopping criteria: list of strings to stop generation
@@ -35,6 +35,7 @@ class DeploymentProcessor(str, enum.Enum):
35
35
  H100 = "H100"
36
36
  XEON = "XEON"
37
37
  NVIDIA = "NVIDIA" # TODO - this doesnt make sense with A100, etc.
38
+ AMD = "AMD"
38
39
 
39
40
 
40
41
  class NewDeploymentRequest(BaseModel):
@@ -0,0 +1,57 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+ from enum import Enum
5
+ from typing import Any, Dict, List, Literal
6
+
7
+ from pydantic import Field
8
+
9
+ from seekrai.types.abstract import BaseModel
10
+
11
+
12
+ class InfluentialFinetuningDataResponse(BaseModel):
13
+ results: List[Dict[str, Any]]
14
+ version: str
15
+
16
+
17
+ class InfluentialFinetuningDataRequest(BaseModel):
18
+ question: str
19
+ answer: str = Field(
20
+ default="",
21
+ description="Response could be generated or given",
22
+ )
23
+ k: int
24
+
25
+
26
+ class ExplainabilityJobStatus(Enum):
27
+ QUEUED = "queued"
28
+ RUNNING = "running"
29
+ COMPLETED = "completed"
30
+ FAILED = "failed"
31
+
32
+ # TODO should titles along the following get added:
33
+ # create_index
34
+ # populate_index
35
+ # delete_index
36
+ # influential-finetuning-data
37
+
38
+
39
+ class ExplainabilityRequest(BaseModel):
40
+ files: List[str] = Field(
41
+ default=..., description="List of file ids to use for fine tuning"
42
+ )
43
+ method: str = Field(default="best", description="Method to use for explainability")
44
+
45
+
46
+ class ExplainabilityResponse(BaseModel):
47
+ id: str = Field(default=..., description="Explainability job ID")
48
+ created_at: datetime
49
+ status: ExplainabilityJobStatus
50
+ output_files: List[str]
51
+
52
+
53
+ class ExplainabilityList(BaseModel):
54
+ # object type
55
+ object: Literal["list"] | None = None
56
+ # list of fine-tune job objects
57
+ data: List[ExplainabilityResponse] | None = None
seekrai/types/finetune.py CHANGED
@@ -72,6 +72,11 @@ class FinetuneEventType(str, Enum):
72
72
  WARNING = "WARNING"
73
73
 
74
74
 
75
+ class FineTuneType(str, Enum):
76
+ STANDARD = "STANDARD"
77
+ DPO = "DPO"
78
+
79
+
75
80
  class FinetuneEvent(BaseModel):
76
81
  """
77
82
  Fine-tune event type
@@ -105,6 +110,8 @@ class TrainingConfig(BaseModel):
105
110
  # wandb_key: str | None = None
106
111
  # IFT by default
107
112
  pre_train: bool = False
113
+ # fine-tune type
114
+ fine_tune_type: FineTuneType = FineTuneType.STANDARD
108
115
 
109
116
 
110
117
  class AcceleratorType(str, Enum):
@@ -138,6 +145,8 @@ class FinetuneResponse(BaseModel):
138
145
 
139
146
  # job ID
140
147
  id: str | None = None
148
+ # fine-tune type
149
+ fine_tune_type: FineTuneType = FineTuneType.STANDARD
141
150
  # training file id
142
151
  training_files: List[str] | None = None
143
152
  # validation file id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: seekrai
3
- Version: 0.5.1
3
+ Version: 0.5.5
4
4
  Summary: Python client for SeekrAI
5
5
  License: Apache-2.0
6
6
  Author: SeekrFlow
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Dist: click (>=8.1.7,<9.0.0)
18
18
  Requires-Dist: eval-type-backport (>=0.1.3,<0.3.0)
19
19
  Requires-Dist: filelock (>=3.13.1,<4.0.0)
20
- Requires-Dist: httpx[http2] (>=0.27.0,<0.28.0)
20
+ Requires-Dist: httpx[http2] (>=0.28.0,<0.29.0)
21
21
  Requires-Dist: numpy (>=1.23.5) ; python_version < "3.12"
22
22
  Requires-Dist: numpy (>=1.26.0) ; python_version >= "3.12"
23
23
  Requires-Dist: pillow (>=10.3.0,<11.0.0)
@@ -70,7 +70,7 @@ from seekrai import SeekrFlow
70
70
  client = SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY"))
71
71
 
72
72
  response = client.chat.completions.create(
73
- model="meta-llama-3-8b-instruct",
73
+ model="meta-llama/Llama-3.1-8B-Instruct",
74
74
  messages=[{"role": "user", "content": "tell me about new york"}],
75
75
  )
76
76
  print(response.choices[0].message.content)
@@ -84,7 +84,7 @@ from seekrai import SeekrFlow
84
84
 
85
85
  client = SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY"))
86
86
  stream = client.chat.completions.create(
87
- model="meta-llama-3-8b-instruct",
87
+ model="meta-llama/Llama-3.1-8B-Instruct",
88
88
  messages=[{"role": "user", "content": "tell me about new york"}],
89
89
  stream=True,
90
90
  )
@@ -110,7 +110,7 @@ async def async_chat_completion(messages):
110
110
  async_client = AsyncSeekrFlow(api_key=os.environ.get("SEEKR_API_KEY"))
111
111
  tasks = [
112
112
  async_client.chat.completions.create(
113
- model="meta-llama-3-8b-instruct",
113
+ model="meta-llama/Llama-3.1-8B-Instruct",
114
114
  messages=[{"role": "user", "content": message}],
115
115
  )
116
116
  for message in messages
@@ -151,7 +151,7 @@ client = SeekrFlow(api_key=os.environ.get("SEEKR_API_KEY"))
151
151
 
152
152
  client.fine_tuning.create(
153
153
  training_file='file-d0d318cb-b7d9-493a-bd70-1cfe089d3815',
154
- model='meta-llama-3-8b-instruct',
154
+ model='meta-llama/Llama-3.1-8B-Instruct',
155
155
  n_epochs=3,
156
156
  n_checkpoints=1,
157
157
  batch_size=4,
@@ -1,22 +1,23 @@
1
1
  seekrai/__init__.py,sha256=b3kBCTm-FoxCrNJ4hDieNBNN3Cj2xvevMUXEJQbntiE,900
2
2
  seekrai/abstract/__init__.py,sha256=wNiOTW9TJpUgfCJCG-wAbhhWWH2PtoVpAuL3nxvQGps,56
3
3
  seekrai/abstract/api_requestor.py,sha256=MfAEHsmjzjHM3Vr3BrNu2Oy_4YmDC5pHeYPFrtd9yAs,13582
4
- seekrai/abstract/response_parsing.py,sha256=WOn3whR5E6_mExmMpx3p9JlgjTjEIhcxrsFlI2I5J6c,2877
4
+ seekrai/abstract/response_parsing.py,sha256=saREmIuJAPMkrzypR8zzFNAQwdF6wXn6VkXfFSQ_Ots,2931
5
5
  seekrai/client.py,sha256=kDzhUj7xVi47-h2YtNcX3JGDCIM1xAUYKZaXDm8fovA,5984
6
6
  seekrai/constants.py,sha256=hoR2iF5te5Ydjt_lxIOSGID4vESIakG4F-3xAWdwxaU,1854
7
7
  seekrai/error.py,sha256=rAYL8qEd8INwYMMKvhS-HKeC3QkWL4Wq-zfazFU-zBg,4861
8
8
  seekrai/filemanager.py,sha256=bO2OvjZ9Cx5r2vr3Ocpd_0qVc3owRDT2LCU4Zmp2uDY,15489
9
- seekrai/resources/__init__.py,sha256=GRM2kLOr-NaqrIcRnPQN15MP5tAs7vLI_7_1CYC6rt8,1371
9
+ seekrai/resources/__init__.py,sha256=EPMOqI3mvpzMjNJIr2Da2tkDqSq_lntMph2O-j4pyIA,1501
10
10
  seekrai/resources/agents/__init__.py,sha256=qPdo3vMZUaGZPdZCNYL0hjtX-T6yAlnpE_zc5otkjak,373
11
- seekrai/resources/agents/agent_inference.py,sha256=rYALRvGtu9ed8-cG7tSNbyrsg0sn6pN9X6KMNJkSC08,8990
11
+ seekrai/resources/agents/agent_inference.py,sha256=oNk8UK39XY9mRaBdE5icpi-nSWiRKHgQBcq-DIhSht4,9219
12
12
  seekrai/resources/agents/agents.py,sha256=Cs184v2jYQRlk5MmsAH_hRI93D7qS6mJpuCLGIxH3as,7996
13
13
  seekrai/resources/agents/threads.py,sha256=BwZ2_6wlezsb12PQjEw1fgdJh5S83SPgD6qZQoGvyIM,14544
14
14
  seekrai/resources/alignment.py,sha256=IOKlKK2I9_NhS9pwcrsd9-5OO7lVT8Uw0y_wuGHOnyA,5839
15
15
  seekrai/resources/chat/__init__.py,sha256=KmtPupgECtEN80NyvcnSmieTAFXhwmVxhMHP0qhspA4,618
16
- seekrai/resources/chat/completions.py,sha256=9KP1eiQ7uHuf8A4BPOKOKwgnsn6kkp2swT6Q5g_4xoI,11656
16
+ seekrai/resources/chat/completions.py,sha256=QcNsZqpJjkbiD_dN9fGBw8hgb_hLiHUqoMzHV_vtkqQ,12258
17
17
  seekrai/resources/completions.py,sha256=JhTN_lW2mblfHHONFmPC7QZei3wo5vx6GliMs9FkbOY,8452
18
18
  seekrai/resources/deployments.py,sha256=DY7IN7QgqDduCHGNuHENSVwrE5PXFL88jWgh8SES7Qk,5970
19
19
  seekrai/resources/embeddings.py,sha256=UMVb6LIJn8KFACMajVRL3SY88bbZl1aQ2Sx5MdT1sQQ,2593
20
+ seekrai/resources/explainability.py,sha256=HAFxrPIvaYQxexGk8VPO1R67yDbSB6CqVly0ZY_dQcQ,3495
20
21
  seekrai/resources/files.py,sha256=bEn4jfYWfsI2OqKRGCUpnefIN-udNnafItgT2A7m-e4,15329
21
22
  seekrai/resources/finetune.py,sha256=Aw8lU9TohZdJGOstex12gg2t-RDppOponnWg203Bn-Q,11304
22
23
  seekrai/resources/images.py,sha256=VjZiU2cxq2uNrJzm-EwNpOW3rBIgFyRHss8_DF1OuVE,4799
@@ -26,29 +27,30 @@ seekrai/resources/projects.py,sha256=Nmuh0_BwWoAO89r-p0ZEM8p4NHIH1EUeP83ivRoW5hw
26
27
  seekrai/resources/resource_base.py,sha256=rFIHFeqKPiAEbMYcMiIGHIym7qxwmh-EGsWiZcMDHdk,224
27
28
  seekrai/resources/vectordb.py,sha256=RRULyuldM4A0RlveBNZWFrav7l405wm89ua3k3Bqkgc,14527
28
29
  seekrai/seekrflow_response.py,sha256=5RFEQzamDy7sTSDkxSsZQThZ3biNmeCPeHWdrFId5Go,1320
29
- seekrai/types/__init__.py,sha256=JJwKx63vKZi6tUBe9rlg1qKdmOXPk7SRhx63ZmOZtZ0,4382
30
+ seekrai/types/__init__.py,sha256=rgFu__IgCM706ziux2wDfT5GNVyo2SWDWvNS0XF7nrw,4466
30
31
  seekrai/types/abstract.py,sha256=TqWFQV_6bPblywfCH-r8FCkXWvPkc9KlJ4QVgyrnaMc,642
31
- seekrai/types/agents/__init__.py,sha256=0Yu67fNbYvGYIZJXBRtw1nIADcm7jfX4QnCsrfsRG7g,1942
32
- seekrai/types/agents/agent.py,sha256=95GTP2X4f3vVsRZ8rCxfsJz9yVgltGTtybXg99ZNRGw,849
33
- seekrai/types/agents/runs.py,sha256=KqNYjNN0m-da29jM1N-iF_Bb_q--ar5eyfJnZGV3sbc,3131
32
+ seekrai/types/agents/__init__.py,sha256=gQBTRS5YjUvbz_uexwJ55QGMDeXytnd_-cFPxz926p0,2026
33
+ seekrai/types/agents/agent.py,sha256=QZKp0xPo70regWKohWrkuTlmkvnN_2St7uFkX8M14yY,1075
34
+ seekrai/types/agents/runs.py,sha256=BZRwrdRWizOcoMJ1r8FKq06znIfd25MNVTP7DxZBQWA,3780
34
35
  seekrai/types/agents/threads.py,sha256=TinCMKv1bi5LzboDyCx1XI4Zzd8UzUZos4VOrTNhmEc,6835
35
36
  seekrai/types/agents/tools/__init__.py,sha256=-rdY30tqMSSapMKPFOYa-6crd6tVOUvHCzOW1UXxO0U,442
36
37
  seekrai/types/agents/tools/env_model_config.py,sha256=9POx2DPwfSXgoaziJv7QvKeMrhMsYD1exnanSRK48vw,177
37
38
  seekrai/types/agents/tools/schemas/__init__.py,sha256=sWNKRzmnWoTv3cJ5k0q0tVuWeOlRhDMEvVeClF1r4p8,202
38
39
  seekrai/types/agents/tools/schemas/file_search.py,sha256=sBH3nHgp2aIlbDsv6B3Er8LFzq6VZSXXzgN_toGVY28,289
39
- seekrai/types/agents/tools/schemas/file_search_env.py,sha256=0ZZWnaQzzYTZa-hCedmm77zn1G8JGqLpqDucK_P_Vo8,388
40
+ seekrai/types/agents/tools/schemas/file_search_env.py,sha256=3iS69R8DpLPTJY2WhiCbOMV47-vXvMjBA7csgfIxKeU,582
40
41
  seekrai/types/agents/tools/tool.py,sha256=VVreXuKz1LX7L1En2wTYnrCt6Za2KK2pco0RH9PxgX8,235
41
42
  seekrai/types/agents/tools/tool_env_types.py,sha256=qQDRbRBU4VGLb6uLIq_G4o-cdgZ5DBwBCa4m1Gw7OYg,151
42
43
  seekrai/types/agents/tools/tool_types.py,sha256=Auciez5JSSGjczfG38UAuuCeyRKs-ikP3bh2VAEUPFo,242
43
44
  seekrai/types/alignment.py,sha256=t1jS_lylUF7zbnf91ceXc3v6HzPmegUCkc3_eypTsSg,2109
44
- seekrai/types/chat_completions.py,sha256=xRTHBbDJDbz0HgW042WX3csQDolhjEuO81w0rzFSeBU,3691
45
+ seekrai/types/chat_completions.py,sha256=Z7H1MkMgb4O0O5LDMKotQqhjGVCYk5eBeZ8n--RJpf8,3736
45
46
  seekrai/types/common.py,sha256=YI1pE-i_lDLU2o6FjoINdIhPXsV9lUl2MeAg2aRtT-M,2062
46
47
  seekrai/types/completions.py,sha256=lm9AFdZR3Xg5AHPkV-qETHikkwMJmkHrLGr5GG-YR-M,2171
47
- seekrai/types/deployments.py,sha256=GdZPDaQgzmk9W1aXxZr9CDxqJRNv7NP0pNvqRV3E4xM,1760
48
+ seekrai/types/deployments.py,sha256=CQd7uhnURnhXE4_W_1FDv3p8IpZBSgHIG1JCOgz8VA0,1776
48
49
  seekrai/types/embeddings.py,sha256=OANoLNOs0aceS8NppVvvcNYQbF7-pAOAmcr30pw64OU,749
49
50
  seekrai/types/error.py,sha256=uTKISs9aRC4_6zwirtNkanxepN8KY-SqCq0kNbfZylQ,370
51
+ seekrai/types/explainability.py,sha256=l9dp9DJ_GPkHzNw_3zwiGkpAWDETMDN8NSoymhKvdgc,1420
50
52
  seekrai/types/files.py,sha256=yjJYT8twY-cNh9AY9qlcN_moTeCfR0tJSSCQsOVB02Y,2708
51
- seekrai/types/finetune.py,sha256=e1TexW2PdNcRAGdHeNmRSWGKE2K9NLhbdcce0XYvWio,6162
53
+ seekrai/types/finetune.py,sha256=n65WGm7mXqmJSyo1cb8IAbqpoygYCwDo7yGWPF39ayw,6393
52
54
  seekrai/types/images.py,sha256=Fusj8OhVYFsT8kz636lRGGivLbPXo_ZNgakKwmzJi3U,914
53
55
  seekrai/types/ingestion.py,sha256=uUdKOR4xqSfAXWQOR1UOltSlOnuyAwKVA1Q2a6Yslk8,919
54
56
  seekrai/types/models.py,sha256=9Z0nvLdlAfpF8mNRW5-IqBdDHoE-3qQ5przmIDJgwLo,1345
@@ -60,8 +62,8 @@ seekrai/utils/api_helpers.py,sha256=0Y8BblNIr9h_R12zdmhkxgTlxgoRkbq84QNi4nNWGu8,
60
62
  seekrai/utils/files.py,sha256=7ixn_hgV-6pEhYqLyOp-EN0o8c1CzUwJzX9n3PQ5oqo,7164
61
63
  seekrai/utils/tools.py,sha256=jgJTL-dOIouDbEJLdQpQfpXhqaz_poQYS52adyUtBjo,1781
62
64
  seekrai/version.py,sha256=q6iGQVFor8zXiPP5F-3vy9TndOxKv5JXbaNJ2kdOQws,125
63
- seekrai-0.5.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
64
- seekrai-0.5.1.dist-info/METADATA,sha256=WE8Hbfl-J_XWofa47b1BBFjItV4ny3t8AOBsG8zbwQw,4748
65
- seekrai-0.5.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
66
- seekrai-0.5.1.dist-info/entry_points.txt,sha256=N49yOEGi1sK7Xr13F_rkkcOxQ88suyiMoOmRhUHTZ_U,48
67
- seekrai-0.5.1.dist-info/RECORD,,
65
+ seekrai-0.5.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
66
+ seekrai-0.5.5.dist-info/METADATA,sha256=3hWqTgeliuL8gotG8dPW8oz5QIJUcgmYPHkJ6GD_1tU,4780
67
+ seekrai-0.5.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
68
+ seekrai-0.5.5.dist-info/entry_points.txt,sha256=N49yOEGi1sK7Xr13F_rkkcOxQ88suyiMoOmRhUHTZ_U,48
69
+ seekrai-0.5.5.dist-info/RECORD,,