Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/typeagent/knowpro/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
TextRangesInScope,
)
from .common import is_search_term_wildcard
from .dataclasses import dataclass as pydantic_dataclass
from .interfaces import (
DateRange,
Datetime,
Expand Down Expand Up @@ -54,7 +55,9 @@


# TODO: Move to compilelib.py
@dataclass
# A pydantic dataclass, like SearchTerm: a stdlib dataclass would take
# SearchTerm's pydantic Field object as the default of related_terms.
@pydantic_dataclass
class CompiledSearchTerm(SearchTerm):
related_terms_required: bool = False

Expand Down
15 changes: 15 additions & 0 deletions tests/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
Topic,
)
from typeagent.knowpro.query import (
CompiledSearchTerm,
get_text_range_for_date_range,
GetScopeExpr,
is_conversation_searchable,
Expand All @@ -42,6 +43,7 @@
)
from typeagent.storage.memory import MemorySemanticRefCollection
from typeagent.storage.memory.property_index import PropertyIndex
from typeagent.storage.memory.related_terms_index import dedupe_related_terms

from conftest import FakeConversation, FakeMessage, FakeTermIndex

Expand Down Expand Up @@ -799,3 +801,16 @@ async def eval(self, context: QueryEvalContext) -> SemanticRefAccumulator:
assert "term_a" in filtered.search_term_matches
filtered.search_term_matches.add("new_term")
assert "new_term" not in src.search_term_matches


def test_compiled_search_term_defaults() -> None:
term = CompiledSearchTerm(Term("python"))
assert term.related_terms is None
assert term.related_terms_required is False


def test_dedupe_related_terms_accepts_default_compiled_terms() -> None:
# A default related_terms that isn't None used to crash TermSet.add_or_union.
terms = [CompiledSearchTerm(Term("python")), CompiledSearchTerm(Term("java"))]
dedupe_related_terms(terms, ensure_single_occurrence=True)
assert [t.related_terms for t in terms] == [None, None]
Loading