seekrai 0.4.2__py3-none-any.whl → 0.5.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.
Files changed (48) hide show
  1. seekrai/__init__.py +0 -1
  2. seekrai/abstract/api_requestor.py +108 -251
  3. seekrai/abstract/response_parsing.py +99 -0
  4. seekrai/client.py +12 -0
  5. seekrai/filemanager.py +181 -3
  6. seekrai/resources/__init__.py +10 -0
  7. seekrai/resources/agents/__init__.py +13 -0
  8. seekrai/resources/agents/agent_inference.py +277 -0
  9. seekrai/resources/agents/agents.py +272 -0
  10. seekrai/resources/agents/threads.py +454 -0
  11. seekrai/resources/alignment.py +3 -9
  12. seekrai/resources/completions.py +3 -9
  13. seekrai/resources/deployments.py +4 -9
  14. seekrai/resources/embeddings.py +3 -9
  15. seekrai/resources/files.py +163 -48
  16. seekrai/resources/finetune.py +3 -9
  17. seekrai/resources/images.py +3 -5
  18. seekrai/resources/ingestion.py +173 -0
  19. seekrai/resources/models.py +35 -124
  20. seekrai/resources/projects.py +4 -9
  21. seekrai/resources/resource_base.py +10 -0
  22. seekrai/resources/vectordb.py +482 -0
  23. seekrai/types/__init__.py +87 -0
  24. seekrai/types/agents/__init__.py +89 -0
  25. seekrai/types/agents/agent.py +42 -0
  26. seekrai/types/agents/runs.py +117 -0
  27. seekrai/types/agents/threads.py +265 -0
  28. seekrai/types/agents/tools/__init__.py +16 -0
  29. seekrai/types/agents/tools/env_model_config.py +7 -0
  30. seekrai/types/agents/tools/schemas/__init__.py +8 -0
  31. seekrai/types/agents/tools/schemas/file_search.py +9 -0
  32. seekrai/types/agents/tools/schemas/file_search_env.py +11 -0
  33. seekrai/types/agents/tools/tool.py +14 -0
  34. seekrai/types/agents/tools/tool_env_types.py +4 -0
  35. seekrai/types/agents/tools/tool_types.py +10 -0
  36. seekrai/types/alignment.py +6 -2
  37. seekrai/types/common.py +7 -2
  38. seekrai/types/files.py +5 -0
  39. seekrai/types/finetune.py +1 -0
  40. seekrai/types/ingestion.py +29 -0
  41. seekrai/types/models.py +3 -0
  42. seekrai/types/vectordb.py +78 -0
  43. {seekrai-0.4.2.dist-info → seekrai-0.5.0.dist-info}/METADATA +3 -3
  44. seekrai-0.5.0.dist-info/RECORD +67 -0
  45. {seekrai-0.4.2.dist-info → seekrai-0.5.0.dist-info}/WHEEL +1 -1
  46. seekrai-0.4.2.dist-info/RECORD +0 -46
  47. {seekrai-0.4.2.dist-info → seekrai-0.5.0.dist-info}/LICENSE +0 -0
  48. {seekrai-0.4.2.dist-info → seekrai-0.5.0.dist-info}/entry_points.txt +0 -0
@@ -1,56 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
4
- from pathlib import Path
5
- from typing import Any, List
6
-
7
- from tqdm import tqdm
8
- from tqdm.utils import CallbackIOWrapper
9
-
10
3
  from seekrai.abstract import api_requestor
11
- from seekrai.constants import DISABLE_TQDM
4
+ from seekrai.resources.resource_base import ResourceBase
12
5
  from seekrai.seekrflow_response import SeekrFlowResponse
