Address terminology consistency and edge case logging

- Update Pydantic field descriptions to use 'idx' instead of 'ids' for consistency
- Fix debug logging to handle empty list edge case (avoid 'idx 0--1' display)

Note on review feedback:
- Validation is intentionally non-redundant: warnings provide visibility, list comprehensions ensure robustness
- WARNING level is appropriate for LLM output issues (not system errors)
- Existing test coverage is sufficient for this defensive logging addition

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Daniel Chalef 2025-10-02 16:56:39 -07:00
parent 296287d076
commit 875d0bf083
2 changed files with 10 additions and 9 deletions

View file

@ -25,11 +25,11 @@ from .prompt_helpers import to_prompt_json
class EdgeDuplicate(BaseModel):
duplicate_facts: list[int] = Field(
...,
description='List of ids of any duplicate facts. If no duplicate facts are found, default to empty list.',
description='List of idx values of any duplicate facts. If no duplicate facts are found, default to empty list.',
)
contradicted_facts: list[int] = Field(
...,
description='List of ids of facts that should be invalidated. If no facts should be invalidated, the list should be empty.',
description='List of idx values of facts that should be invalidated. If no facts should be invalidated, the list should be empty.',
)
fact_type: str = Field(..., description='One of the provided fact types or DEFAULT')

View file

@ -506,13 +506,14 @@ async def resolve_extracted_edge(
'ensure_ascii': ensure_ascii,
}
logger.debug(
'Resolving edge: sent %d EXISTING FACTS (idx 0-%d) and %d INVALIDATION CANDIDATES (idx 0-%d)',
len(related_edges),
len(related_edges) - 1,
len(existing_edges),
len(existing_edges) - 1,
)
if related_edges or existing_edges:
logger.debug(
'Resolving edge: sent %d EXISTING FACTS%s and %d INVALIDATION CANDIDATES%s',
len(related_edges),
f' (idx 0-{len(related_edges) - 1})' if related_edges else '',
len(existing_edges),
f' (idx 0-{len(existing_edges) - 1})' if existing_edges else '',
)
llm_response = await llm_client.generate_response(
prompt_library.dedupe_edges.resolve_edge(context),