Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
math_tutor_dev
public_math_tutor
Commits
d93bc3e6
Commit
d93bc3e6
authored
Mar 02, 2026
by
Kantz
Browse files
aufräumen des vector stores
parent
9a38c477
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
math-tutor/backend/app/deterministic_services/vector_store.py
View file @
d93bc3e6
This diff is collapsed.
Click to expand it.
math-tutor/backend/test/vector_store_pipeline_unit_test.py
0 → 100644
View file @
d93bc3e6
from
__future__
import
annotations
import
unittest
from
app.deterministic_services.vector_store
import
(
Retrieved
,
Source
,
SourceID
,
build_default_pipeline_config
,
expand_neighbor_children
,
merge_retrieval_groups
,
merge_sources
,
select_dominant_scope
,
)
def
_mk_retrieved
(
uid
:
str
,
score
:
float
,
chapter_index
:
int
,
section_index
:
int
,
subsection_index
:
int
|
None
,
child_index
:
int
=
1
,
)
->
Retrieved
:
return
Retrieved
(
uid
=
uid
,
doc_type
=
"child"
,
score
=
score
,
metadata
=
{
"chapter_index"
:
chapter_index
,
"section_index"
:
section_index
,
"subsection_index"
:
subsection_index
,
"child_index"
:
child_index
,
"chapter_title"
:
"C"
,
"section_title"
:
"S"
,
"subsection_title"
:
"SS"
,
"title"
:
uid
,
"source_type"
:
"child"
,
"path"
:
""
,
"doc_type"
:
"child"
,
"uid"
:
uid
,
},
markdown
=
f
"md-
{
uid
}
"
,
)
class
VectorStorePipelineUnitTest
(
unittest
.
TestCase
):
def
test_merge_sources_prefers_task_childs_on_duplicate
(
self
)
->
None
:
child_direct
=
Source
(
source_id
=
SourceID
(
chapter_title
=
"Kapitel"
,
section_title
=
"Section"
,
subsection_title
=
"Subsection"
,
title
=
"Child A"
,
doc_type
=
"child"
,
),
retrieved_as
=
"children_direct"
,
source_type
=
"child"
,
score
=
0.7
,
markdown
=
"same-md"
,
)
task_child
=
Source
(
source_id
=
SourceID
(
chapter_title
=
"Kapitel"
,
section_title
=
"Section"
,
subsection_title
=
"Subsection"
,
title
=
"Child A"
,
doc_type
=
"child"
,
),
retrieved_as
=
"task_childs"
,
source_type
=
"child"
,
score
=
1.0
,
markdown
=
"same-md"
,
)
merged
=
merge_sources
([
child_direct
],
[
task_child
])
self
.
assertEqual
(
len
(
merged
),
1
)
self
.
assertEqual
(
merged
[
0
].
retrieved_as
,
"task_childs"
)
def
test_build_default_pipeline_config
(
self
)
->
None
:
cfg
=
build_default_pipeline_config
(
k
=
4
,
expand_links
=
True
,
neighbor_expand
=
2
)
self
.
assertEqual
(
cfg
.
vector_k
,
20
)
self
.
assertEqual
(
cfg
.
scope_fill_k
,
5
)
self
.
assertTrue
(
cfg
.
enable_global_search
)
self
.
assertTrue
(
cfg
.
enable_dominant_scope
)
self
.
assertTrue
(
cfg
.
enable_scoped_child_search
)
self
.
assertTrue
(
cfg
.
enable_context_docs
)
def
test_select_dominant_scope_prefers_count
(
self
)
->
None
:
children
=
[
_mk_retrieved
(
"a"
,
0.9
,
1
,
1
,
1
),
_mk_retrieved
(
"b"
,
0.8
,
1
,
1
,
1
),
_mk_retrieved
(
"c"
,
0.95
,
1
,
1
,
2
),
]
scope
=
select_dominant_scope
(
children
,
level
=
"subsection"
)
self
.
assertIsNotNone
(
scope
)
assert
scope
is
not
None
self
.
assertEqual
((
scope
.
chapter_index
,
scope
.
section_index
,
scope
.
subsection_index
),
(
1
,
1
,
1
))
def
test_select_dominant_scope_tiebreak_avg_score
(
self
)
->
None
:
children
=
[
_mk_retrieved
(
"a"
,
0.7
,
1
,
1
,
1
),
_mk_retrieved
(
"b"
,
0.8
,
1
,
1
,
2
),
]
scope
=
select_dominant_scope
(
children
,
level
=
"subsection"
)
self
.
assertIsNotNone
(
scope
)
assert
scope
is
not
None
self
.
assertEqual
((
scope
.
chapter_index
,
scope
.
section_index
,
scope
.
subsection_index
),
(
1
,
1
,
2
))
def
test_select_dominant_scope_tiebreak_lexicographic
(
self
)
->
None
:
children
=
[
_mk_retrieved
(
"a"
,
0.8
,
2
,
1
,
1
),
_mk_retrieved
(
"b"
,
0.8
,
1
,
2
,
3
),
]
scope
=
select_dominant_scope
(
children
,
level
=
"subsection"
)
self
.
assertIsNotNone
(
scope
)
assert
scope
is
not
None
self
.
assertEqual
((
scope
.
chapter_index
,
scope
.
section_index
,
scope
.
subsection_index
),
(
1
,
2
,
3
))
def
test_merge_retrieval_groups_dedup_max_score_and_trim_children
(
self
)
->
None
:
groups
=
{
"children_direct"
:
[
_mk_retrieved
(
"u1"
,
0.5
,
1
,
1
,
1
),
_mk_retrieved
(
"u2"
,
0.7
,
1
,
1
,
1
),
],
"children_expanded"
:
[
_mk_retrieved
(
"u1"
,
0.9
,
1
,
1
,
1
),
_mk_retrieved
(
"u3"
,
0.6
,
1
,
1
,
1
),
],
"chapters"
:
[],
"subsections"
:
[],
"sections"
:
[],
"neighbors"
:
[
_mk_retrieved
(
"u2"
,
0.1
,
1
,
1
,
1
)],
}
merged
=
merge_retrieval_groups
(
groups
,
k
=
2
)
self
.
assertEqual
(
sorted
(
item
.
uid
for
item
in
merged
[
"children_direct"
]),
[
"u1"
,
"u2"
])
score_u1
=
[
item
.
score
for
item
in
merged
[
"children_direct"
]
if
item
.
uid
==
"u1"
][
0
]
self
.
assertEqual
(
score_u1
,
0.9
)
self
.
assertEqual
(
merged
[
"children_expanded"
],
[])
self
.
assertEqual
(
merged
[
"neighbors"
],
[])
def
test_expand_neighbor_children_returns_empty_for_zero_expand
(
self
)
->
None
:
children
=
[
_mk_retrieved
(
"u1"
,
0.8
,
1
,
1
,
1
,
child_index
=
3
)]
result
=
expand_neighbor_children
(
"postgresql://unused"
,
children
,
neighbor_expand
=
0
)
self
.
assertEqual
(
result
,
[])
if
__name__
==
"__main__"
:
unittest
.
main
()
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment