Skip to content

Commit 51dfbe1

Browse files
authored
feat/add better custom errors (#315)
* add better custom errors * share same error handling code between async and non async partitioner code * Fix async call * Add error handling to openai embedder * Add error handling to bedrock embedder * Add error handling to octoai embedder * Add error handling to togetherai embedder * differentiate from rate limit and quote max in openai * Update method to wrap error rather than raise to help with typing * Add error handling to voyageai embedder * fix unit test
1 parent 878ca74 commit 51dfbe1

File tree

17 files changed

+1097
-29
lines changed

17 files changed

+1097
-29
lines changed

CHANGELOG.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
## 0.3.12-dev1
2-
3-
* **Bypass asyncio exception grouping to return more meaningful errors from OneDrive indexer**
4-
5-
6-
## 0.3.12-dev0
1+
## 0.3.12-dev2
72

83
### Fixes
94

@@ -12,6 +7,9 @@
127
### Enhancements
138

149
* **Kafka destination connector checks for existence of topic**
10+
* **Create more reflective custom errors** Provide errors to indicate if the error was due to something user provided or due to a provider issue, applicable to all steps in the pipeline.
11+
* **Bypass asyncio exception grouping to return more meaningful errors from OneDrive indexer**
12+
1513

1614
## 0.3.11
1715

test/integration/embedders/test_bedrock.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
import os
33
from pathlib import Path
44

5+
import pytest
6+
57
from test.integration.embedders.utils import validate_embedding_output, validate_raw_embedder
68
from test.integration.utils import requires_env
79
from unstructured_ingest.embed.bedrock import BedrockEmbeddingConfig, BedrockEmbeddingEncoder
10+
from unstructured_ingest.v2.errors import UserAuthError, UserError
811
from unstructured_ingest.v2.processes.embedder import Embedder, EmbedderConfig
912

1013

@@ -47,3 +50,28 @@ def test_raw_bedrock_embedder(embedder_file: Path):
4750
expected_dimensions=(1536,),
4851
expected_is_unit_vector=False,
4952
)
53+
54+
55+
def test_raw_bedrock_embedder_invalid_credentials(embedder_file: Path):
56+
embedder = BedrockEmbeddingEncoder(
57+
config=BedrockEmbeddingConfig(
58+
aws_access_key_id="no_key",
59+
aws_secret_access_key="no_secret",
60+
)
61+
)
62+
with pytest.raises(UserAuthError):
63+
embedder.get_exemplary_embedding()
64+
65+
66+
@requires_env("AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY")
67+
def test_raw_bedrock_embedder_invalid_model(embedder_file: Path):
68+
aws_credentials = get_aws_credentials()
69+
embedder = BedrockEmbeddingEncoder(
70+
config=BedrockEmbeddingConfig(
71+
aws_access_key_id=aws_credentials["aws_access_key_id"],
72+
aws_secret_access_key=aws_credentials["aws_secret_access_key"],
73+
model_name="invalid_model",
74+
)
75+
)
76+
with pytest.raises(UserError):
77+
embedder.get_exemplary_embedding()

test/integration/embedders/test_octoai.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
import os
33
from pathlib import Path
44

5+
import pytest
6+
57
from test.integration.embedders.utils import validate_embedding_output, validate_raw_embedder
68
from test.integration.utils import requires_env
79
from unstructured_ingest.embed.octoai import OctoAiEmbeddingConfig, OctoAIEmbeddingEncoder
10+
from unstructured_ingest.v2.errors import UserAuthError
811
from unstructured_ingest.v2.processes.embedder import Embedder, EmbedderConfig
912

1013
API_KEY = "OCTOAI_API_KEY"
@@ -39,3 +42,14 @@ def test_raw_octoai_embedder(embedder_file: Path):
3942
validate_raw_embedder(
4043
embedder=embedder, embedder_file=embedder_file, expected_dimensions=(1024,)
4144
)
45+
46+
47+
@pytest.mark.skip(reason="Unexpected connection error at the moment")
48+
def test_raw_octoai_embedder_invalid_credentials():
49+
embedder = OctoAIEmbeddingEncoder(
50+
config=OctoAiEmbeddingConfig(
51+
api_key="fake_api_key",
52+
)
53+
)
54+
with pytest.raises(UserAuthError):
55+
embedder.get_exemplary_embedding()

test/integration/embedders/test_openai.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
import os
33
from pathlib import Path
44

5+
import pytest
6+
57
from test.integration.embedders.utils import validate_embedding_output, validate_raw_embedder
68
from test.integration.utils import requires_env
79
from unstructured_ingest.embed.openai import OpenAIEmbeddingConfig, OpenAIEmbeddingEncoder
10+
from unstructured_ingest.v2.errors import UserAuthError
811
from unstructured_ingest.v2.processes.embedder import Embedder, EmbedderConfig
912

1013
API_KEY = "OPENAI_API_KEY"
@@ -39,3 +42,13 @@ def test_raw_openai_embedder(embedder_file: Path):
3942
validate_raw_embedder(
4043
embedder=embedder, embedder_file=embedder_file, expected_dimensions=(1536,)
4144
)
45+
46+
47+
def test_raw_openai_embedder_invalid_credentials():
48+
embedder = OpenAIEmbeddingEncoder(
49+
config=OpenAIEmbeddingConfig(
50+
api_key="fake_api_key",
51+
)
52+
)
53+
with pytest.raises(UserAuthError):
54+
embedder.get_exemplary_embedding()

test/integration/embedders/test_togetherai.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
import os
33
from pathlib import Path
44

5+
import pytest
6+
57
from test.integration.embedders.utils import validate_embedding_output, validate_raw_embedder
68
from test.integration.utils import requires_env
79
from unstructured_ingest.embed.togetherai import (
810
TogetherAIEmbeddingConfig,
911
TogetherAIEmbeddingEncoder,
1012
)
13+
from unstructured_ingest.v2.errors import UserAuthError
1114
from unstructured_ingest.v2.processes.embedder import Embedder, EmbedderConfig
1215

1316
API_KEY = "TOGETHERAI_API_KEY"
@@ -41,3 +44,10 @@ def test_raw_togetherai_embedder(embedder_file: Path):
4144
expected_dimensions=(768,),
4245
expected_is_unit_vector=False,
4346
)
47+
48+
49+
def test_raw_togetherai_embedder_invalid_credentials():
50+
embedder = TogetherAIEmbeddingEncoder(config=TogetherAIEmbeddingConfig(api_key="fake_api_key"))
51+
52+
with pytest.raises(UserAuthError):
53+
embedder.get_exemplary_embedding()

0 commit comments

Comments
 (0)