From fce631cc871f4e6013c3f4f473956028f564cbd3 Mon Sep 17 00:00:00 2001 From: sunanzhi Date: Fri, 7 Mar 2025 20:08:56 +0800 Subject: [PATCH] fix: resolve duplicate linked list data in model caused by updating vendor --- ai-provider/model-runtime/provider.go | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/ai-provider/model-runtime/provider.go b/ai-provider/model-runtime/provider.go index 38023a71..76709511 100644 --- a/ai-provider/model-runtime/provider.go +++ b/ai-provider/model-runtime/provider.go @@ -278,6 +278,7 @@ func (p *Provider) Logo() string { } func (r *ModelRegistry) addModel(m IModel, isDefault bool) { + _, exist := r.models.Get(m.ID()) r.models.Set(m.ID(), m) // get lock @@ -285,20 +286,23 @@ func (r *ModelRegistry) addModel(m IModel, isDefault bool) { shard.Lock() defer shard.Unlock() - // create model node - node := &modelNode{ - model: m, - typeKey: m.ModelType(), + if exist { + if node, exist := r.reverseMap[m.ID()]; exist { + node.model = m + } + } else { + node := &modelNode{ + model: m, + typeKey: m.ModelType(), + } + if head := r.typeIndex[m.ModelType()]; head != nil { + node.next = head + head.prev = node + } + r.typeIndex[m.ModelType()] = node + r.reverseMap[m.ID()] = node } - // update index - if head := r.typeIndex[m.ModelType()]; head != nil { - node.next = head - head.prev = node - } - r.typeIndex[m.ModelType()] = node - r.reverseMap[m.ID()] = node - // default model if isDefault { r.defaultModels.Set(m.ModelType(), m)