@@ -151,19 +151,37 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
151151 }
152152
153153 const tagSlotMapping : Record < string , string > = { }
154+ const newTagSlotMapping : Record < string , string > = { }
154155
155156 if ( connectorConfig . tagDefinitions ?. length ) {
156157 const disabledIds = new Set ( ( sourceConfig . disabledTagIds as string [ ] | undefined ) ?? [ ] )
157158 const enabledDefs = connectorConfig . tagDefinitions . filter ( ( td ) => ! disabledIds . has ( td . id ) )
158159
159160 const existingDefs = await db
160- . select ( { tagSlot : knowledgeBaseTagDefinitions . tagSlot } )
161+ . select ( {
162+ tagSlot : knowledgeBaseTagDefinitions . tagSlot ,
163+ displayName : knowledgeBaseTagDefinitions . displayName ,
164+ } )
161165 . from ( knowledgeBaseTagDefinitions )
162166 . where ( eq ( knowledgeBaseTagDefinitions . knowledgeBaseId , knowledgeBaseId ) )
163167
164168 const usedSlots = new Set < string > ( existingDefs . map ( ( d ) => d . tagSlot ) )
165- const { mapping, skipped : skippedTags } = allocateTagSlots ( enabledDefs , usedSlots )
169+ const existingByName = new Map ( existingDefs . map ( ( d ) => [ d . displayName , d . tagSlot ] ) )
170+
171+ /** Reuse existing tag definitions that match by display name */
172+ const defsNeedingSlots : typeof enabledDefs = [ ]
173+ for ( const td of enabledDefs ) {
174+ const existingSlot = existingByName . get ( td . displayName )
175+ if ( existingSlot ) {
176+ tagSlotMapping [ td . id ] = existingSlot
177+ } else {
178+ defsNeedingSlots . push ( td )
179+ }
180+ }
181+
182+ const { mapping, skipped : skippedTags } = allocateTagSlots ( defsNeedingSlots , usedSlots )
166183 Object . assign ( tagSlotMapping , mapping )
184+ Object . assign ( newTagSlotMapping , mapping )
167185
168186 for ( const name of skippedTags ) {
169187 logger . warn ( `[${ requestId } ] No available slots for "${ name } "` )
@@ -197,7 +215,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
197215 throw new Error ( 'Knowledge base not found' )
198216 }
199217
200- for ( const [ semanticId , slot ] of Object . entries ( tagSlotMapping ) ) {
218+ for ( const [ semanticId , slot ] of Object . entries ( newTagSlotMapping ) ) {
201219 const td = connectorConfig . tagDefinitions ! . find ( ( d ) => d . id === semanticId ) !
202220 await createTagDefinition (
203221 {
0 commit comments