enkryptai-sdk 1.0.12__tar.gz → 1.0.14__tar.gz

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 (45) hide show
  1. {enkryptai_sdk-1.0.12/src/enkryptai_sdk.egg-info → enkryptai_sdk-1.0.14}/PKG-INFO +11 -12
  2. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/README.md +10 -11
  3. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/setup.py +1 -1
  4. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/models.py +2 -0
  5. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/red_team.py +1 -0
  6. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/models.py +2 -0
  7. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14/src/enkryptai_sdk.egg-info}/PKG-INFO +11 -12
  8. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_all_v2.py +9 -4
  9. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/LICENSE +0 -0
  10. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/setup.cfg +0 -0
  11. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/__init__.py +0 -0
  12. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/ai_proxy.py +0 -0
  13. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/base.py +0 -0
  14. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/coc.py +0 -0
  15. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/config.py +0 -0
  16. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/datasets.py +0 -0
  17. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/deployments.py +0 -0
  18. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/__init__.py +0 -0
  19. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/ai_proxy.py +0 -0
  20. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/base.py +0 -0
  21. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/coc.py +0 -0
  22. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/datasets.py +0 -0
  23. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/deployments.py +0 -0
  24. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/dto/guardrails.py +0 -0
  25. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/evals.py +0 -0
  26. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/guardrails.py +0 -0
  27. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/guardrails_old.py +0 -0
  28. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/red_team.py +0 -0
  29. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk/response.py +0 -0
  30. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk.egg-info/SOURCES.txt +0 -0
  31. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk.egg-info/dependency_links.txt +0 -0
  32. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/src/enkryptai_sdk.egg-info/top_level.txt +0 -0
  33. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_ai_proxy.py +0 -0
  34. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_all.py +0 -0
  35. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_basic.py +0 -0
  36. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_coc.py +0 -0
  37. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_datasets.py +0 -0
  38. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_deployments.py +0 -0
  39. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_detect_policy.py +0 -0
  40. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_guardrails.py +0 -0
  41. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_injection_attack.py +0 -0
  42. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_model.py +0 -0
  43. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_openai.py +0 -0
  44. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_policy_violation.py +0 -0
  45. {enkryptai_sdk-1.0.12 → enkryptai_sdk-1.0.14}/tests/test_redteam.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: enkryptai-sdk
3
- Version: 1.0.12
3
+ Version: 1.0.14
4
4
  Summary: A Python SDK with guardrails and red teaming functionality for API interactions
5
5
  Home-page: https://github.com/enkryptai/enkryptai-sdk
6
6
  Author: Enkrypt AI Team
@@ -271,14 +271,7 @@ sample_detectors = {
271
271
  },
272
272
  "bias": {
273
273
  "enabled": False
274
- },
275
- "copyright_ip": {
276
- "enabled": False
277
- },
278
- "system_prompt": {
279
- "enabled": False,
280
- "index": "system"
281
- },
274
+ }
282
275
  }
283
276
  ```
284
277
 
@@ -701,8 +694,8 @@ print(batch_detect_response.to_dict())
701
694
  - `nsfw`: Filter inappropriate content
702
695
  - `toxicity`: Detect toxic language
703
696
  - `pii`: Detect personal information
704
- - `copyright_ip`: Check for copyright/IP violations
705
- - `system_prompt`: Detect system prompt leaks
697
+ - `copyright_ip`: Check for copyright/IP violations *(Coming soon)*
698
+ - `system_prompt`: Detect system prompt leaks *(Coming soon)*
706
699
  - `keyword_detector`: Check for specific keywords
707
700
 
708
701
  Each detector can be enabled/disabled and configured with specific options as documented in the [API docs](https://docs.enkryptai.com/guardrails-api-reference/introduction).
@@ -764,12 +757,16 @@ guardrails_config = GuardrailsConfig.keyword(keywords=["secret", "password"])
764
757
 
765
758
  ### [Copyright IP](https://docs.enkryptai.com/guardrails-api-reference/Copyright_IP_Leak_Detector)
766
759
 
760
+ *(Coming soon)*
761
+
767
762
  ```python Python
768
763
  guardrails_config = GuardrailsConfig.copyright_ip()
769
764
  ```
770
765
 
771
766
  ### [System Prompt](https://docs.enkryptai.com/guardrails-api-reference/System_Prompt_Leak_Detector)
772
767
 
768
+ *(Coming soon)*
769
+
773
770
  ```python Python
