service/recall/context_item_recall.go (49 lines of code) (raw):
package recall
import (
"fmt"
"time"
"github.com/alibaba/pairec/v2/context"
"github.com/alibaba/pairec/v2/log"
"github.com/alibaba/pairec/v2/module"
"github.com/alibaba/pairec/v2/recconf"
"github.com/alibaba/pairec/v2/utils"
)
type ContextItemRecall struct {
*BaseRecall
}
func NewContextItemRecall(config recconf.RecallConfig) *ContextItemRecall {
recall := &ContextItemRecall{
BaseRecall: NewBaseRecall(config),
}
return recall
}
func (r *ContextItemRecall) GetCandidateItems(user *module.User, context *context.RecommendContext) (ret []*module.Item) {
start := time.Now()
if context.GetParameter("item_list") == nil {
return
}
if item_list, ok := context.GetParameter("item_list").([]map[string]any); ok {
ret = make([]*module.Item, 0, len(item_list))
for _, itemData := range item_list {
itemId := itemData["item_id"]
itemIdStr := utils.ToString(itemId, "")
if itemIdStr == "" {
continue
}
item := module.NewItem(itemIdStr)
item.RetrieveId = r.modelName
for k, v := range itemData {
if k == "item_id" {
continue
} else if k == "score" {
item.Score = utils.ToFloat(v, 0)
} else {
item.AddProperty(k, v)
}
}
ret = append(ret, item)
}
}
log.Info(fmt.Sprintf("requestId=%s\tmodule=ContextItemRecall\tname=%s\tcount=%d\tcost=%d", context.RecommendId, r.modelName, len(ret), utils.CostTime(start)))
return
}