Skip to content

Commit c6f6485

Browse files
feaat: Updated qdrant client to 1.9.1, bumped sdk to 0.25.0 (#46)
Updated qdrant client to 1.9.1, bumped sdk to 0.25.0
1 parent 7048dbd commit c6f6485

File tree

8 files changed

+412
-404
lines changed

8 files changed

+412
-404
lines changed

pdm.lock

Lines changed: 356 additions & 359 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ dependencies = [
1212
"python-magic~=0.4.27",
1313
"python-dotenv==1.0.0",
1414
# LLM Triad
15-
"unstract-adapters~=0.12.1",
15+
"unstract-adapters~=0.14.0",
1616
"llama-index==0.10.28",
1717
"tiktoken~=0.4.0",
1818
"transformers==4.37.0",
19+
# Error handling, remove after moving it to adapters
20+
"openai~=1.21.2"
1921
]
2022
readme = "README.md"
2123
urls = { Homepage = "https://unstract.com", "Release notes" = "https://github.com/Zipstack/unstract-sdk/releases", Source = "https://github.com/Zipstack/unstract-sdk" }

src/unstract/sdk/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "0.24.1"
1+
__version__ = "0.25.0"
22

33

44
def get_sdk_version():

src/unstract/sdk/embedding.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from unstract.sdk.adapters import ToolAdapter
66
from unstract.sdk.constants import LogLevel
7-
from unstract.sdk.exceptions import SdkError
7+
from unstract.sdk.exceptions import SdkError, ToolEmbeddingError
88
from unstract.sdk.tool.base import BaseTool
99

1010

@@ -32,23 +32,20 @@ def get_embedding(self, adapter_instance_id: str) -> BaseEmbedding:
3232
embedding_adapter_id = embedding_config_data.get(Common.ADAPTER_ID)
3333
if embedding_adapter_id not in self.embedding_adapters:
3434
raise SdkError(
35-
f"Embedding adapter not supported : "
36-
f"{embedding_adapter_id}"
35+
f"Embedding adapter not supported : " f"{embedding_adapter_id}"
3736
)
3837

3938
embedding_adapter = self.embedding_adapters[embedding_adapter_id][
4039
Common.METADATA
4140
][Common.ADAPTER]
42-
embedding_metadata = embedding_config_data.get(
43-
Common.ADAPTER_METADATA
44-
)
41+
embedding_metadata = embedding_config_data.get(Common.ADAPTER_METADATA)
4542
embedding_adapter_class = embedding_adapter(embedding_metadata)
4643
return embedding_adapter_class.get_embedding_instance()
4744
except Exception as e:
4845
self.tool.stream_log(
4946
log=f"Error getting embedding: {e}", level=LogLevel.ERROR
5047
)
51-
raise SdkError(f"Error getting embedding instance: {e}")
48+
raise ToolEmbeddingError(f"Error getting embedding instance: {e}")
5249

5350
def get_embedding_length(self, embedding: BaseEmbedding) -> int:
5451
embedding_list = embedding._get_text_embedding(self.__TEST_SNIPPET)

src/unstract/sdk/exceptions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,19 @@ def __init__(self, message: str = ""):
1515
if "404" in message:
1616
message = "Index not found. Please check vector db adapter settings."
1717
super().__init__(message)
18+
19+
20+
class ToolLLMError(SdkError):
21+
DEFAULT_MESSAGE = "Error ocurred related to LLM"
22+
23+
24+
class ToolEmbeddingError(SdkError):
25+
DEFAULT_MESSAGE = "Error ocurred related to embedding"
26+
27+
28+
class ToolVectorDBError(SdkError):
29+
DEFAULT_MESSAGE = "Error ocurred related to vector DB"
30+
31+
32+
class RateLimitError(SdkError):
33+
DEFAULT_MESSAGE = "Running into rate limit errors, please try again later"

src/unstract/sdk/index.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ def index_file(
230230
}
231231
)
232232

233+
if not extracted_text:
234+
raise IndexingError("No text available to index")
235+
233236
# Check if chunking is required
234237
documents = []
235238
for item in full_text:

src/unstract/sdk/llm.py

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
import logging
22
import re
3-
import time
43
from typing import Any, Optional
54

65
from llama_index.core.llms import LLM, CompletionResponse
6+
from openai import APIError as OpenAIAPIError
7+
from openai import RateLimitError as OpenAIRateLimitError
78
from unstract.adapters.constants import Common
89
from unstract.adapters.llm import adapters
910
from unstract.adapters.llm.llm_adapter import LLMAdapter
1011

1112
from unstract.sdk.adapters import ToolAdapter
1213
from unstract.sdk.constants import LogLevel
13-
from unstract.sdk.exceptions import SdkError
14+
from unstract.sdk.exceptions import RateLimitError, SdkError, ToolLLMError
1415
from unstract.sdk.tool.base import BaseTool
15-
from unstract.sdk.utils.callback_manager import (
16-
CallbackManager as UNCallbackManager,
17-
)
16+
from unstract.sdk.utils.callback_manager import CallbackManager as UNCallbackManager
1817

