mixpeek 0.15.2__py3-none-any.whl → 0.16.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 (84) hide show
  1. mixpeek/_hooks/__init__.py +0 -1
  2. mixpeek/_hooks/sdkhooks.py +0 -2
  3. mixpeek/_version.py +1 -1
  4. mixpeek/assets.py +74 -56
  5. mixpeek/collections.py +46 -40
  6. mixpeek/{featureextractors.py → feature_extractors.py} +6 -6
  7. mixpeek/feature_search.py +330 -0
  8. mixpeek/features.py +44 -356
  9. mixpeek/health.py +3 -15
  10. mixpeek/{ingest.py → ingest_assets.py} +43 -25
  11. mixpeek/models/__init__.py +291 -160
  12. mixpeek/models/assignmentconfig.py +25 -0
  13. mixpeek/models/availablemodels.py +2 -1
  14. mixpeek/models/{availableindexesresponse.py → availablemodelsresponse.py} +8 -4
  15. mixpeek/models/classificationmatch.py +72 -0
  16. mixpeek/models/classificationwithfeature.py +73 -0
  17. mixpeek/models/classify_features_v1_entities_taxonomies_taxonomy_classify_postop.py +73 -0
  18. mixpeek/models/{create_api_key_organizations_users_user_email_api_keys_postop.py → create_api_key_v1_organizations_users_user_email_api_keys_postop.py} +2 -2
  19. mixpeek/models/{create_collection_collections_postop.py → create_collection_v1_collections_postop.py} +2 -2
  20. mixpeek/models/create_taxonomy_v1_entities_taxonomies_postop.py +59 -0
  21. mixpeek/models/createnamespacerequest.py +2 -2
  22. mixpeek/models/{delete_api_key_organizations_users_user_email_api_keys_key_name_deleteop.py → delete_api_key_v1_organizations_users_user_email_api_keys_key_name_deleteop.py} +2 -2
  23. mixpeek/models/{delete_asset_assets_asset_id_deleteop.py → delete_asset_v1_assets_asset_id_deleteop.py} +2 -2
  24. mixpeek/models/delete_classifications_v1_entities_taxonomies_taxonomy_classifications_classification_id_deleteop.py +70 -0
  25. mixpeek/models/{delete_collection_collections_collection_deleteop.py → delete_collection_v1_collections_collection_deleteop.py} +2 -2
  26. mixpeek/models/{delete_feature_features_feature_id_deleteop.py → delete_feature_v1_features_feature_id_deleteop.py} +2 -2
  27. mixpeek/models/{delete_namespace_namespaces_namespace_deleteop.py → delete_namespace_v1_namespaces_namespace_deleteop.py} +2 -2
  28. mixpeek/models/delete_taxonomy_v1_entities_taxonomies_taxonomy_deleteop.py +59 -0
  29. mixpeek/models/{delete_user_organizations_users_user_email_deleteop.py → delete_user_v1_organizations_users_user_email_deleteop.py} +2 -2
  30. mixpeek/models/discoverrequest.py +74 -0
  31. mixpeek/models/embeddingconfig.py +33 -0
  32. mixpeek/models/embeddingrequest.py +40 -7
  33. mixpeek/models/featureoptions.py +25 -0
  34. mixpeek/models/{full_asset_update_assets_asset_id_putop.py → full_asset_update_v1_assets_asset_id_putop.py} +2 -2
  35. mixpeek/models/{full_feature_update_features_feature_id_putop.py → full_feature_update_v1_features_feature_id_putop.py} +2 -2
  36. mixpeek/models/genericsuccessresponse.py +17 -0
  37. mixpeek/models/{get_asset_assets_asset_id_getop.py → get_asset_v1_assets_asset_id_getop.py} +2 -2
  38. mixpeek/models/{get_asset_with_features_assets_asset_id_features_getop.py → get_asset_with_features_v1_assets_asset_id_features_getop.py} +2 -2
  39. mixpeek/models/{get_collection_collections_collection_getop.py → get_collection_v1_collections_collection_getop.py} +2 -2
  40. mixpeek/models/{get_feature_features_feature_id_getop.py → get_feature_v1_features_feature_id_getop.py} +2 -2
  41. mixpeek/models/{get_namespace_namespaces_namespace_getop.py → get_namespace_v1_namespaces_namespace_getop.py} +2 -2
  42. mixpeek/models/{get_task_tasks_task_id_getop.py → get_task_v1_tasks_task_id_getop.py} +2 -2
  43. mixpeek/models/get_taxonomy_node_v1_entities_taxonomies_nodes_node_getop.py +59 -0
  44. mixpeek/models/get_taxonomy_v1_entities_taxonomies_taxonomy_getop.py +59 -0
  45. mixpeek/models/{get_user_organizations_users_user_email_getop.py → get_user_v1_organizations_users_user_email_getop.py} +2 -2
  46. mixpeek/models/{ingest_image_url_ingest_images_url_postop.py → ingest_image_url_v1_ingest_images_url_postop.py} +2 -2
  47. mixpeek/models/{ingest_text_ingest_text_postop.py → ingest_text_v1_ingest_text_postop.py} +2 -2
  48. mixpeek/models/{ingest_video_url_ingest_videos_url_postop.py → ingest_video_url_v1_ingest_videos_url_postop.py} +2 -2
  49. mixpeek/models/{kill_task_tasks_task_id_deleteop.py → kill_task_v1_tasks_task_id_deleteop.py} +2 -2
  50. mixpeek/models/{list_assets_assets_postop.py → list_assets_v1_assets_postop.py} +2 -2
  51. mixpeek/models/list_classifications_v1_entities_taxonomies_taxonomy_classifications_postop.py +92 -0
  52. mixpeek/models/{list_collections_collections_getop.py → list_collections_v1_collections_getop.py} +2 -2
  53. mixpeek/models/{list_features_features_postop.py → list_features_v1_features_postop.py} +2 -2
  54. mixpeek/models/list_taxonomies_v1_entities_taxonomies_getop.py +67 -0
  55. mixpeek/models/listclassificationsrequest.py +69 -0
  56. mixpeek/models/listclassificationsresponse.py +31 -0
  57. mixpeek/models/listtaxonomiesresponse.py +24 -0
  58. mixpeek/models/modeldetails.py +9 -5
  59. mixpeek/models/nodeoptions.py +16 -0
  60. mixpeek/models/nodeupdate.py +51 -0
  61. mixpeek/models/{partial_asset_update_assets_asset_id_patchop.py → partial_asset_update_v1_assets_asset_id_patchop.py} +2 -2
  62. mixpeek/models/permission.py +12 -0
  63. mixpeek/models/{search_assets_assets_search_postop.py → search_assets_v1_assets_search_postop.py} +2 -2
  64. mixpeek/models/{search_features_features_search_postop.py → search_features_v1_features_search_postop.py} +4 -4
  65. mixpeek/models/taxonomycreate.py +20 -0
  66. mixpeek/models/taxonomymodel.py +27 -0
  67. mixpeek/models/taxonomynode.py +101 -0
  68. mixpeek/models/taxonomynodecreate.py +63 -0
  69. mixpeek/models/taxonomyupdate.py +55 -0
  70. mixpeek/models/{update_api_key_organizations_users_user_email_api_keys_key_name_patchop.py → update_api_key_v1_organizations_users_user_email_api_keys_key_name_patchop.py} +2 -2
  71. mixpeek/models/{update_collection_collections_collection_putop.py → update_collection_v1_collections_collection_putop.py} +2 -2
  72. mixpeek/models/{update_namespace_namespaces_namespace_putop.py → update_namespace_v1_namespaces_namespace_putop.py} +2 -2
  73. mixpeek/models/update_node_v1_entities_taxonomies_nodes_node_patchop.py +71 -0
  74. mixpeek/models/update_taxonomy_v1_entities_taxonomies_taxonomy_patchop.py +71 -0
  75. mixpeek/models/vectormodel.py +1 -0
  76. mixpeek/namespaces.py +52 -52
  77. mixpeek/organizations.py +82 -58
  78. mixpeek/sdk.py +12 -6
  79. mixpeek/sdkconfiguration.py +4 -4
  80. mixpeek/tasks.py +22 -16
  81. mixpeek/taxonomy_entities.py +2214 -0
  82. {mixpeek-0.15.2.dist-info → mixpeek-0.16.0.dist-info}/METADATA +64 -49
  83. {mixpeek-0.15.2.dist-info → mixpeek-0.16.0.dist-info}/RECORD +84 -55
  84. {mixpeek-0.15.2.dist-info → mixpeek-0.16.0.dist-info}/WHEEL +1 -1