13
- from seekrai.types import ModelList, ModelResponse, SeekrFlowClient, SeekrFlowRequest
14
- from seekrai.types.models import ModelType
15
-
16
-
17
- class Models:
18
- def __init__(self, client: SeekrFlowClient) -> None:
19
- self._client = client
20
-
21
- def upload(
22
- self,
23
- file: Path | str,
24
- *,
25
- model_type: ModelType | str = ModelType.OBJECT_DETECTION,
26
- ) -> ModelResponse:
27
- if isinstance(file, str):
28
- file = Path(file)
6
+ from seekrai.types import ModelList, ModelResponse, SeekrFlowRequest
7
+ from seekrai.types.common import ObjectType
8
+ from seekrai.utils import parse_timestamp
29
9
 
30
- requestor = api_requestor.APIRequestor(
31
- client=self._client,
32
- )
33
- file_size = os.stat(file.as_posix()).st_size
34
-
35
- with tqdm(
36
- total=file_size,
37
- unit="B",
38
- unit_scale=True,
39
- desc=f"Uploading model file {file.name}",
40
- disable=bool(DISABLE_TQDM),
41
- ) as t:
42
- with file.open("rb") as f:
43
- reader_wrapper = CallbackIOWrapper(t.update, f, "read")
44
- response, _, _ = requestor.request(
45
- options=SeekrFlowRequest(
46
- method="PUT",
47
- url="flow/pt-models",
48
- files={"files": reader_wrapper, "filename": file.name},
49
- params={"purpose": model_type},
50
- ),
51
- )
52
- return ModelResponse(**response.data)
53
10
 
11
+ class Models(ResourceBase):
54
12
  def list(
55
13
  self,
56
14
  ) -> ModelList:
@@ -58,7 +16,7 @@ class Models:
58
16
  Method to return list of models on the API
59
17
 
60
18
  Returns:
61
- List[ModelResponse]: List of model objects
19
+ ModelList: List of model objects
62
20
  """
63
21
 
64
22
  requestor = api_requestor.APIRequestor(
@@ -68,95 +26,36 @@ class Models:
68
26
  response, _, _ = requestor.request(
69
27
  options=SeekrFlowRequest(
70
28
  method="GET",
71
- url="flow/pt-models",
72
- ),
73
- stream=False,
74
- )
75
-
76
- assert isinstance(response, SeekrFlowResponse)
77
- return ModelList(**response.data)
78
-
79
- def promote(self, id: str) -> ModelResponse:
80
- requestor = api_requestor.APIRequestor(
81
- client=self._client,
82
- )
83
-
84
- response, _, _ = requestor.request(
85
- options=SeekrFlowRequest(
86
- method="GET",
87
- url=f"flow/pt-models/{id}/promote-model",
88
- params={"model_id": id},
89
- ),
90
- stream=False,
91
- )
92
-
93
- assert isinstance(response, SeekrFlowResponse)
94
-
95
- return ModelResponse(**response.data)
96
-
97
- def demote(self, id: str) -> ModelResponse:
98
- requestor = api_requestor.APIRequestor(
99
- client=self._client,
100
- )
101
-
102
- response, _, _ = requestor.request(
103
- options=SeekrFlowRequest(
104
- method="GET",
105
- url=f"flow/pt-models/{id}/demote-model",
106
- params={"model_id": id},
29
+ url="flow/models",
107
30
  ),
108
31
  stream=False,
109
32
  )
110
-
111
33
  assert isinstance(response, SeekrFlowResponse)
112
34
 
113
- return ModelResponse(**response.data)
35
+ model_responses = [
36
+ ModelResponse(
37
+ id=str(model["id"]),
38
+ object=ObjectType.Model,
39
+ name=model["name"],
40
+ bytes=model["size"],
41
+ created_at=parse_timestamp(model["created_at"]),
42
+ model_type=model["model_type"],
43
+ )
44
+ for model in response.data["data"]
45
+ ]
114
46
 
115
- def predict(self, id: str, file: Path | str) -> Any:
116
- requestor = api_requestor.APIRequestor(
117
- client=self._client,
118
- )
47
+ return ModelList(data=model_responses)
119
48
 
120
- if isinstance(file, str):
121
- file = Path(file)
122
-
123
- file_size = os.stat(file.as_posix()).st_size
124
-
125
- with tqdm(
126
- total=file_size,
127
- unit="B",
128
- unit_scale=True,
129
- desc=f"Uploading file {file.name}",
130
- disable=bool(DISABLE_TQDM),
131
- ):
132
- with file.open("rb") as f:
133
- response, _, _ = requestor.request(
134
- options=SeekrFlowRequest(
135
- method="POST",
136
- url="flow/pt-models/predict",
137
- files={"files": f, "filename": file.name},
138
- params={"model_id": id},
139
- ),
140
- stream=False,
141
- )
142
-
143
- assert isinstance(response, SeekrFlowResponse)
144
-
145
- return response.data
146
-
147
-
148
- class AsyncModels:
149
- def __init__(self, client: SeekrFlowClient) -> None:
150
- self._client = client
151
49
 
50
+ class AsyncModels(ResourceBase):
152
51
  async def list(
153
52
  self,
154
- ) -> List[ModelResponse]:
53
+ ) -> ModelList:
155
54
  """
