mirror of
https://github.com/khoj-ai/khoj.git
synced 2024-11-30 19:03:01 +01:00
Show tool call error in next iteration. Allow rerun if model requests.
Previously errors would get eaten up but the model wouldn't see anything. And the model wouldn't be allowed re-run the same query-tool combination in the next iteration. This update should give it insight into why it didn't get a result. So it can make an informed (hopefully better) decision on what to do next. And re-run the previous query if appropriate.
This commit is contained in:
parent
604da90fa8
commit
8e009f48ce
1 changed files with 11 additions and 9 deletions
|
@ -114,7 +114,7 @@ async def apick_next_tool(
|
||||||
logger.info(f"Response for determining relevant tools: {response}")
|
logger.info(f"Response for determining relevant tools: {response}")
|
||||||
|
|
||||||
# Detect selection of previously used query, tool combination.
|
# Detect selection of previously used query, tool combination.
|
||||||
previous_tool_query_combinations = {(i.tool, i.query) for i in previous_iterations}
|
previous_tool_query_combinations = {(i.tool, i.query) for i in previous_iterations if i.warning is None}
|
||||||
if (selected_tool, generated_query) in previous_tool_query_combinations:
|
if (selected_tool, generated_query) in previous_tool_query_combinations:
|
||||||
warning = f"Repeated tool, query combination detected. Skipping iteration. Try something different."
|
warning = f"Repeated tool, query combination detected. Skipping iteration. Try something different."
|
||||||
# Only send client status updates if we'll execute this iteration
|
# Only send client status updates if we'll execute this iteration
|
||||||
|
@ -226,7 +226,8 @@ async def execute_information_collection(
|
||||||
):
|
):
|
||||||
yield result
|
yield result
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error extracting document references: {e}", exc_info=True)
|
this_iteration.warning = f"Error extracting document references: {e}"
|
||||||
|
logger.error(this_iteration.warning, exc_info=True)
|
||||||
|
|
||||||
elif this_iteration.tool == ConversationCommand.Online:
|
elif this_iteration.tool == ConversationCommand.Online:
|
||||||
previous_subqueries = {
|
previous_subqueries = {
|
||||||
|
@ -257,7 +258,8 @@ async def execute_information_collection(
|
||||||
online_results: Dict[str, Dict] = result # type: ignore
|
online_results: Dict[str, Dict] = result # type: ignore
|
||||||
this_iteration.onlineContext = online_results
|
this_iteration.onlineContext = online_results
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error searching online: {e}", exc_info=True)
|
this_iteration.warning = f"Error searching online: {e}"
|
||||||
|
logger.error(this_iteration.warning, exc_info=True)
|
||||||
|
|
||||||
elif this_iteration.tool == ConversationCommand.Webpage:
|
elif this_iteration.tool == ConversationCommand.Webpage:
|
||||||
try:
|
try:
|
||||||
|
@ -288,7 +290,8 @@ async def execute_information_collection(
|
||||||
webpages.append(webpage["link"])
|
webpages.append(webpage["link"])
|
||||||
this_iteration.onlineContext = online_results
|
this_iteration.onlineContext = online_results
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error reading webpages: {e}", exc_info=True)
|
this_iteration.warning = f"Error reading webpages: {e}"
|
||||||
|
logger.error(this_iteration.warning, exc_info=True)
|
||||||
|
|
||||||
elif this_iteration.tool == ConversationCommand.Code:
|
elif this_iteration.tool == ConversationCommand.Code:
|
||||||
try:
|
try:
|
||||||
|
@ -312,10 +315,8 @@ async def execute_information_collection(
|
||||||
async for result in send_status_func(f"**Ran code snippets**: {len(this_iteration.codeContext)}"):
|
async for result in send_status_func(f"**Ran code snippets**: {len(this_iteration.codeContext)}"):
|
||||||
yield result
|
yield result
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
logger.warning(
|
this_iteration.warning = f"Error running code: {e}"
|
||||||
f"Failed to use code tool: {e}. Attempting to respond without code results",
|
logger.warning(this_iteration.warning, exc_info=True)
|
||||||
exc_info=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
elif this_iteration.tool == ConversationCommand.Summarize:
|
elif this_iteration.tool == ConversationCommand.Summarize:
|
||||||
try:
|
try:
|
||||||
|
@ -334,7 +335,8 @@ async def execute_information_collection(
|
||||||
else:
|
else:
|
||||||
summarize_files = result # type: ignore
|
summarize_files = result # type: ignore
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error generating summary: {e}", exc_info=True)
|
this_iteration.warning = f"Error summarizing files: {e}"
|
||||||
|
logger.error(this_iteration.warning, exc_info=True)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# No valid tools. This is our exit condition.
|
# No valid tools. This is our exit condition.
|
||||||
|
|
Loading…
Reference in a new issue