| 1271 | } |
| 1272 | |
| 1273 | function modelSuggestions(provider: Info | undefined, modelID: ModelV2.ID, enableExperimentalModels: boolean) { |
| 1274 | const available = provider |
| 1275 | ? Object.keys(provider.models).filter((id) => { |
| 1276 | const model = provider.models[id] |
| 1277 | if (model.status === "deprecated") return false |
| 1278 | if (model.status === "alpha" && !enableExperimentalModels) return false |
| 1279 | return true |
| 1280 | }) |
| 1281 | : [] |
| 1282 | const fuzzy = fuzzysort.go(modelID, available, { limit: 3, threshold: -10000 }).map((m) => m.target) |
| 1283 | if (fuzzy.length) return fuzzy |
| 1284 | const query = modelID |
| 1285 | .toLowerCase() |
| 1286 | .split(/[^a-z0-9]+/) |
| 1287 | .filter((part) => part.length > 1) |
| 1288 | return sortBy( |
| 1289 | available |
| 1290 | .map((id) => ({ |
| 1291 | id, |
| 1292 | score: query.filter((part) => id.toLowerCase().includes(part)).length, |
| 1293 | })) |
| 1294 | .filter((item) => item.score > 0), |
| 1295 | [(item) => item.score, "desc"], |
| 1296 | [(item) => item.id, "asc"], |
| 1297 | ) |
| 1298 | .slice(0, 3) |
| 1299 | .map((item) => item.id) |
| 1300 | } |
| 1301 | |
| 1302 | const layer = Layer.effect( |
| 1303 | Service, |