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
33972126
Commit
33972126
authored
Jan 28, 2026
by
Kantz
Browse files
anpassung des Orchestrator Workflows
parent
13e707fe
Changes
1
Hide whitespace changes
Inline
Side-by-side
math-tutor/backend/app/deterministic_services/orchestrator.py
View file @
33972126
...
...
@@ -24,13 +24,26 @@ def _bootstrap_context(sheet: dict, query_text: str, tool_log: list[dict]) -> No
)
_append_tool_log
(
tool_log
,
"sympy_solve"
,
math_request
,
solution
)
def
_extract_user_messages
(
messages
:
list
[
dict
])
->
list
[
str
]:
"""
Extrahiert alle Inhalte von Messages mit der Rolle 'user' und gibt sie als Liste von Strings zurück.
Der letzte user-Content wird als letztes Element in der Liste enthalten sein.
"""
user_contents
=
[]
for
message
in
messages
:
if
message
.
get
(
"role"
)
==
"user"
:
content
=
message
.
get
(
"content"
,
""
)
if
content
:
# Nur hinzufügen, wenn Inhalt vorhanden ist
user_contents
.
append
(
content
)
return
user_contents
def
run_chat
(
messages
:
list
[
dict
],
draft
:
str
|
None
=
None
)
->
dict
:
# Input-Fehlerbehandlung
if
not
messages
:
raise
ValueError
(
"messages required"
)
last_user
=
n
ext
((
m
for
m
in
reversed
(
messages
)
if
m
.
get
(
"role"
)
==
"user"
),
None
)
last_user
=
_
ext
ract_user_messages
(
messages
)[
-
1
]
if
_extract_user_messages
(
messages
)
else
None
if
not
last_user
:
raise
ValueError
(
"last user message required"
)
...
...
@@ -45,25 +58,27 @@ def run_chat(messages: list[dict], draft: str | None = None) -> dict:
tool_log
:
list
[
dict
]
=
[]
if
new_chat
or
not
sheet
.
get
(
"initialized"
):
_bootstrap_context
(
sheet
,
last_user
.
get
(
"content"
,
""
)
,
tool_log
)
_bootstrap_context
(
sheet
,
last_user
,
tool_log
)
sheet
[
"initialized"
]
=
True
history_text
=
context_store
.
format_history
(
messages
)
sheet_text
=
context_store
.
format_sheet
(
sheet
)
llm_solution
=
solver_LLM
.
solve_question
(
last_user
.
get
(
"content"
,
""
),
sheet_text
)
_append_tool_log
(
tool_log
,
"LLM_Solution"
,
last_user
.
get
(
"content"
,
""
),
llm_solution
)
context_store
.
add_LLM_solution
(
sheet
,
llm_solution
)
decision
=
decision_LLM
.
needs_more_context
(
history_text
,
sheet_text
)
_append_tool_log
(
tool_log
,
"decision"
,
sheet_text
,
decision
)
context_store
.
add_decision
(
sheet
,
decision
)
if
decision
.
get
(
"needs_more_context"
):
_bootstrap_context
(
sheet
,
last_user
.
get
(
"content"
,
""
),
tool_log
)
sheet_text
=
context_store
.
format_sheet
(
sheet
)
if
new_chat
:
llm_solution
=
solver_LLM
.
solve_question
(
last_user
,
sheet_text
)
_append_tool_log
(
tool_log
,
"LLM_Solution"
,
{
"question"
:
last_user
,
"sheet"
:
sheet_text
},
llm_solution
)
context_store
.
add_LLM_solution
(
sheet
,
llm_solution
)
else
:
decision
=
decision_LLM
.
needs_more_context
(
history_text
,
sheet_text
)
_append_tool_log
(
tool_log
,
"decision"
,
{
"sheet"
:
sheet_text
},
decision
)
context_store
.
add_decision
(
sheet
,
decision
)
if
decision
.
get
(
"needs_more_context"
):
_bootstrap_context
(
sheet
,
(
"
\n
"
).
join
(
_extract_user_messages
(
messages
)),
tool_log
)
sheet_text
=
context_store
.
format_sheet
(
sheet
)
# Hinweis und Ausgaben generierung
hint_args
=
{
"task"
:
last_user
.
get
(
"content"
,
""
)
,
"task"
:
_extract_user_messages
(
messages
)[
0
]
,
"solution"
:
context_store
.
first_math_solution
(
sheet
),
"history"
:
history_text
,
"retrival"
:
context_store
.
get_retrival
(
sheet
),
...
...
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