774
771
  guardrails_config = GuardrailsConfig.system_prompt(index="system")
775
772
  ```
@@ -972,6 +969,8 @@ print(relevancy_response.to_dict())
972
969
 
973
970
  ### [Check Hallucination](https://docs.enkryptai.com/guardrails-api-reference/Hallucination)
974
971
 
972
+ *(Coming soon)*
973
+
975
974
  Detect hallucinations in an LLM's response:
976
975
 
977
976
  ```python Python
@@ -1057,7 +1056,7 @@ print(atomize_response.to_dict())
1057
1056
  # Add a code of conduct policy
1058
1057
  add_policy_response = coc_client.add_policy(
1059
1058
  policy_name=test_coc_policy_name,
1060
- policy_rules=example_coc_policy_rules, # Can also be a list of rules
1059
+ policy_rules=example_coc_policy_rules, # Can also be a list of rules
1061
1060
  total_rules=4,
1062
1061
  policy_file="/path/to/your/policy.pdf"
1063
1062
  # policy_text=example_coc_policy_text, # Optional: Use this if you want to add a policy text instead of a file
@@ -248,14 +248,7 @@ sample_detectors = {
248
248
  },
249
249
  "bias": {
250
250
  "enabled": False
251
- },
252
- "copyright_ip": {
253
- "enabled": False
254
- },
255
- "system_prompt": {
256
- "enabled": False,
257
- "index": "system"
258
- },
251
+ }
259
252
  }
260
253
  ```
261
254
 
@@ -678,8 +671,8 @@ print(batch_detect_response.to_dict())
678
671
  - `nsfw`: Filter inappropriate content
679
672
  - `toxicity`: Detect toxic language
680
673
  - `pii`: Detect personal information
681
- - `copyright_ip`: Check for copyright/IP violations
682
- - `system_prompt`: Detect system prompt leaks
674
+ - `copyright_ip`: Check for copyright/IP violations *(Coming soon)*
675
+ - `system_prompt`: Detect system prompt leaks *(Coming soon)*
683
676
  - `keyword_detector`: Check for specific keywords
684
677
 
685
678
  Each detector can be enabled/disabled and configured with specific options as documented in the [API docs](https://docs.enkryptai.com/guardrails-api-reference/introduction).
@@ -741,12 +734,16 @@ guardrails_config = GuardrailsConfig.keyword(keywords=["secret", "password"])
741
734
 
742
735
  ### [Copyright IP](https://docs.enkryptai.com/guardrails-api-reference/Copyright_IP_Leak_Detector)
743
736
 
737
+ *(Coming soon)*
738
+
744
739
  ```python Python
745
740
  guardrails_config = GuardrailsConfig.copyright_ip()
746
741
  ```
747
742
 
748
743
  ### [System Prompt](https://docs.enkryptai.com/guardrails-api-reference/System_Prompt_Leak_Detector)
749
744
 
745
+ *(Coming soon)*
746
+
750
747
  ```python Python
751
748
  guardrails_config = GuardrailsConfig.system_prompt(index="system")
752
749
  ```
@@ -949,6 +946,8 @@ print(relevancy_response.to_dict())
949
946
 
950
947
  ### [Check Hallucination](https://docs.enkryptai.com/guardrails-api-reference/Hallucination)
951
948
 
949
+ *(Coming soon)*
950
+
952
951
  Detect hallucinations in an LLM's response:
953
952
 
954
953
  ```python Python
@@ -1034,7 +1033,7 @@ print(atomize_response.to_dict())
1034
1033
  # Add a code of conduct policy
