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
3d666534
Commit
3d666534
authored
Feb 05, 2026
by
Kantz
Browse files
weitere anpassungen des Retrivals
parent
5d1db923
Changes
3
Hide whitespace changes
Inline
Side-by-side
math-tutor/backend/app/deterministic_services/context_store.py
View file @
3d666534
...
@@ -7,6 +7,8 @@ from datetime import datetime
...
@@ -7,6 +7,8 @@ from datetime import datetime
from
threading
import
Lock
from
threading
import
Lock
from
typing
import
Any
from
typing
import
Any
from
app.deterministic_services
import
Source
_CACHE
:
dict
[
str
,
dict
[
str
,
Any
]]
=
{}
_CACHE
:
dict
[
str
,
dict
[
str
,
Any
]]
=
{}
_LOCK
=
Lock
()
_LOCK
=
Lock
()
...
@@ -74,10 +76,9 @@ def update_history(sheet: dict[str, Any], messages: list[dict]) -> None:
...
@@ -74,10 +76,9 @@ def update_history(sheet: dict[str, Any], messages: list[dict]) -> None:
def
add_retrieval_context
(
def
add_retrieval_context
(
sheet
:
dict
[
str
,
Any
],
sheet
:
dict
[
str
,
Any
],
query
:
str
,
query
:
str
,
context
:
str
,
sources
:
list
[
Source
],
sources
:
list
[
dict
],
)
->
None
:
)
->
None
:
retrieval_entry
=
{
"query"
:
query
,
"
context"
:
context
,
"
source
s"
:
sources
}
retrieval_entry
=
{
"query"
:
query
,
"
sources"
:
[
source
.
to_string
()
for
source
in
sources
]
}
sheet
[
"retrieval_contexts"
].
append
(
retrieval_entry
)
sheet
[
"retrieval_contexts"
].
append
(
retrieval_entry
)
sheet
[
"updated_at"
]
=
_utc_now
()
sheet
[
"updated_at"
]
=
_utc_now
()
...
@@ -85,14 +86,12 @@ def add_retrieval_context(
...
@@ -85,14 +86,12 @@ def add_retrieval_context(
def
update_retrieval_context
(
def
update_retrieval_context
(
sheet
:
dict
[
str
,
Any
],
sheet
:
dict
[
str
,
Any
],
query
:
str
,
query
:
str
,
context
:
str
,
sources
:
list
[
Source
],
sources
:
list
[
dict
],
)
->
None
:
)
->
None
:
retrievals
=
sheet
.
get
(
"retrieval_contexts"
,
[])
retrievals
=
sheet
.
get
(
"retrieval_contexts"
,
[])
if
retrievals
:
if
retrievals
:
latest_retrieval
=
retrievals
[
-
1
]
latest_retrieval
=
retrievals
[
-
1
]
latest_retrieval
[
"context"
]
=
context
latest_retrieval
[
"sources"
]
=
[
source
.
to_string
()
for
source
in
sources
]
latest_retrieval
[
"sources"
]
=
sources
latest_retrieval
[
"query"
]
=
query
latest_retrieval
[
"query"
]
=
query
sheet
[
"updated_at"
]
=
_utc_now
()
sheet
[
"updated_at"
]
=
_utc_now
()
...
...
math-tutor/backend/app/deterministic_services/orchestrator.py
View file @
3d666534
...
@@ -13,15 +13,15 @@ def _append_tool_log(tool_log: list[dict], name: str, args: dict, response: obje
...
@@ -13,15 +13,15 @@ def _append_tool_log(tool_log: list[dict], name: str, args: dict, response: obje
def
_bootstrap_context
(
sheet
:
dict
,
query_text
:
str
,
tool_log
:
list
[
dict
])
->
None
:
def
_bootstrap_context
(
sheet
:
dict
,
query_text
:
str
,
tool_log
:
list
[
dict
])
->
None
:
# Erstelle einen neuen Retrieval-Block oder aktualisiere den bestehenden
# Erstelle einen neuen Retrieval-Block oder aktualisiere den bestehenden
context
,
sources
=
retrieval_service
.
retrieve_context
(
query_text
=
query_text
)
sources
=
retrieval_service
.
retrieve_context
(
query_text
=
query_text
)
retrievals
=
sheet
.
get
(
"retrieval_contexts"
,
[])
retrievals
=
sheet
.
get
(
"retrieval_contexts"
,
[])
if
retrievals
:
if
retrievals
:
context_store
.
update_retrieval_context
(
sheet
,
query_text
,
context
,
sources
)
context_store
.
update_retrieval_context
(
sheet
,
query_text
,
sources
)
_append_tool_log
(
tool_log
,
"update_retrieve_context"
,
{
"query"
:
query_text
},
{
"
context"
:
context
,
"
source
s"
:
sources
})
_append_tool_log
(
tool_log
,
"update_retrieve_context"
,
{
"query"
:
query_text
},
{
"
sources"
:
[
source
.
to_string
()
for
source
in
sources
]
})
else
:
else
:
context_store
.
add_retrieval_context
(
sheet
,
query_text
,
context
,
sources
)
context_store
.
add_retrieval_context
(
sheet
,
query_text
,
sources
)
_append_tool_log
(
tool_log
,
"retrieve_context"
,
{
"query"
:
query_text
},
{
"
context"
:
context
,
"
source
s"
:
sources
})
_append_tool_log
(
tool_log
,
"retrieve_context"
,
{
"query"
:
query_text
},
{
"
sources"
:
[
source
.
to_string
()
for
source
in
sources
]
})
math_request
=
math_intent_LLM
.
extract_math_request
(
query_text
)
math_request
=
math_intent_LLM
.
extract_math_request
(
query_text
)
if
math_request
:
if
math_request
:
...
...
math-tutor/backend/app/deterministic_services/retrieval_service.py
View file @
3d666534
from
__future__
import
annotations
from
__future__
import
annotations
from
typing
import
List
from
collections
import
defaultdict
from
typing
import
Dict
,
List
from
app.deterministic_services
import
Source
from
app
import
config
from
app
import
config
from
app.deterministic_services.embeddings
import
OpenAILikeEmbeddings
from
app.deterministic_services.embeddings
import
OpenAILikeEmbeddings
from
app.deterministic_services
import
vector_store
from
app.deterministic_services
import
vector_store
CONTEXT_LIMITS
=
{
"direct"
:
4
,
"indirect"
:
6
,
"subsection"
:
2
,
"section"
:
1
,
}
def
_get_embedder
()
->
OpenAILikeEmbeddings
:
def
_get_embedder
()
->
OpenAILikeEmbeddings
:
settings
=
config
.
get_embedding_settings
()
settings
=
config
.
get_embedding_settings
()
return
OpenAILikeEmbeddings
(
return
OpenAILikeEmbeddings
(
...
@@ -24,73 +18,14 @@ def _get_embedder() -> OpenAILikeEmbeddings:
...
@@ -24,73 +18,14 @@ def _get_embedder() -> OpenAILikeEmbeddings:
)
)
def
_format_ref
(
doc
:
vector_store
.
Retrieved
)
->
str
:
def
retrieve_context
(
query_text
:
str
,
pg_url
:
str
|
None
=
None
)
->
List
[
Source
]:
meta
=
doc
.
metadata
sec
=
meta
.
get
(
"section_index"
)
sub
=
meta
.
get
(
"subsection_index"
)
child
=
meta
.
get
(
"child_index"
)
ref
=
[]
if
sec
is
not
None
:
ref
.
append
(
f
"s
{
sec
}
"
)
if
sub
is
not
None
:
ref
.
append
(
f
"ss
{
sub
}
"
)
if
child
is
not
None
:
ref
.
append
(
f
"c
{
child
}
"
)
ref_id
=
"/"
.
join
(
ref
)
if
ref
else
"unknown"
doc_type
=
meta
.
get
(
"type"
)
or
doc
.
doc_type
title
=
(
meta
.
get
(
"title"
)
or
meta
.
get
(
"subsection_title"
)
or
meta
.
get
(
"section_title"
)
or
meta
.
get
(
"path"
)
or
"Untitled"
)
return
f
"[
{
ref_id
}
|
{
doc_type
}
|
{
title
}
]"
def
_append_group
(
label
:
str
,
items
:
List
[
vector_store
.
Retrieved
],
limit
:
int
,
blocks
:
List
[
str
],
sources
:
List
[
dict
],
)
->
None
:
if
not
items
:
return
for
doc
in
items
[:
limit
]:
ref
=
_format_ref
(
doc
)
blocks
.
append
(
f
"
{
label
}
{
ref
}
\n
{
doc
.
markdown
}
"
)
sources
.
append
({
"ref"
:
ref
,
"context"
:
doc
.
markdown
,
"score"
:
doc
.
score
,
"label"
:
label
})
def
build_context
(
result
:
dict
)
->
tuple
[
str
,
List
[
dict
]]:
blocks
:
List
[
str
]
=
[]
sources
:
List
[
dict
]
=
[]
_append_group
(
"DIRECT"
,
result
.
get
(
"children_direct"
,
[]),
CONTEXT_LIMITS
[
"direct"
],
blocks
,
sources
)
_append_group
(
"INDIRECT"
,
result
.
get
(
"children_expanded"
,
[]),
CONTEXT_LIMITS
[
"indirect"
],
blocks
,
sources
)
_append_group
(
"SUBSECTION"
,
result
.
get
(
"subsections"
,
[]),
CONTEXT_LIMITS
[
"subsection"
],
blocks
,
sources
)
_append_group
(
"SECTION"
,
result
.
get
(
"sections"
,
[]),
CONTEXT_LIMITS
[
"section"
],
blocks
,
sources
)
if
not
blocks
:
return
"KONTEXT: (leer)"
,
sources
return
"KONTEXT:
\n
"
+
"
\n\n
"
.
join
(
blocks
),
sources
def
retrieve_context
(
query_text
:
str
,
pg_url
:
str
|
None
=
None
)
->
tuple
[
str
,
List
[
dict
]]:
url
=
pg_url
or
config
.
get_postgres_url
()
url
=
pg_url
or
config
.
get_postgres_url
()
embedder
=
_get_embedder
()
embedder
=
_get_embedder
()
retrieval
=
vector_store
.
retrieve
(
sources
=
vector_store
.
retrieve
(
pg_url
=
url
,
pg_url
=
url
,
embedder
=
embedder
,
embedder
=
embedder
,
query
=
query_text
,
query
=
query_text
,
k
=
8
,
k
=
8
,
expand_links
=
True
,
expand_links
=
True
,
)
)
return
build_context
(
retrieval
)
return
sources
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