156
55
  Async method to return list of models on API
157
56
 
158
57
  Returns:
159
- List[ModelResponse]: List of model objects
58
+ ModelList: List of model objects
160
59
  """
161
60
 
162
61
  requestor = api_requestor.APIRequestor(
@@ -174,4 +73,16 @@ class AsyncModels:
174
73
  assert isinstance(response, SeekrFlowResponse)
175
74
  assert isinstance(response.data, list)
176
75
 
177
- return [ModelResponse(**model) for model in response.data]
76
+ model_responses = [
77
+ ModelResponse(
78
+ id=str(model["id"]),
79
+ object=ObjectType.Model,
80
+ name=model["name"],
81
+ bytes=model["size"],
82
+ created_at=parse_timestamp(model["created_at"]),
83
+ model_type=model["model_type"],
84
+ )
85
+ for model in response.data["data"]
86
+ ]
87
+
88
+ return ModelList(data=model_responses)
@@ -1,6 +1,7 @@
1
1
  from seekrai.abstract import api_requestor
2
+ from seekrai.resources.resource_base import ResourceBase
2
3
  from seekrai.seekrflow_response import SeekrFlowResponse
3
- from seekrai.types import SeekrFlowClient, SeekrFlowRequest
4
+ from seekrai.types import SeekrFlowRequest
4
5
  from seekrai.types.projects import (
5
6
  GetProjectsResponse,
6
7
  PostProjectRequest,
@@ -10,10 +11,7 @@ from seekrai.types.projects import (
10
11
  )
11
12
 
12
13
 
13
- class Projects:
14
- def __init__(self, client: SeekrFlowClient) -> None:
15
- self._client = client
16
-
14
+ class Projects(ResourceBase):
17
15
  def list(self, skip: int = 0, limit: int = 100) -> GetProjectsResponse:
18
16
  requestor = api_requestor.APIRequestor(
19
17
  client=self._client,
@@ -70,10 +68,7 @@ class Projects:
70
68
  return ProjectSchema(**response.data)
71
69
 
72
70
 
73
- class AsyncProjects:
74
- def __init__(self, client: SeekrFlowClient) -> None:
75
- self._client = client
76
-
71
+ class AsyncProjects(ResourceBase):
77
72
  async def list(self, skip: int = 0, limit: int = 100) -> GetProjectsResponse:
78
73
  requestor = api_requestor.APIRequestor(
79
74
  client=self._client,
@@ -0,0 +1,10 @@
1
+ from __future__ import annotations
2
+
3
+ from seekrai.types import SeekrFlowClient
4
+
5
+
6
+ class ResourceBase:
7
+ """Base class for resources."""
8
+
9
+ def __init__(self, client: SeekrFlowClient) -> None:
10
+ self._client = client