list read-back asks the seeds; add and clear keep their tables (V-522)
internal/router/list.go was the last file on the sweep, and the answer is a split rather than one mechanism. What the four paths need is different, and the V-529 comment in the file already had half of the argument. Reading a list back needs one bit — is this about the list — so topicList joins the subjects in cmd/mavend/topics.go and queryList calls turnIsAbout. listQueryPrefixes stays as the offline floor. Which list he named is a noun in the dictionary either way, through the new router.ListNamedIn, which scans the whole utterance: the seeds claim a read-back without eating a prefix, so "что мне нужно в аптеке" has nothing for takeListTag to read the front of. The other three keep their phrase tables, and the header says why. Add and remove have to know WHERE the item starts, and a cosine over a whole utterance does not say which byte the milk begins at. Clear deletes the list, so a false claim loses rows he cannot get back — that is not the trade a margin makes. Measured on TestONNXTopics, four held-out cases added: 27/27, no case regressed. Two existing margins moved by under a hundredth because the new seeds became the runner-up, both still far clear of topicMargin.
This commit is contained in:
@@ -95,6 +95,12 @@ func (h *reactiveHandler) removeListItem(ctx context.Context, cap router.ListCap
|
||||
return "", false
|
||||
}
|
||||
|
||||
// listFloor — the keyword test behind topicList, in the shape turnIsAbout takes.
|
||||
func listFloor(u string) bool {
|
||||
_, ok := router.ParseListQuery(u)
|
||||
return ok
|
||||
}
|
||||
|
||||
// queryList — "что в списке покупок?", "что мне купить?".
|
||||
//
|
||||
// A query source, so it sits in querySources and either claims the turn or
|
||||
@@ -102,10 +108,15 @@ func (h *reactiveHandler) removeListItem(ctx context.Context, cap router.ListCap
|
||||
// source is: the notes pass would otherwise answer a list question with
|
||||
// whatever note is nearest.
|
||||
func (h *reactiveHandler) queryList(ctx context.Context, t *queryTurn) (string, bool) {
|
||||
list, ok := router.ParseListQuery(t.dec.Utterance)
|
||||
if !ok || h.dataStore == nil {
|
||||
if h.dataStore == nil {
|
||||
return "", false
|
||||
}
|
||||
// The seeds decide the subject and listQueryPrefixes is the floor behind
|
||||
// them (V-522). Which list he named is a noun lookup either way.
|
||||
if !h.turnIsAbout(ctx, t, topicList, listFloor) {
|
||||
return "", false
|
||||
}
|
||||
list := router.ListNamedIn(t.dec.Utterance)
|
||||
items, err := h.dataStore.ListItems(ctx, list, "")
|
||||
if err != nil {
|
||||
log.Printf("voice: list items: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user