@@ -0,0 +1,25 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mixpeek.types import BaseModel
5
+ from typing import Optional
6
+ from typing_extensions import NotRequired, TypedDict
7
+
8
+
9
+ class AssignmentConfigTypedDict(TypedDict):
10
+ r"""Configuration for how classifications should be assigned to features"""
11
+
12
+ enabled: NotRequired[bool]
13
+ r"""Whether to assign the taxonomy to the feature"""
14
+ append: NotRequired[bool]
15
+ r"""Whether to append the classification to the feature, if false, replaces any existing classification"""
16
+
17
+
18
+ class AssignmentConfig(BaseModel):
19
+ r"""Configuration for how classifications should be assigned to features"""
20
+
21
+ enabled: Optional[bool] = False
22
+ r"""Whether to assign the taxonomy to the feature"""
23
+
24
+ append: Optional[bool] = False
25
+ r"""Whether to append the classification to the feature, if false, replaces any existing classification"""
@@ -11,6 +11,7 @@ class AvailableModels(str, Enum):
11
11
  VIDEO = "video"
12
12
  KEYWORD = "keyword"
13
13
  NAVER_SPLADE_V3 = "naver-splade-v3"
14
- GOOGLE_VERTEX_MULTIMODAL_EMBEDDINGS = "google-vertex-multimodal-embeddings"
14
+ VERTEX_MULTIMODAL = "vertex-multimodal"
15
15
  OPENAI_CLIP_VIT_BASE_PATCH32 = "openai-clip-vit-base-patch32"
