Skip to content

Commit e45edfb

Browse files
committed
Adding EmptyDocsError failover to gen_answer (#1073)
1 parent 27068f9 commit e45edfb

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

src/paperqa/agents/tools.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,9 @@ async def gen_answer(self, state: EnvironmentState) -> str:
309309
Args:
310310
state: Current state.
311311
"""
312+
if not state.docs.docs:
313+
raise EmptyDocsError("Not generating an answer due to having no papers.")
314+
312315
logger.info(f"Generating answer for '{state.session.question}'.")
313316

314317
if f"{self.TOOL_FN_NAME}_initialized" in self.settings.agent.callbacks:

src/paperqa/docs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ async def aquery(
738738
contexts = session.contexts
739739
if answer_config.get_evidence_if_no_contexts and not contexts:
740740
session = await self.aget_evidence(
741-
session,
741+
query=session,
742742
callbacks=callbacks,
743743
settings=settings,
744744
embedding_model=embedding_model,

tests/test_agents.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from functools import wraps
1313
from pathlib import Path
1414
from typing import cast
15-
from unittest.mock import AsyncMock, patch
15+
from unittest.mock import AsyncMock, MagicMock, patch
1616
from uuid import uuid4
1717

1818
import ldp.agent
@@ -466,15 +466,27 @@ async def llm_model_call(*args, **kwargs):
466466
@pytest.mark.asyncio
467467
async def test_timeout(agent_test_settings: Settings, agent_type: str | type) -> None:
468468
agent_test_settings.prompts.pre = None
469-
agent_test_settings.agent.timeout = 0.001
469+
agent_test_settings.agent.timeout = 0.05 # Give time for Environment.reset()
470470
agent_test_settings.llm = "gpt-4o-mini"
471471
agent_test_settings.agent.tool_names = {"gen_answer", "complete"}
472-
response = await agent_query(
473-
query="Are COVID-19 vaccines effective?",
474-
settings=agent_test_settings,
475-
agent_type=agent_type,
476-
)
477-
# ensure that GenerateAnswerTool was called
472+
docs = Docs()
473+
474+
async def custom_aget_evidence(*_, **kwargs) -> PQASession: # noqa: RUF029
475+
return kwargs["query"]
476+
477+
with (
478+
patch.object(docs, "docs", {"stub_key": MagicMock(spec_set=Doc)}),
479+
patch.multiple(
480+
Docs, clear_docs=MagicMock(), aget_evidence=custom_aget_evidence
481+
),
482+
):
483+
response = await agent_query(
484+
query="Are COVID-19 vaccines effective?",
485+
settings=agent_test_settings,
486+
docs=docs,
487+
agent_type=agent_type,
488+
)
489+
# Ensure that GenerateAnswerTool was called in truncation's failover
478490
assert response.status == AgentStatus.TRUNCATED, "Agent did not timeout"
479491
assert CANNOT_ANSWER_PHRASE in response.session.answer
480492

0 commit comments

Comments
 (0)