Fix an issue in AWSBedrockLLMService.run_inference—exceptions should propagate, just like with other LLM services

This commit is contained in:
Paul Kompfner
2025-09-12 11:09:32 -04:00
parent 9f82c6b4a4
commit 786387722a

View File

@@ -811,60 +811,55 @@ class AWSBedrockLLMService(LLMService):
Returns: Returns:
The LLM's response as a string, or None if no response is generated. The LLM's response as a string, or None if no response is generated.
""" """
try: messages = []
messages = [] system = []
system = [] if isinstance(context, LLMContext):
if isinstance(context, LLMContext): adapter: AWSBedrockLLMAdapter = self.get_llm_adapter()
adapter: AWSBedrockLLMAdapter = self.get_llm_adapter() params: AWSBedrockLLMInvocationParams = adapter.get_llm_invocation_params(context)
params: AWSBedrockLLMInvocationParams = adapter.get_llm_invocation_params(context) messages = params["messages"]
messages = params["messages"] system = params["system"] # [{"text": "system message"}]
system = params["system"] # [{"text": "system message"}] else:
else: context = AWSBedrockLLMContext.upgrade_to_bedrock(context)
context = AWSBedrockLLMContext.upgrade_to_bedrock(context) messages = context.messages
messages = context.messages system = getattr(context, "system", None) # [{"text": "system message"}]
system = getattr(context, "system", None) # [{"text": "system message"}]
# Determine if we're using Claude or Nova based on model ID # Determine if we're using Claude or Nova based on model ID
model_id = self.model_name model_id = self.model_name
# Prepare request parameters # Prepare request parameters
request_params = { request_params = {
"modelId": model_id, "modelId": model_id,
"messages": messages, "messages": messages,
"inferenceConfig": { "inferenceConfig": {
"maxTokens": 8192, "maxTokens": 8192,
"temperature": 0.7, "temperature": 0.7,
"topP": 0.9, "topP": 0.9,
}, },
} }
if system: if system:
request_params["system"] = system request_params["system"] = system
async with self._aws_session.client( async with self._aws_session.client(
service_name="bedrock-runtime", **self._aws_params service_name="bedrock-runtime", **self._aws_params
) as client: ) as client:
# Call Bedrock without streaming # Call Bedrock without streaming
response = await client.converse(**request_params) response = await client.converse(**request_params)
# Extract the response text # Extract the response text
if ( if (
"output" in response "output" in response
and "message" in response["output"] and "message" in response["output"]
and "content" in response["output"]["message"] and "content" in response["output"]["message"]
): ):
content = response["output"]["message"]["content"] content = response["output"]["message"]["content"]
if isinstance(content, list): if isinstance(content, list):
for item in content: for item in content:
if item.get("text"): if item.get("text"):
return item["text"] return item["text"]
elif isinstance(content, str): elif isinstance(content, str):
return content return content
return None
except Exception as e:
logger.error(f"Bedrock summary generation failed: {e}", exc_info=True)
return None return None
async def _create_converse_stream(self, client, request_params): async def _create_converse_stream(self, client, request_params):