16
16
  BAAI_BGE_M3 = "baai-bge-m3"
17
+ ANSWERAI_MODERNBERT_BASE = "answerai-modernbert-base"
@@ -8,16 +8,20 @@ from typing import Dict, List
8
8
  from typing_extensions import TypedDict
9
9
 
10
10
 
11
- class AvailableIndexesResponseTypedDict(TypedDict):
12
- r"""Response schema for available indexes endpoint"""
11
+ class AvailableModelsResponseTypedDict(TypedDict):
12
+ r"""Response schema for available models endpoint"""
13
13
 
14
14
  embedding_models: Dict[str, ModelDetailsTypedDict]
15
+ r"""Dictionary mapping model names to their detailed specifications"""
15
16
  payload_indexes: List[PayloadIndexTypeTypedDict]
17
+ r"""List of available payload index types that can be used for filtering"""
16
18
 
17
19
 
18
- class AvailableIndexesResponse(BaseModel):
19
- r"""Response schema for available indexes endpoint"""
20
+ class AvailableModelsResponse(BaseModel):
21
+ r"""Response schema for available models endpoint"""
20
22
 
21
23
  embedding_models: Dict[str, ModelDetails]
24
+ r"""Dictionary mapping model names to their detailed specifications"""
22
25
 
23
26
  payload_indexes: List[PayloadIndexType]
