|
1 | 1 | import { flights, type Flight } from "./data/flights"; |
2 | 2 |
|
3 | | -const registeredTools = { |
4 | | - listFlights: false, |
5 | | - setFilters: false, |
6 | | - resetFilters: false, |
7 | | - searchFlights: false, |
| 3 | +const registeredTools: Record<string, AbortController | null> = { |
| 4 | + searchTools: null, |
| 5 | + resultsTools: null, |
8 | 6 | }; |
9 | 7 |
|
10 | 8 | function dispatchAndWait( |
@@ -306,54 +304,50 @@ export const searchFlightsTool = { |
306 | 304 | export function registerFlightSearchTools() { |
307 | 305 | const modelContext = window.navigator.modelContext; |
308 | 306 | if (modelContext) { |
309 | | - modelContext.registerTool(searchFlightsTool); |
| 307 | + if (!registeredTools.searchTools) { |
| 308 | + registeredTools.searchTools = new AbortController(); |
| 309 | + modelContext.registerTool(searchFlightsTool, { signal: registeredTools.searchTools.signal }); |
| 310 | + } |
310 | 311 | } |
311 | 312 | } |
312 | 313 |
|
313 | 314 | export function unregisterFlightSearchTools() { |
314 | 315 | const modelContext = window.navigator.modelContext; |
315 | 316 | if (modelContext) { |
316 | | - modelContext.unregisterTool(searchFlightsTool.name); |
| 317 | + modelContext.unregisterTool?.(searchFlightsTool.name); |
| 318 | + if (registeredTools.searchTools) { |
| 319 | + registeredTools.searchTools.abort(); |
| 320 | + registeredTools.searchTools = null; |
| 321 | + } |
317 | 322 | } |
318 | 323 | } |
319 | 324 |
|
320 | 325 | export function registerFlightResultsTools() { |
321 | 326 | const modelContext = window.navigator.modelContext; |
322 | 327 |
|
323 | 328 | if (modelContext) { |
324 | | - if (!registeredTools.listFlights) { |
325 | | - modelContext.registerTool(listFlightsTool); |
326 | | - registeredTools.listFlights = true; |
327 | | - } |
328 | | - |
329 | | - if (!registeredTools.setFilters) { |
330 | | - modelContext.registerTool(setFiltersTool); |
331 | | - registeredTools.setFilters = true; |
332 | | - } |
333 | | - |
334 | | - if (!registeredTools.resetFilters) { |
335 | | - modelContext.registerTool(resetFiltersTool); |
336 | | - registeredTools.resetFilters = true; |
337 | | - } |
338 | | - |
339 | | - if (!registeredTools.searchFlights) { |
340 | | - modelContext.registerTool(searchFlightsTool); |
341 | | - registeredTools.searchFlights = true; |
| 329 | + if (!registeredTools.resultsTools) { |
| 330 | + registeredTools.resultsTools = new AbortController(); |
| 331 | + const options = { signal: registeredTools.resultsTools.signal }; |
| 332 | + modelContext.registerTool(listFlightsTool, options); |
| 333 | + modelContext.registerTool(setFiltersTool, options); |
| 334 | + modelContext.registerTool(resetFiltersTool, options); |
| 335 | + modelContext.registerTool(searchFlightsTool, options); |
342 | 336 | } |
343 | 337 | } |
344 | 338 | } |
345 | 339 |
|
346 | 340 | export function unregisterFlightResultsTools() { |
347 | 341 | const modelContext = window.navigator.modelContext; |
348 | 342 | if (modelContext) { |
349 | | - modelContext.unregisterTool(listFlightsTool.name); |
350 | | - modelContext.unregisterTool(setFiltersTool.name); |
351 | | - modelContext.unregisterTool(resetFiltersTool.name); |
352 | | - modelContext.unregisterTool(searchFlightsTool.name); |
| 343 | + modelContext.unregisterTool?.(listFlightsTool.name); |
| 344 | + modelContext.unregisterTool?.(setFiltersTool.name); |
| 345 | + modelContext.unregisterTool?.(resetFiltersTool.name); |
| 346 | + modelContext.unregisterTool?.(searchFlightsTool.name); |
353 | 347 |
|
354 | | - registeredTools.listFlights = false; |
355 | | - registeredTools.setFilters = false; |
356 | | - registeredTools.resetFilters = false; |
357 | | - registeredTools.searchFlights = false; |
| 348 | + if (registeredTools.resultsTools) { |
| 349 | + registeredTools.resultsTools.abort(); |
| 350 | + registeredTools.resultsTools = null; |
| 351 | + } |
358 | 352 | } |
359 | 353 | } |
0 commit comments