(provider, index, providerIdSet)
| 934 | } |
| 935 | |
| 936 | function normalizeCustomProviderForStorage(provider, index, providerIdSet) { |
| 937 | if (!provider || typeof provider !== 'object') return null |
| 938 | const originalRawId = normalizeText(provider.id) |
| 939 | const originalId = normalizeProviderId(provider.id) |
| 940 | const sourceProviderOriginalRawId = normalizeText(provider.sourceProviderId) |
| 941 | const sourceProviderId = normalizeProviderId(provider.sourceProviderId) |
| 942 | const preferredId = originalId || `custom-provider-${index + 1}` |
| 943 | const id = ensureUniqueProviderId(providerIdSet, preferredId) |
| 944 | providerIdSet.add(id) |
| 945 | return { |
| 946 | originalId, |
| 947 | originalRawId, |
| 948 | sourceProviderOriginalId: sourceProviderId, |
| 949 | sourceProviderOriginalRawId, |
| 950 | provider: { |
| 951 | id, |
| 952 | name: normalizeText(provider.name) || `Custom Provider ${index + 1}`, |
| 953 | baseUrl: normalizeText(provider.baseUrl), |
| 954 | chatCompletionsPath: normalizeText(provider.chatCompletionsPath) || '/v1/chat/completions', |
| 955 | completionsPath: normalizeText(provider.completionsPath) || '/v1/completions', |
| 956 | chatCompletionsUrl: normalizeText(provider.chatCompletionsUrl), |
| 957 | completionsUrl: normalizeText(provider.completionsUrl), |
| 958 | enabled: provider.enabled !== false, |
| 959 | allowLegacyResponseField: provider.allowLegacyResponseField !== false, |
| 960 | ...(sourceProviderId ? { sourceProviderId } : {}), |
| 961 | }, |
| 962 | } |
| 963 | } |
| 964 | |
| 965 | function migrateUserConfig(options) { |
| 966 | const migrated = { ...options } |
no test coverage detected