1035
1034
  add_policy_response = coc_client.add_policy(
1036
1035
  policy_name=test_coc_policy_name,
1037
- policy_rules=example_coc_policy_rules, # Can also be a list of rules
1036
+ policy_rules=example_coc_policy_rules, # Can also be a list of rules
1038
1037
  total_rules=4,
1039
1038
  policy_file="/path/to/your/policy.pdf"
1040
1039
  # policy_text=example_coc_policy_text, # Optional: Use this if you want to add a policy text instead of a file
@@ -9,7 +9,7 @@ with open(os.path.join(here, "README.md"), encoding="utf-8") as fh:
9
9
  setup(
10
10
  name="enkryptai-sdk", # This is the name of your package on PyPI
11
11
  # NOTE: Also change this in .github/workflows/test.yaml
12
- version="1.0.12", # Update this for new versions
12
+ version="1.0.14", # Update this for new versions
13
13
  description="A Python SDK with guardrails and red teaming functionality for API interactions",
14
14
  long_description=long_description,
15
15
  long_description_content_type="text/markdown",
@@ -39,6 +39,7 @@ class ModelProviders(str, Enum):
39
39
  ANTHROPIC_COMPATIBLE = "anthropic_compatible"
40
40
  CUSTOM = "custom"
41
41
  HR = "hr"
42
+ URL = "url"
42
43
 
43
44
 
44
45
  @dataclass
@@ -166,6 +167,7 @@ class ModelConfigDetails(BaseDTO):
166
167
  auth_data: AuthData = field(default_factory=AuthData)
167
168
  input_modalities: List[InputModality] = field(default_factory=list)
168
169
  output_modalities: List[OutputModality] = field(default_factory=list)
170
+ custom_curl_command: Optional[str] = None
169
171
  custom_headers: List[CustomHeader] = field(default_factory=list)
170
172
  custom_payload: Dict[str, Any] = field(default_factory=dict)
171
173
  custom_response_content_type: Optional[str] = ""
@@ -359,6 +359,7 @@ class TargetModelConfiguration(BaseDTO):
359
359
  model_api_key: Optional[str] = None
360
360
  input_modalities: List[InputModality] = field(default_factory=list)
361
361
  output_modalities: List[OutputModality] = field(default_factory=list)
362
+ custom_curl_command: Optional[str] = None
362
363
  custom_headers: List[CustomHeader] = field(default_factory=list)
363
364
  custom_payload: Dict[str, Any] = field(default_factory=dict)
364
365
  custom_response_content_type: Optional[str] = ""
@@ -77,6 +77,7 @@ class ModelClient(BaseClient):
77
77
  "tools": config.model_config.tools,
78
78
  "input_modalities": [m.value if hasattr(m, 'value') else m for m in config.model_config.input_modalities],
79
79
  "output_modalities": [m.value if hasattr(m, 'value') else m for m in config.model_config.output_modalities],
80
+ "custom_curl_command": config.model_config.custom_curl_command,
80
81
  "custom_headers": custom_headers,
81
82
  "custom_payload": config.model_config.custom_payload,
82
83
  "custom_response_content_type": config.model_config.custom_response_content_type,
@@ -225,6 +226,7 @@ class ModelClient(BaseClient):
225
226
  "tools": config.model_config.tools,
226
227
  "input_modalities": [m.value if hasattr(m, 'value') else m for m in config.model_config.input_modalities],
227
228
  "output_modalities": [m.value if hasattr(m, 'value') else m for m in config.model_config.output_modalities],
229
+ "custom_curl_command": config.model_config.custom_curl_command,
228
230
  "custom_headers": custom_headers,
229
231
  "custom_payload": config.model_config.custom_payload,
230
232
  "custom_response_content_type": config.model_config.custom_response_content_type,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: enkryptai-sdk
3
- Version: 1.0.12
3
+ Version: 1.0.14
4
4
  Summary: A Python SDK with guardrails and red teaming functionality for API interactions
5
5
  Home-page: https://github.com/enkryptai/enkryptai-sdk
6
6
  Author: Enkrypt AI Team
@@ -271,14 +271,7 @@ sample_detectors = {
271
271
  },
272
272
  "bias": {
273
273
  "enabled": False
274
- },
275
- "copyright_ip": {
276
- "enabled": False
277
- },
278
- "system_prompt": {
279
- "enabled": False,
280
- "index": "system"
281
- },
274
+ }
282
275
  }
283
276
  ```
284
277
 
@@ -701,8 +694,8 @@ print(batch_detect_response.to_dict())
701
694
  - `nsfw`: Filter inappropriate content
702
695
  - `toxicity`: Detect toxic language
703
696
  - `pii`: Detect personal information
704
- - `copyright_ip`: Check for copyright/IP violations
705
- - `system_prompt`: Detect system prompt leaks
697
+ - `copyright_ip`: Check for copyright/IP violations *(Coming soon)*
698
+ - `system_prompt`: Detect system prompt leaks *(Coming soon)*
706
699
  - `keyword_detector`: Check for specific keywords
707
700
 
708
701
  Each detector can be enabled/disabled and configured with specific options as documented in the [API docs](https://docs.enkryptai.com/guardrails-api-reference/introduction).
@@ -764,12 +757,16 @@ guardrails_config = GuardrailsConfig.keyword(keywords=["secret", "password"])
764
757
 
765
758
  ### [Copyright IP](https://docs.enkryptai.com/guardrails-api-reference/Copyright_IP_Leak_Detector)
766
759
 
760
+ *(Coming soon)*
761
+
767
762
  ```python Python
