mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-09 05:39:12 +00:00
Handle failed operator agent calls to anthropic api more gracefully
Add anthropic operator api call errors to trajectory instead of erroring out of current operator run
This commit is contained in:
@@ -66,6 +66,7 @@ class AnthropicOperatorAgent(OperatorAgent):
|
|||||||
self.messages = primary_task + condensed_trajectory + recent_trajectory
|
self.messages = primary_task + condensed_trajectory + recent_trajectory
|
||||||
|
|
||||||
messages_for_api = self._format_message_for_api(self.messages)
|
messages_for_api = self._format_message_for_api(self.messages)
|
||||||
|
try:
|
||||||
response = await client.beta.messages.create(
|
response = await client.beta.messages.create(
|
||||||
messages=messages_for_api,
|
messages=messages_for_api,
|
||||||
model=self.vision_model.name,
|
model=self.vision_model.name,
|
||||||
@@ -76,12 +77,20 @@ class AnthropicOperatorAgent(OperatorAgent):
|
|||||||
max_tokens=4096, # TODO: Make configurable?
|
max_tokens=4096, # TODO: Make configurable?
|
||||||
temperature=temperature,
|
temperature=temperature,
|
||||||
)
|
)
|
||||||
|
response_content = response.content
|
||||||
|
except Exception as e:
|
||||||
|
# create a response block with error message
|
||||||
|
logger.error(f"Error during Anthropic API call: {e}")
|
||||||
|
error_str = e.message if hasattr(e, "message") else str(e)
|
||||||
|
response = None
|
||||||
|
response_content = [BetaTextBlock(text=f"Communication Error: {error_str}", type="text")]
|
||||||
|
else:
|
||||||
logger.debug(f"Anthropic response: {response.model_dump_json()}")
|
logger.debug(f"Anthropic response: {response.model_dump_json()}")
|
||||||
self.messages.append(AgentMessage(role="assistant", content=response.content))
|
|
||||||
rendered_response = self._render_response(response.content, current_state.screenshot)
|
|
||||||
|
|
||||||
for block in response.content:
|
self.messages.append(AgentMessage(role="assistant", content=response_content))
|
||||||
|
rendered_response = self._render_response(response_content, current_state.screenshot)
|
||||||
|
|
||||||
|
for block in response_content:
|
||||||
if block.type == "tool_use":
|
if block.type == "tool_use":
|
||||||
content = None
|
content = None
|
||||||
is_error = False
|
is_error = False
|
||||||
@@ -184,6 +193,7 @@ class AnthropicOperatorAgent(OperatorAgent):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if response:
|
||||||
self._update_usage(
|
self._update_usage(
|
||||||
response.usage.input_tokens,
|
response.usage.input_tokens,
|
||||||
response.usage.output_tokens,
|
response.usage.output_tokens,
|
||||||
|
|||||||
Reference in New Issue
Block a user