A phrase list missed one word order, and the assistant answered a log question with a command that re-runs the job
This commit is contained in:
@@ -199,11 +199,23 @@ if ($can('retrieve')) {
|
|||||||
// — nothing had failed, so nothing in the question said failure. It retrieved the documentation
|
// — nothing had failed, so nothing in the question said failure. It retrieved the documentation
|
||||||
// on where logs live and answered with directions to a page the operator already had open. The
|
// on where logs live and answered with directions to a page the operator already had open. The
|
||||||
// question is about a run that happened, so the run itself has to be in context.
|
// question is about a run that happened, so the run itself has to be in context.
|
||||||
$runOutcome = $can('run_evidence') && (bool)preg_match(
|
// Which script the question names is resolved first, and carries most of the signal: naming
|
||||||
'/\b(how did|how.d|did .{0,24}\b(run|go|finish|complete)|last run|latest run|last night|'
|
// something that has a log is a far stronger indicator than any turn of phrase. Wording then only
|
||||||
. 'go last|went last|how long did|run record|rundown|summar(y|ise|ize)|recap)\b/i',
|
// has to separate "how did it go" from "what does it do", which is a much smaller job than
|
||||||
$question
|
// recognising every way an operator might ask how a run went.
|
||||||
);
|
//
|
||||||
|
// It was a phrase list alone to begin with, and it missed "see how the run went" — one word order
|
||||||
|
// away from "went last", which it did have. Every phrase list has that failure somewhere and
|
||||||
|
// lengthening it does not end it; requiring a named target and then accepting weak evidence does.
|
||||||
|
$namedTarget = $can('run_evidence') ? vv_ai_resolve_run_target($question) : '';
|
||||||
|
|
||||||
|
$runOutcome = $namedTarget !== ''
|
||||||
|
// "What is the daily orchestrator" names a target and is not about any particular run.
|
||||||
|
&& !vv_ai_is_definitional($question)
|
||||||
|
&& (bool)preg_match(
|
||||||
|
'/\b(logs?|ran|runs?|went|go|going|gone|finish\w*|complet\w*|fail\w*|error\w*|'
|
||||||
|
. 'last night|duration|how long|rundown|summar\w*|recap|status|results?|outcome)\b/i',
|
||||||
|
$question);
|
||||||
|
|
||||||
// Permission first, need second: the capability decides whether live state may be attached at
|
// Permission first, need second: the capability decides whether live state may be attached at
|
||||||
// all, and only then does the phrasing decide whether this particular question warrants it.
|
// all, and only then does the phrasing decide whether this particular question warrants it.
|
||||||
@@ -244,7 +256,7 @@ if ($diagnostic) {
|
|||||||
// the daily orchestrator went while looking at the suggestions list is the ordinary case, not an
|
// the daily orchestrator went while looking at the suggestions list is the ordinary case, not an
|
||||||
// edge one, and requiring them to open the log first is asking them to do the lookup themselves.
|
// edge one, and requiring them to open the log first is asking them to do the lookup themselves.
|
||||||
$runTarget = ($can('scoped_log') && $scope !== '') ? $scope : '';
|
$runTarget = ($can('scoped_log') && $scope !== '') ? $scope : '';
|
||||||
if ($runTarget === '' && $runOutcome) $runTarget = vv_ai_resolve_run_target($question);
|
if ($runTarget === '' && $runOutcome) $runTarget = $namedTarget;
|
||||||
|
|
||||||
$scopedLog = null;
|
$scopedLog = null;
|
||||||
if ($runTarget !== '' && vv_ai_scope_ok($runTarget)) {
|
if ($runTarget !== '' && vv_ai_scope_ok($runTarget)) {
|
||||||
@@ -437,7 +449,19 @@ if ($profile === 'chat') {
|
|||||||
. "general knowledge. Prefer the user's own terminology.\n\n"
|
. "general knowledge. Prefer the user's own terminology.\n\n"
|
||||||
: "Answer only from this material and cite the passages inline as [1], [2]. If it "
|
: "Answer only from this material and cite the passages inline as [1], [2]. If it "
|
||||||
. "does not contain the answer, say so plainly and name what is missing — do not "
|
. "does not contain the answer, say so plainly and name what is missing — do not "
|
||||||
. "fill the gap from general knowledge. Prefer the user's own terminology.\n\n");
|
. "fill the gap from general knowledge. Prefer the user's own terminology.\n\n")
|
||||||
|
// The troubleshooting profile has had this rule from the start; the assistant never
|
||||||
|
// did, and the gap showed. Asked to look at a log, it offered a terminal command that
|
||||||
|
// re-runs the orchestrator — real flag, wrong answer, and it starts new work instead
|
||||||
|
// of reporting finished work.
|
||||||
|
. "The operator is reading this inside the Unraid WebGUI, not a terminal. Point them "
|
||||||
|
. "at the page, tab or panel that shows what they asked about, and name it. Give a "
|
||||||
|
. "shell command only when there is genuinely no control for it, and say so when you "
|
||||||
|
. "do.\n\n"
|
||||||
|
. "Never answer a question about how something WENT by telling them to run it. A "
|
||||||
|
. "dry run, a manual trigger or a test invocation reports on new work; they asked "
|
||||||
|
. "about work that already finished. If you cannot see that run, say you cannot see "
|
||||||
|
. "it and name where it is recorded.\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// The operator chose General Chat and is getting the Assistant. That has to be said in the answer
|
// The operator chose General Chat and is getting the Assistant. That has to be said in the answer
|
||||||
|
|||||||
Reference in New Issue
Block a user