768
763
  guardrails_config = GuardrailsConfig.copyright_ip()
769
764
  ```
770
765
 
771
766
  ### [System Prompt](https://docs.enkryptai.com/guardrails-api-reference/System_Prompt_Leak_Detector)
772
767
 
768
+ *(Coming soon)*
769
+
773
770
  ```python Python
774
771
  guardrails_config = GuardrailsConfig.system_prompt(index="system")
775
772
  ```
@@ -972,6 +969,8 @@ print(relevancy_response.to_dict())
972
969
 
973
970
  ### [Check Hallucination](https://docs.enkryptai.com/guardrails-api-reference/Hallucination)
974
971
 
972
+ *(Coming soon)*
973
+
975
974
  Detect hallucinations in an LLM's response:
976
975
 
977
976
  ```python Python
@@ -1057,7 +1056,7 @@ print(atomize_response.to_dict())
1057
1056
  # Add a code of conduct policy
1058
1057
  add_policy_response = coc_client.add_policy(
1059
1058
  policy_name=test_coc_policy_name,
1060
- policy_rules=example_coc_policy_rules, # Can also be a list of rules
1059
+ policy_rules=example_coc_policy_rules, # Can also be a list of rules
1061
1060
  total_rules=4,
1062
1061
  policy_file="/path/to/your/policy.pdf"
1063
1062
  # policy_text=example_coc_policy_text, # Optional: Use this if you want to add a policy text instead of a file
@@ -996,7 +996,7 @@ def test_list_models(model_client):
996
996
  # assert model_info["model_version"] == test_model_version
997
997
 
998
998
  def test_get_model(model_client):
999
- print("\n\nTesting get_model with custom model")
999
+ print("\n\nTesting get_model")
1000
1000
  # global model_saved_name
1001
1001
  # if model_saved_name is None:
1002
1002
  # print("\nModel saved name is None, fetching it from list_models")
@@ -1006,11 +1006,16 @@ def test_get_model(model_client):
1006
1006
  # model_saved_name = model_info.model_saved_name
1007
1007
  # assert model_saved_name is not None
1008
1008
  # print("\nPicked model in get_model: ", model_saved_name)
1009
- model_saved_name = test_custom_model_saved_name
1009
+ # -------------------------------
1010
+ # NOTE: Using custom model here is breaking AI Proxy as model_saved_name is a global variable
1011
+ # -------------------------------
1012
+ # model_saved_name = test_custom_model_saved_name
1013
+ model_saved_name = test_model_saved_name
1010
1014
  model_version = test_model_version
1011
1015
 
1012
1016
  # Now test the get_model method
1013
1017
  model = model_client.get_model(model_saved_name=model_saved_name, model_version=model_version)
1018
+ # print("\nGET Model: ", model)
1014
1019
  assert model is not None
1015
1020
  # assert hasattr(model, "model_id")
1016
1021
  assert model.model_saved_name == model_saved_name
@@ -1040,7 +1045,7 @@ def test_modify_model(model_client, sample_custom_model_config):
1040
1045
  # Tests for Deployment Endpoints
1041
1046
  # ----------------------------
1042
1047
 
1043
- def test_add_deployment_success(deployment_client, sample_deployment_config):
1048
+ def test_add_deployment(deployment_client, sample_deployment_config):
1044
1049
  response = deployment_client.add_deployment(config=sample_deployment_config)
1045
1050
  assert response is not None
1046
1051
  assert hasattr(response, "from_dict")
@@ -1131,7 +1136,7 @@ def test_401_err_chat(ai_proxy_err_client, sample_chat_body):
1131
1136
  # Tests for Dataset Endpoints
1132
1137
  # ----------------------------
1133
1138
 
1134
- def test_add_dataset_success(dataset_client, sample_dataset_config):
1139
+ def test_add_dataset(dataset_client, sample_dataset_config):
1135
1140
  print("\n\nTesting add_dataset")
1136
1141
  response = dataset_client.add_dataset(config=sample_dataset_config)
1137
1142
  print("\nAdd Dataset Response: ", response)
File without changes
File without changes