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,22 +66,31 @@ 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)
|
||||||
response = await client.beta.messages.create(
|
try:
|
||||||
messages=messages_for_api,
|
response = await client.beta.messages.create(
|
||||||
model=self.vision_model.name,
|
messages=messages_for_api,
|
||||||
system=system_prompt,
|
model=self.vision_model.name,
|
||||||
tools=tools,
|
system=system_prompt,
|
||||||
betas=betas,
|
tools=tools,
|
||||||
thinking=thinking,
|
betas=betas,
|
||||||
max_tokens=4096, # TODO: Make configurable?
|
thinking=thinking,
|
||||||
temperature=temperature,
|
max_tokens=4096, # TODO: Make configurable?
|
||||||
)
|
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))
|
||||||
self.messages.append(AgentMessage(role="assistant", content=response.content))
|
rendered_response = self._render_response(response_content, current_state.screenshot)
|
||||||
rendered_response = self._render_response(response.content, current_state.screenshot)
|
|
||||||
|
|
||||||
for block in response.content:
|
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,12 +193,13 @@ class AnthropicOperatorAgent(OperatorAgent):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
self._update_usage(
|
if response:
|
||||||
response.usage.input_tokens,
|
self._update_usage(
|
||||||
response.usage.output_tokens,
|
response.usage.input_tokens,
|
||||||
response.usage.cache_read_input_tokens,
|
response.usage.output_tokens,
|
||||||
response.usage.cache_creation_input_tokens,
|
response.usage.cache_read_input_tokens,
|
||||||
)
|
response.usage.cache_creation_input_tokens,
|
||||||
|
)
|
||||||
self.tracer["temperature"] = temperature
|
self.tracer["temperature"] = temperature
|
||||||
|
|
||||||
return AgentActResult(
|
return AgentActResult(
|
||||||
|
|||||||
Reference in New Issue
Block a user