in tools/aoai.py [0:0]
def get_embeddings(self, text, retry_after=True):
"""
Generates embeddings for the given text using the Azure OpenAI service.
Args:
text (str): The input text to generate embeddings for.
retry_after (bool, optional): Flag to determine if the method should retry after rate limiting. Defaults to True.
Returns:
list: The generated embeddings.
"""
one_liner_text = text.replace('\n', ' ')
logging.debug(f"[aoai]{self.document_filename} Getting embeddings for text: {one_liner_text[:100]}")
# Truncate in case it is larger than the maximum input tokens
text = self._truncate_input(text, self.max_embeddings_model_input_tokens)
try:
response = self.client.embeddings.create(
input=text,
model=self.openai_embeddings_deployment
)
embeddings = response.data[0].embedding
logging.debug(f"[aoai]{self.document_filename} Embeddings received successfully.")
return embeddings
except RateLimitError as e:
if not retry_after:
logging.error(f"[aoai]{self.document_filename} get_embeddings: Rate limit error occurred after retries: {e}")
raise
retry_after_ms = e.response.headers.get('retry-after-ms')
if retry_after_ms:
retry_after_ms = int(retry_after_ms)
logging.info(f"[aoai]{self.document_filename} get_embeddings: Reached rate limit, retrying after {retry_after_ms} ms")
time.sleep(retry_after_ms / 1000)
return self.get_embeddings(text, retry_after=False)
else:
logging.error(f"[aoai]{self.document_filename} get_embeddings: Rate limit error occurred, no 'retry-after-ms' provided: {e}")
raise
except ClientAuthenticationError as e:
logging.error(f"[aoai]{self.document_filename} get_embeddings: Authentication failed: {e}")
raise
except Exception as e:
logging.error(f"[aoai]{self.document_filename} get_embeddings: An unexpected error occurred: {e}")
raise