From feaaac773ed0dead3860c16949f566617c9fe737 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 5 Jun 2024 13:17:19 +0000 Subject: [PATCH] v0.3.56 --- README.md | 10 ++ premai/__init__.py | 3 + premai/api/__init__.py | 10 ++ premai/api/repositories/__init__.py | 0 .../repositories/v1_repositories_create.py | 83 +++++++++++ premai/client.py | 3 + premai/models/__init__.py | 5 + premai/models/model.py | 1 + premai/models/model_type_enum.py | 1 + premai/models/repository.py | 139 ++++++++++++++++++ pyproject.toml | 2 +- 11 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 premai/api/repositories/__init__.py create mode 100644 premai/api/repositories/v1_repositories_create.py create mode 100644 premai/models/repository.py diff --git a/README.md b/README.md index f1aec7c..ef22624 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,16 @@ print(response.document_chunks) ## Repositories Repositories act as storage for documents, organized to facilitate efficient information retrieval. Manipulating repository content is straightforward. +### Repository creation +To create a repository, you can use the `create` method provided by the `repositories` API. Here's an example of how to create a repository: +```python + +response = client.repositories.create( + name="Test", + description="Test Repository", + organization="org-test@premai.io" +) +``` ### Document creation To add a document to a repository, you can use the `create` method provided by the `document` API. Here's an example of how to create and upload a document: diff --git a/premai/__init__.py b/premai/__init__.py index 4630129..56ae778 100644 --- a/premai/__init__.py +++ b/premai/__init__.py @@ -3,6 +3,7 @@ from .api import ( EmbeddingsModule, ModelsModule, + RepositoriesModule, FeedbacksModule, TracesModule, ChatModuleWrapper, @@ -12,6 +13,7 @@ class Prem: embeddings: EmbeddingsModule models: ModelsModule + repositories: RepositoriesModule feedbacks: FeedbacksModule traces: TracesModule chat: ChatModuleWrapper @@ -22,6 +24,7 @@ def __init__(self, api_key: str, base_url='https://app.premai.io'): # Init modules self.embeddings = EmbeddingsModule(client) self.models = ModelsModule(client) + self.repositories = RepositoriesModule(client) self.feedbacks = FeedbacksModule(client) self.traces = TracesModule(client) self.chat = ChatModuleWrapper(client) diff --git a/premai/api/__init__.py b/premai/api/__init__.py index 62d86c8..ed008da 100644 --- a/premai/api/__init__.py +++ b/premai/api/__init__.py @@ -8,12 +8,14 @@ DocumentInputDict, EmbeddingsInputDict, FeedbackCreateDict, + RepositoryDict, ) from .chat_completions.v1_chat_completions_create import v1_chat_completions_create_wrapper from .embeddings.v1_embeddings_create import v1_embeddings_create_wrapper from .feedbacks.v1_set_trace_feedback_create import v1_set_trace_feedback_create_wrapper from .models.v1_models_list import v1_models_list_wrapper from .models.v1_models_retrieve import v1_models_retrieve_wrapper +from .repositories.v1_repositories_create import v1_repositories_create_wrapper from .repository_document.v1_repository_document_create import v1_repository_document_create_wrapper from .traces.v1_traces_list import v1_traces_list_wrapper from .traces.v1_traces_retrieve import v1_traces_retrieve_wrapper @@ -53,6 +55,14 @@ def retrieve( ) +class RepositoriesModule: + def __init__(self, client): + self._client = client + + def create(self, **kwargs: Unpack[RepositoryDict]): + return v1_repositories_create_wrapper(self._client)(**kwargs) + + class RepositoryDocumentModule: def __init__(self, client): self._client = client diff --git a/premai/api/repositories/__init__.py b/premai/api/repositories/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/premai/api/repositories/v1_repositories_create.py b/premai/api/repositories/v1_repositories_create.py new file mode 100644 index 0000000..9432655 --- /dev/null +++ b/premai/api/repositories/v1_repositories_create.py @@ -0,0 +1,83 @@ +from http import HTTPStatus +from typing import Dict, Optional + +import httpx +from typing_extensions import Any, Unpack + +from ... import errors +from ...models.repository import Repository + +# from ...client import AuthenticatedClient, Client +from ...types import Response + + +def _get_kwargs( + **body: Unpack[Repository], +) -> Dict[str, Any]: + headers: Dict[str, Any] = {} + + _kwargs: Dict[str, Any] = { + "method": "post", + "url": "/v1/repositories/", + } + + _json_body = body + + _kwargs["json"] = _json_body + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response(*, client, response: httpx.Response) -> Optional[Repository]: + if response.status_code == HTTPStatus.CREATED: + response_201 = Repository.from_dict(response.json()) + + return response_201 + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client, response: httpx.Response) -> Response[Repository]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def v1_repositories_create_wrapper(client): + def v1_repositories_create_wrapped( + **body: Unpack[Repository], + ) -> Repository: + """ + Args: + body (Repository): + body (Repository): + body (Repository): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Repository] + """ + + kwargs = _get_kwargs( + **body, + ) + + httpx_client = client.get_httpx_client() + + response = httpx_client.request( + **kwargs, + ) + + return _build_response(client=client, response=response).parsed + + return v1_repositories_create_wrapped diff --git a/premai/client.py b/premai/client.py index fb041e6..24ccf73 100644 --- a/premai/client.py +++ b/premai/client.py @@ -12,6 +12,7 @@ EmbeddingsModule, FeedbacksModule, ModelsModule, + RepositoriesModule, RepositoryDocumentModule, TracesModule, ) @@ -248,6 +249,7 @@ class Prem: chat_completions: ChatCompletionsModule embeddings: EmbeddingsModule models: ModelsModule + repositories: RepositoriesModule repository_document: RepositoryDocumentModule feedbacks: FeedbacksModule traces: TracesModule @@ -258,6 +260,7 @@ def __init__(self, api_key: str = "", base_url="https://app.premai.io"): self.chat_completions = ChatCompletionsModule(client) self.embeddings = EmbeddingsModule(client) self.models = ModelsModule(client) + self.repositories = RepositoriesModule(client) self.repository_document = RepositoryDocumentModule(client) self.feedbacks = FeedbacksModule(client) self.traces = TracesModule(client) diff --git a/premai/models/__init__.py b/premai/models/__init__.py index 4c4c3a9..a34ae8c 100644 --- a/premai/models/__init__.py +++ b/premai/models/__init__.py @@ -47,6 +47,7 @@ from .provider_not_found_error_code_enum import ProviderNotFoundErrorCodeEnum from .rate_limit_error import RateLimitError from .rate_limit_error_code_enum import RateLimitErrorCodeEnum +from .repository import Repository, RepositoryDict from .response_choice import ResponseChoice from .status_enum import StatusEnum from .trace_feedback import TraceFeedback @@ -110,6 +111,7 @@ "ProviderNotFoundErrorCodeEnum", "RateLimitError", "RateLimitErrorCodeEnum", + "Repository", "ResponseChoice", "StatusEnum", "TraceFeedback", @@ -130,6 +132,9 @@ "EmbeddingsInputDict", "EmbeddingsInputDict", "EmbeddingsInputDict", + "RepositoryDict", + "RepositoryDict", + "RepositoryDict", "DocumentInputDict", "FeedbackCreateDict", "FeedbackCreateDict", diff --git a/premai/models/model.py b/premai/models/model.py index 790309a..b49944b 100644 --- a/premai/models/model.py +++ b/premai/models/model.py @@ -30,6 +30,7 @@ class Model: model_type (Union[Unset, ModelTypeEnum]): * `text2text` - Text to Text * `text2image` - Text to Image * `text2vector` - Text to Vector + * `autopilot` - Autopilot model_provider (Union[BlankEnum, ModelProviderEnum, None, Unset]): deprecated (Union[Unset, bool]): """ diff --git a/premai/models/model_type_enum.py b/premai/models/model_type_enum.py index 470746e..51161e7 100644 --- a/premai/models/model_type_enum.py +++ b/premai/models/model_type_enum.py @@ -2,6 +2,7 @@ class ModelTypeEnum(str, Enum): + AUTOPILOT = "autopilot" TEXT2IMAGE = "text2image" TEXT2TEXT = "text2text" TEXT2VECTOR = "text2vector" diff --git a/premai/models/repository.py b/premai/models/repository.py new file mode 100644 index 0000000..6204e3a --- /dev/null +++ b/premai/models/repository.py @@ -0,0 +1,139 @@ +from typing import Dict, List, Type, Union, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field +from typing_extensions import Any, NotRequired, TypedDict, TypeVar + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="Repository") + + +class RepositoryDict(TypedDict): + id: int + name: str + organization: str + description: NotRequired[Union[None, Unset, str]] + pass + + +@_attrs_define +class Repository: + """ + Attributes: + id (int): + name (str): + organization (str): + description (Union[None, Unset, str]): + """ + + id: int + name: str + organization: str + description: Union[None, Unset, str] = UNSET + + additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> Dict[str, Any]: + id = self.id + + name = self.name + + organization = self.organization + + description: Union[None, Unset, str] + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + field_dict: Dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "id": id, + "name": name, + "organization": organization, + } + ) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + def to_multipart(self) -> Dict[str, Any]: + id = self.id if isinstance(self.id, Unset) else (None, str(self.id).encode(), "text/plain") + + name = self.name if isinstance(self.name, Unset) else (None, str(self.name).encode(), "text/plain") + + organization = ( + self.organization + if isinstance(self.organization, Unset) + else (None, str(self.organization).encode(), "text/plain") + ) + + description: Union[None, Unset, str] + if isinstance(self.description, Unset): + description = UNSET + else: + description = self.description + + field_dict: Dict[str, Any] = {} + field_dict.update( + {key: (None, str(value).encode(), "text/plain") for key, value in self.additional_properties.items()} + ) + field_dict.update( + { + "id": id, + "name": name, + "organization": organization, + } + ) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + @classmethod + def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: + d = src_dict.copy() if src_dict else {} + id = d.pop("id") + + name = d.pop("name") + + organization = d.pop("organization") + + def _parse_description(data: object) -> Union[None, Unset, str]: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(Union[None, Unset, str], data) + + description = _parse_description(d.pop("description", UNSET)) + + repository = cls( + id=id, + name=name, + organization=organization, + description=description, + ) + + repository.additional_properties = d + return repository + + @property + def additional_keys(self) -> List[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/pyproject.toml b/pyproject.toml index 2420ce7..708c412 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "premai" -version = "0.3.55" +version = "0.3.56" description = "A client library for accessing Prem APIs" authors = [] readme = "README.md"