27
+ r"""List of available payload index types that can be used for filtering"""
@@ -0,0 +1,72 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .taxonomynode import TaxonomyNode, TaxonomyNodeTypedDict
5
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
+ from pydantic import model_serializer
7
+ from typing import List
8
+ from typing_extensions import NotRequired, TypedDict
9
+
10
+
11
+ class ClassificationMatchTypedDict(TypedDict):
12
+ r"""Individual node match with score"""
13
+
14
+ node_id: str
15
+ r"""ID of the matched taxonomy node"""
16
+ score: float
17
+ r"""Confidence score of the match"""
18
+ depth: int
19
+ r"""Depth of the node in the taxonomy"""
20
+ order: List[int]
21
+ r"""Order of the node in the taxonomy"""
22
+ node: NotRequired[Nullable[TaxonomyNodeTypedDict]]
23
+ r"""Full node object if requested"""
24
+
25
+
26
+ class ClassificationMatch(BaseModel):
27
+ r"""Individual node match with score"""
28
+
29
+ node_id: str
30
+ r"""ID of the matched taxonomy node"""
31
+
32
+ score: float
33
+ r"""Confidence score of the match"""
34
+
35
+ depth: int
36
+ r"""Depth of the node in the taxonomy"""
37
+
38
+ order: List[int]
39
+ r"""Order of the node in the taxonomy"""
40
+
41
+ node: OptionalNullable[TaxonomyNode] = UNSET
42
+ r"""Full node object if requested"""
43
+
44
+ @model_serializer(mode="wrap")
45
+ def serialize_model(self, handler):
46
+ optional_fields = ["node"]
47
+ nullable_fields = ["node"]
48
+ null_default_fields = []
49
+
50
+ serialized = handler(self)
51
+
52
+ m = {}
53
+
54
+ for n, f in self.model_fields.items():
55
+ k = f.alias or n
56
+ val = serialized.get(k)
57
+ serialized.pop(k, None)
58
+
59
+ optional_nullable = k in optional_fields and k in nullable_fields
60
+ is_set = (
61
+ self.__pydantic_fields_set__.intersection({n})
62
+ or k in null_default_fields
63
+ ) # pylint: disable=no-member
64
+
65
+ if val is not None and val != UNSET_SENTINEL:
66
+ m[k] = val
67
+ elif val != UNSET_SENTINEL and (
68
+ not k in optional_fields or (optional_nullable and is_set)
69
+ ):
70
+ m[k] = val
71
+
72
+ return m
@@ -0,0 +1,73 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .classificationmatch import ClassificationMatch, ClassificationMatchTypedDict
5
+ from .featureresponse import FeatureResponse, FeatureResponseTypedDict
6
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
7
+ from pydantic import model_serializer
8
+ from typing import List
9
+ from typing_extensions import NotRequired, TypedDict
10
+
11
+
12
+ class ClassificationWithFeatureTypedDict(TypedDict):
13
+ r"""Classification entry with optional full feature and node data"""
14
+
15
+ feature_id: str
16
+ r"""ID of the classified feature"""
17
+ classification_id: str
18
+ r"""ID of the classification run"""
19
+ taxonomy_id: str
20
+ r"""ID of the taxonomy used"""
21
+ matches: List[ClassificationMatchTypedDict]
22
+ r"""List of node matches with scores"""
23
+ feature: NotRequired[Nullable[FeatureResponseTypedDict]]
24
+ r"""Full feature object if requested"""
25
+
26
+
27
+ class ClassificationWithFeature(BaseModel):
28
+ r"""Classification entry with optional full feature and node data"""
29
+
30
+ feature_id: str
31
+ r"""ID of the classified feature"""
32
+
33
+ classification_id: str
34
+ r"""ID of the classification run"""
35
+
36
+ taxonomy_id: str
37
+ r"""ID of the taxonomy used"""
38
+
39
+ matches: List[ClassificationMatch]
40
+ r"""List of node matches with scores"""
41
+
42
+ feature: OptionalNullable[FeatureResponse] = UNSET
43
+ r"""Full feature object if requested"""
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = ["feature"]
48
+ nullable_fields = ["feature"]
49
+ null_default_fields = []
50
+
51
+ serialized = handler(self)
52
+
53
+ m = {}
54
+
55
+ for n, f in self.model_fields.items():
56
+ k = f.alias or n
57
+ val = serialized.get(k)
58
+ serialized.pop(k, None)
59
+
60
+ optional_nullable = k in optional_fields and k in nullable_fields
61
+ is_set = (
62
+ self.__pydantic_fields_set__.intersection({n})
63
+ or k in null_default_fields
64
+ ) # pylint: disable=no-member
65
+
66
+ if val is not None and val != UNSET_SENTINEL:
67
+ m[k] = val
68
+ elif val != UNSET_SENTINEL and (
69
+ not k in optional_fields or (optional_nullable and is_set)
70
+ ):
71
+ m[k] = val
72
+
73
+ return m
@@ -0,0 +1,73 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .discoverrequest import DiscoverRequest, DiscoverRequestTypedDict
5
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
+ from mixpeek.utils import (
7
+ FieldMetadata,
8
+ HeaderMetadata,
9
+ PathParamMetadata,
10
+ RequestMetadata,
11
+ )
12
+ import pydantic
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
15
+
16
+
17
+ class ClassifyFeaturesV1EntitiesTaxonomiesTaxonomyClassifyPostRequestTypedDict(
18
+ TypedDict
19
+ ):
20
+ taxonomy: str
21
+ r"""The name or id of the taxonomy to use for discovery"""
22
+ discover_request: DiscoverRequestTypedDict
23
+ x_namespace: NotRequired[Nullable[str]]
24
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
25
+
26
+
27
+ class ClassifyFeaturesV1EntitiesTaxonomiesTaxonomyClassifyPostRequest(BaseModel):
28
+ taxonomy: Annotated[
29
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
30
+ ]
31
+ r"""The name or id of the taxonomy to use for discovery"""
32
+
33
+ discover_request: Annotated[
34
+ DiscoverRequest,
35
+ FieldMetadata(request=RequestMetadata(media_type="application/json")),
36
+ ]
37
+
38
+ x_namespace: Annotated[
39
+ OptionalNullable[str],
40
+ pydantic.Field(alias="X-Namespace"),
41
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
42
+ ] = UNSET
43
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = ["X-Namespace"]
48
+ nullable_fields = ["X-Namespace"]
49
+ null_default_fields = []
50
+
51
+ serialized = handler(self)
52
+
53
+ m = {}
54
+
55
+ for n, f in self.model_fields.items():
56
+ k = f.alias or n
57
+ val = serialized.get(k)
58
+ serialized.pop(k, None)
59
+
60
+ optional_nullable = k in optional_fields and k in nullable_fields
61
+ is_set = (
62
+ self.__pydantic_fields_set__.intersection({n})
63
+ or k in null_default_fields
64
+ ) # pylint: disable=no-member
65
+
66
+ if val is not None and val != UNSET_SENTINEL:
67
+ m[k] = val
68
+ elif val != UNSET_SENTINEL and (
69
+ not k in optional_fields or (optional_nullable and is_set)
70
+ ):
71
+ m[k] = val
72
+
73
+ return m
@@ -7,12 +7,12 @@ from typing import Optional
7
7
  from typing_extensions import Annotated, NotRequired, TypedDict