1918
logger = logging.getLogger(__name__)
2019

2120

2221
class ToolLLM:
2322
"""Class to handle LLMs for Unstract Tools."""
2423

25-
json_regex = re.compile(r"\{(?:.|\n)*\}")
24+
json_regex = re.compile(r"\[(?:.|\n)*\]|\{(?:.|\n)*\}")
2625

2726
def __init__(self, tool: BaseTool):
2827
"""ToolLLM constructor.
@@ -62,21 +61,21 @@ def run_completion(
6261
"run_id",
6362
]:
6463
new_kwargs.pop(key, None)
65-
for i in range(retries):
66-
try:
67-
response: CompletionResponse = llm.complete(
68-
prompt, **new_kwargs
69-
)
70-
match = cls.json_regex.search(response.text)
71-
if match:
72-
response.text = match.group(0)
73-
return {"response": response}
74-
75-
except Exception as e:
76-
if i == retries - 1:
77-
raise e
78-
time.sleep(5)
79-
return None
64+
65+
try:
66+
response: CompletionResponse = llm.complete(prompt, **new_kwargs)
67+
match = cls.json_regex.search(response.text)
68+
if match:
69+
response.text = match.group(0)
70+
return {"response": response}
71+
# TODO: Handle for all LLM providers
72+
except OpenAIAPIError as e:
73+
msg = e.message
74+
if hasattr(e, "body") and "message" in e.body:
75+
msg = e.body["message"]
76+
if isinstance(e, OpenAIRateLimitError):
77+
raise RateLimitError(msg)
78+
raise ToolLLMError(msg) from e
8079

8180
def get_llm(self, adapter_instance_id: str) -> LLM:
8281
"""Returns the LLM object for the tool.
@@ -91,13 +90,11 @@ def get_llm(self, adapter_instance_id: str) -> LLM:
9190
)
9291
llm_adapter_id = llm_config_data.get(Common.ADAPTER_ID)
9392
if llm_adapter_id not in self.llm_adapters:
94-
raise SdkError(
95-
f"LLM adapter not supported : " f"{llm_adapter_id}"
96-
)
93+
raise SdkError(f"LLM adapter not supported : " f"{llm_adapter_id}")
9794

98-
llm_adapter = self.llm_adapters[llm_adapter_id][
99-
Common.METADATA
100-
][Common.ADAPTER]
95+
llm_adapter = self.llm_adapters[llm_adapter_id][Common.METADATA][
96+
Common.ADAPTER
97+
]
10198
llm_metadata = llm_config_data.get(Common.ADAPTER_METADATA)
10299
llm_adapter_class: LLMAdapter = llm_adapter(llm_metadata)
103100
llm_instance: LLM = llm_adapter_class.get_llm_instance()
@@ -106,7 +103,7 @@ def get_llm(self, adapter_instance_id: str) -> LLM:
106103
self.tool.stream_log(
107104
log=f"Unable to get llm instance: {e}", level=LogLevel.ERROR
108105
)
109-
raise SdkError(f"Error getting llm instance: {e}")
106+
raise ToolLLMError(f"Error getting llm instance: {e}")
110107

111108
def get_max_tokens(self, reserved_for_output: int = 0) -> int:
112109
"""Returns the maximum number of tokens that can be used for the LLM.

src/unstract/sdk/vector_db.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
import logging
22
from typing import Union
33

4-
from llama_index.core.vector_stores.types import (
5-
BasePydanticVectorStore,
6-
VectorStore,
7-
)
4+
from llama_index.core.vector_stores.types import BasePydanticVectorStore, VectorStore
85
from unstract.adapters.constants import Common
96
from unstract.adapters.vectordb import adapters
107
from unstract.adapters.vectordb.constants import VectorDbConstants
118

129
from unstract.sdk.adapters import ToolAdapter
1310
from unstract.sdk.constants import LogLevel, ToolEnv
14-
from unstract.sdk.exceptions import SdkError
11+
from unstract.sdk.exceptions import SdkError, ToolVectorDBError
1512
from unstract.sdk.platform import PlatformHelper
1613
from unstract.sdk.tool.base import BaseTool
1714

@@ -58,8 +55,7 @@ def get_vector_db(
5855
vector_db_adapter_id = vector_db_config.get(Common.ADAPTER_ID)
5956
if vector_db_adapter_id not in self.vector_db_adapters:
6057
raise SdkError(
61-
f"VectorDB adapter not supported : "
62-
f"{vector_db_adapter_id}"
58+
f"VectorDB adapter not supported : " f"{vector_db_adapter_id}"
6359
)
6460

6561
vector_db_adapter = self.vector_db_adapters[vector_db_adapter_id][
@@ -81,4 +77,4 @@ def get_vector_db(
8177
log=f"Unable to get vector_db {adapter_instance_id}: {e}",
8278
level=LogLevel.ERROR,
8379
)
84-
raise SdkError(f"Error getting vectorDB instance: {e}")
80+
raise ToolVectorDBError(f"Error getting vectorDB instance: {e}")

0 commit comments

Comments
 (0)