8
8
 
9
9
 
10
- class CreateAPIKeyOrganizationsUsersUserEmailAPIKeysPostRequestTypedDict(TypedDict):
10
+ class CreateAPIKeyV1OrganizationsUsersUserEmailAPIKeysPostRequestTypedDict(TypedDict):
11
11
  user_email: str
12
12
  key_name: NotRequired[str]
13
13
 
14
14
 
15
- class CreateAPIKeyOrganizationsUsersUserEmailAPIKeysPostRequest(BaseModel):
15
+ class CreateAPIKeyV1OrganizationsUsersUserEmailAPIKeysPostRequest(BaseModel):
16
16
  user_email: Annotated[
17
17
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
18
18
  ]
@@ -12,13 +12,13 @@ from pydantic import model_serializer
12
12
  from typing_extensions import Annotated, NotRequired, TypedDict
13
13
 
14
14
 
15
- class CreateCollectionCollectionsPostRequestTypedDict(TypedDict):
15
+ class CreateCollectionV1CollectionsPostRequestTypedDict(TypedDict):
16
16
  create_collection_request: CreateCollectionRequestTypedDict
17
17
  x_namespace: NotRequired[Nullable[str]]
18
18
  r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
19
19
 
20
20
 
21
- class CreateCollectionCollectionsPostRequest(BaseModel):
21
+ class CreateCollectionV1CollectionsPostRequest(BaseModel):
22
22
  create_collection_request: Annotated[
23
23
  CreateCollectionRequest,
24
24
  FieldMetadata(request=RequestMetadata(media_type="application/json")),
@@ -0,0 +1,59 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .taxonomycreate import TaxonomyCreate, TaxonomyCreateTypedDict
5
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
6
+ from mixpeek.utils import FieldMetadata, HeaderMetadata, RequestMetadata
7
+ import pydantic
8
+ from pydantic import model_serializer
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class CreateTaxonomyV1EntitiesTaxonomiesPostRequestTypedDict(TypedDict):
13
+ taxonomy_create: TaxonomyCreateTypedDict
14
+ x_namespace: NotRequired[Nullable[str]]
15
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
16
+
17
+
18
+ class CreateTaxonomyV1EntitiesTaxonomiesPostRequest(BaseModel):
19
+ taxonomy_create: Annotated[
20
+ TaxonomyCreate,
21
+ FieldMetadata(request=RequestMetadata(media_type="application/json")),
22
+ ]
23
+
24
+ x_namespace: Annotated[
25
+ OptionalNullable[str],
26
+ pydantic.Field(alias="X-Namespace"),
27
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
28
+ ] = UNSET
29
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
30
+
31
+ @model_serializer(mode="wrap")
32
+ def serialize_model(self, handler):
33
+ optional_fields = ["X-Namespace"]
34
+ nullable_fields = ["X-Namespace"]
35
+ null_default_fields = []
36
+
37
+ serialized = handler(self)
38
+
39
+ m = {}
40
+
41
+ for n, f in self.model_fields.items():
42
+ k = f.alias or n
43
+ val = serialized.get(k)
44
+ serialized.pop(k, None)
45
+
46
+ optional_nullable = k in optional_fields and k in nullable_fields
47
+ is_set = (
48
+ self.__pydantic_fields_set__.intersection({n})
49
+ or k in null_default_fields
50
+ ) # pylint: disable=no-member
51
+
52
+ if val is not None and val != UNSET_SENTINEL:
53
+ m[k] = val
54
+ elif val != UNSET_SENTINEL and (
55
+ not k in optional_fields or (optional_nullable and is_set)
56
+ ):
57
+ m[k] = val
58
+
59
+ return m
@@ -14,7 +14,7 @@ class CreateNamespaceRequestTypedDict(TypedDict):
14
14
  namespace_name: str
15
15
  r"""Name of the namespace to create"""
16
16
  embedding_models: List[str]
17
- r"""List of vector indexes to be used within this namespace. Must be one of: 'image', 'openai-clip-vit-base-patch32', 'multimodal', 'vertex-multimodal', 'text', 'baai-bge-m3', 'keyword', 'naver-splade-v3'"""
17
+ r"""List of vector indexes to be used within this namespace. Must be one of: 'image', 'openai-clip-vit-base-patch32', 'multimodal', 'vertex-multimodal', 'text', 'baai-bge-m3', 'keyword', 'naver-splade-v3', 'answerai-modern-bert'"""
18
18
  payload_indexes: NotRequired[Nullable[List[PayloadIndexConfigTypedDict]]]
19
19
  r"""List of payload index configurations"""
20
20
 
@@ -26,7 +26,7 @@ class CreateNamespaceRequest(BaseModel):
26
26
  r"""Name of the namespace to create"""
27
27
 
28
28
  embedding_models: List[str]
29
- r"""List of vector indexes to be used within this namespace. Must be one of: 'image', 'openai-clip-vit-base-patch32', 'multimodal', 'vertex-multimodal', 'text', 'baai-bge-m3', 'keyword', 'naver-splade-v3'"""
29
+ r"""List of vector indexes to be used within this namespace. Must be one of: 'image', 'openai-clip-vit-base-patch32', 'multimodal', 'vertex-multimodal', 'text', 'baai-bge-m3', 'keyword', 'naver-splade-v3', 'answerai-modern-bert'"""
30
30
 
31
31
  payload_indexes: OptionalNullable[List[PayloadIndexConfig]] = UNSET
32
32
  r"""List of payload index configurations"""
@@ -6,14 +6,14 @@ from mixpeek.utils import FieldMetadata, PathParamMetadata
6
6
  from typing_extensions import Annotated, TypedDict
7
7
 
8
8
 
9
- class DeleteAPIKeyOrganizationsUsersUserEmailAPIKeysKeyNameDeleteRequestTypedDict(
9
+ class DeleteAPIKeyV1OrganizationsUsersUserEmailAPIKeysKeyNameDeleteRequestTypedDict(
10
10
  TypedDict
11
11
  ):
12
12
  user_email: str
13
13
  key_name: str
14
14
 
15
15
 
16
- class DeleteAPIKeyOrganizationsUsersUserEmailAPIKeysKeyNameDeleteRequest(BaseModel):
16
+ class DeleteAPIKeyV1OrganizationsUsersUserEmailAPIKeysKeyNameDeleteRequest(BaseModel):
17
17
  user_email: Annotated[
18
18
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
19
19
  ]
@@ -8,13 +8,13 @@ from pydantic import model_serializer
8
8
  from typing_extensions import Annotated, NotRequired, TypedDict
9
9
 
10
10
 
11
- class DeleteAssetAssetsAssetIDDeleteRequestTypedDict(TypedDict):
11
+ class DeleteAssetV1AssetsAssetIDDeleteRequestTypedDict(TypedDict):
12
12
  asset_id: str
13
13
  x_namespace: NotRequired[Nullable[str]]
14
14
  r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
15
15
 
16
16
 
17
- class DeleteAssetAssetsAssetIDDeleteRequest(BaseModel):
17
+ class DeleteAssetV1AssetsAssetIDDeleteRequest(BaseModel):
18
18
  asset_id: Annotated[
19
19
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
20
20
  ]
@@ -0,0 +1,70 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
5
+ from mixpeek.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
+
10
+
11
+ class DeleteClassificationsV1EntitiesTaxonomiesTaxonomyClassificationsClassificationIDDeleteRequestTypedDict(
12
+ TypedDict
13
+ ):
14
+ taxonomy: str
15
+ r"""The id or name of the taxonomy"""
16
+ classification_id: str
17
+ r"""The id of the classification to delete"""
18
+ x_namespace: NotRequired[Nullable[str]]
19
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
20
+
21
+
22
+ class DeleteClassificationsV1EntitiesTaxonomiesTaxonomyClassificationsClassificationIDDeleteRequest(
23
+ BaseModel
24
+ ):
25
+ taxonomy: Annotated[
26
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
27
+ ]
28
+ r"""The id or name of the taxonomy"""
29
+
30
+ classification_id: Annotated[
31
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
32
+ ]
33
+ r"""The id of the classification to delete"""
34
+
35
+ x_namespace: Annotated[
36
+ OptionalNullable[str],
37
+ pydantic.Field(alias="X-Namespace"),
38
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
39
+ ] = UNSET
40
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
41
+
42
+ @model_serializer(mode="wrap")
43
+ def serialize_model(self, handler):
44
+ optional_fields = ["X-Namespace"]
45
+ nullable_fields = ["X-Namespace"]
46
+ null_default_fields = []
47
+
48
+ serialized = handler(self)
49
+
50
+ m = {}
51
+
52
+ for n, f in self.model_fields.items():
53
+ k = f.alias or n
54
+ val = serialized.get(k)
55
+ serialized.pop(k, None)
56
+
57
+ optional_nullable = k in optional_fields and k in nullable_fields
58
+ is_set = (
59
+ self.__pydantic_fields_set__.intersection({n})
60
+ or k in null_default_fields
61
+ ) # pylint: disable=no-member
62
+
63
+ if val is not None and val != UNSET_SENTINEL:
64
+ m[k] = val
65
+ elif val != UNSET_SENTINEL and (
66
+ not k in optional_fields or (optional_nullable and is_set)
67
+ ):
68
+ m[k] = val
69
+
70
+ return m
@@ -8,14 +8,14 @@ from pydantic import model_serializer
8
8
  from typing_extensions import Annotated, NotRequired, TypedDict
9
9
 
10
10
 
11
- class DeleteCollectionCollectionsCollectionDeleteRequestTypedDict(TypedDict):
11
+ class DeleteCollectionV1CollectionsCollectionDeleteRequestTypedDict(TypedDict):
12
12
  collection: str
13
13
  r"""Either the collection name or collection ID"""
14
14
  x_namespace: NotRequired[Nullable[str]]
15
15
  r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
16
16
 
17
17
 
18
- class DeleteCollectionCollectionsCollectionDeleteRequest(BaseModel):
18
+ class DeleteCollectionV1CollectionsCollectionDeleteRequest(BaseModel):
19
19
  collection: Annotated[
20
20
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
21
21
  ]
@@ -8,13 +8,13 @@ from pydantic import model_serializer
8
8
  from typing_extensions import Annotated, NotRequired, TypedDict
9
9
 
10
10
 
11
- class DeleteFeatureFeaturesFeatureIDDeleteRequestTypedDict(TypedDict):
11
+ class DeleteFeatureV1FeaturesFeatureIDDeleteRequestTypedDict(TypedDict):
12
12
  feature_id: str
13
13
  x_namespace: NotRequired[Nullable[str]]
14
14
  r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
15
15
 
16
16
 
17
- class DeleteFeatureFeaturesFeatureIDDeleteRequest(BaseModel):
17
+ class DeleteFeatureV1FeaturesFeatureIDDeleteRequest(BaseModel):
18
18
  feature_id: Annotated[
19
19
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
20
20
  ]
@@ -6,12 +6,12 @@ from mixpeek.utils import FieldMetadata, PathParamMetadata
6
6
  from typing_extensions import Annotated, TypedDict
7
7
 
8
8
 
9
- class DeleteNamespaceNamespacesNamespaceDeleteRequestTypedDict(TypedDict):
9
+ class DeleteNamespaceV1NamespacesNamespaceDeleteRequestTypedDict(TypedDict):
10
10
  namespace: str
11
11
  r"""Either the namespace name or namespace ID"""
12
12
 
13
13
 
14
- class DeleteNamespaceNamespacesNamespaceDeleteRequest(BaseModel):
14
+ class DeleteNamespaceV1NamespacesNamespaceDeleteRequest(BaseModel):
15
15
  namespace: Annotated[
16
16
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
17
17
  ]
@@ -0,0 +1,59 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from mixpeek.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
5
+ from mixpeek.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
6
+ import pydantic
7
+ from pydantic import model_serializer
8
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
+
10
+
11
+ class DeleteTaxonomyV1EntitiesTaxonomiesTaxonomyDeleteRequestTypedDict(TypedDict):
12
+ taxonomy: str
13
+ r"""The ID or name of the taxonomy to delete"""
14
+ x_namespace: NotRequired[Nullable[str]]
15
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
16
+
17
+
18
+ class DeleteTaxonomyV1EntitiesTaxonomiesTaxonomyDeleteRequest(BaseModel):
19
+ taxonomy: Annotated[
20
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
21
+ ]
22
+ r"""The ID or name of the taxonomy to delete"""
23
+
24
+ x_namespace: Annotated[
25
+ OptionalNullable[str],
26
+ pydantic.Field(alias="X-Namespace"),
27
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
28
+ ] = UNSET
29
+ r"""Optional namespace for data isolation. This can be a namespace name or namespace ID. Example: 'netflix_prod' or 'ns_1234567890'. To create a namespace, use the /namespaces endpoint."""
30
+
31
+ @model_serializer(mode="wrap")
32
+ def serialize_model(self, handler):
33
+ optional_fields = ["X-Namespace"]
34
+ nullable_fields = ["X-Namespace"]
35
+ null_default_fields = []
36
+
37
+ serialized = handler(self)
38
+
39
+ m = {}
40
+
41
+ for n, f in self.model_fields.items():
42
+ k = f.alias or n
43
+ val = serialized.get(k)
44
+ serialized.pop(k, None)
45
+
46
+ optional_nullable = k in optional_fields and k in nullable_fields
47
+ is_set = (
48
+ self.__pydantic_fields_set__.intersection({n})
49
+ or k in null_default_fields
50
+ ) # pylint: disable=no-member
51
+
52
+ if val is not None and val != UNSET_SENTINEL:
53
+ m[k] = val
54
+ elif val != UNSET_SENTINEL and (
55
+ not k in optional_fields or (optional_nullable and is_set)
56
+ ):
57
+ m[k] = val
58
+
59
+ return m
@@ -6,11 +6,11 @@ from mixpeek.utils import FieldMetadata, PathParamMetadata
6
6
  from typing_extensions import Annotated, TypedDict
7
7
 
8
8
 
9
- class DeleteUserOrganizationsUsersUserEmailDeleteRequestTypedDict(TypedDict):
9
+ class DeleteUserV1OrganizationsUsersUserEmailDeleteRequestTypedDict(TypedDict):
10
10
  user_email: str
11
11
 
12
12
 
13
- class DeleteUserOrganizationsUsersUserEmailDeleteRequest(BaseModel):
13
+ class DeleteUserV1OrganizationsUsersUserEmailDeleteRequest(BaseModel):
14
14
  user_email: Annotated[
15
15
  str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
16
16
  ]