@undefineds.co/xpod 0.4.11 → 0.4.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/components-ignore.json +5 -1
- package/config/notifications.json +68 -0
- package/config/xpod.base.json +9 -11
- package/dist/ai/service/AiCredentialSecret.d.ts +30 -0
- package/dist/ai/service/AiCredentialSecret.js +120 -0
- package/dist/ai/service/CredentialReaderImpl.d.ts +18 -0
- package/dist/ai/service/CredentialReaderImpl.js +81 -5
- package/dist/ai/service/CredentialReaderImpl.jsonld +42 -2
- package/dist/ai/service/EmbeddingModelPolicy.d.ts +79 -0
- package/dist/ai/service/EmbeddingModelPolicy.js +134 -0
- package/dist/ai/service/EmbeddingProviderError.js +6 -0
- package/dist/ai/service/EmbeddingServiceImpl.d.ts +13 -1
- package/dist/ai/service/EmbeddingServiceImpl.js +18 -5
- package/dist/ai/service/EmbeddingServiceImpl.jsonld +35 -0
- package/dist/ai/service/index.d.ts +2 -0
- package/dist/ai/service/index.js +2 -0
- package/dist/api/ai-gateway/connect/index.d.ts +20 -2
- package/dist/api/ai-gateway/connect/index.js +162 -16
- package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.d.ts +12 -0
- package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.js +30 -0
- package/dist/api/ai-gateway/errors.d.ts +1 -1
- package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.d.ts +11 -0
- package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.js +31 -0
- package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -3
- package/dist/api/ai-gateway/models/ProviderCustomModelsService.d.ts +18 -0
- package/dist/api/ai-gateway/models/ProviderCustomModelsService.js +23 -0
- package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.d.ts +3 -1
- package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.js +2 -45
- package/dist/api/ai-gateway/models/ProviderModelSelectionService.d.ts +10 -0
- package/dist/api/ai-gateway/models/ProviderModelSelectionService.js +57 -20
- package/dist/api/ai-gateway/models/ProviderModelType.d.ts +28 -0
- package/dist/api/ai-gateway/models/ProviderModelType.js +34 -0
- package/dist/api/ai-gateway/models/ProviderModelsAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/models/ProviderModelsAdapter.js +3 -4
- package/dist/api/ai-gateway/models/index.d.ts +1 -0
- package/dist/api/ai-gateway/models/index.js +3 -1
- package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.d.ts +7 -0
- package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.js +9 -2
- package/dist/api/ai-gateway/providers/ModelsDevCatalog.d.ts +7 -1
- package/dist/api/ai-gateway/providers/ModelsDevCatalog.js +4 -10
- package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +107 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +244 -21
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +5 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +5 -1
- package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.d.ts +12 -4
- package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.js +11 -11
- package/dist/api/ai-gateway/routing/ModelRouter.d.ts +14 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js +43 -4
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +9 -1
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +3 -27
- package/dist/api/chatkit/pod-store.d.ts +31 -0
- package/dist/api/chatkit/pod-store.js +132 -8
- package/dist/api/container/common.js +24 -4
- package/dist/api/container/routes.js +17 -2
- package/dist/api/container/types.d.ts +3 -1
- package/dist/api/handlers/AdminHandler.d.ts +13 -0
- package/dist/api/handlers/AdminHandler.js +47 -18
- package/dist/api/handlers/AiConfigHandler.d.ts +6 -0
- package/dist/api/handlers/AiConfigHandler.js +28 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js +36 -0
- package/dist/api/runs/RdfRunContextRetriever.d.ts +14 -0
- package/dist/api/runs/RdfRunContextRetriever.js +41 -5
- package/dist/api/runtime.js +2 -1
- package/dist/cli/commands/secret.d.ts +1 -0
- package/dist/cli/commands/secret.js +25 -7
- package/dist/components/components.jsonld +3 -1
- package/dist/components/context.jsonld +53 -1
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +59 -2
- package/dist/http/SubgraphSparqlHttpHandler.js +145 -13
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +37 -0
- package/dist/identity/drizzle/EdgeNodeRepository.d.ts +0 -12
- package/dist/identity/drizzle/EdgeNodeRepository.js +5 -13
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -3
- package/dist/logging/log-file.d.ts +17 -0
- package/dist/logging/log-file.js +69 -0
- package/dist/main.js +2 -1
- package/dist/notifications/NotificationChannelSweeper.d.ts +50 -0
- package/dist/notifications/NotificationChannelSweeper.js +131 -0
- package/dist/notifications/NotificationChannelSweeper.jsonld +136 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.d.ts +25 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.js +56 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.jsonld +77 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.js +2 -0
- package/dist/runtime/Proxy.d.ts +37 -0
- package/dist/runtime/Proxy.js +88 -16
- package/dist/runtime/bootstrap.js +2 -1
- package/dist/runtime/upgrade/BunNativeUpgradeRelay.d.ts +116 -0
- package/dist/runtime/upgrade/BunNativeUpgradeRelay.js +423 -0
- package/dist/runtime/upgrade/UpgradeHandshake.d.ts +63 -0
- package/dist/runtime/upgrade/UpgradeHandshake.js +199 -0
- package/dist/runtime/upgrade/WebSocketFrames.d.ts +67 -0
- package/dist/runtime/upgrade/WebSocketFrames.js +224 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +8 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +11 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.js +27 -10
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +7 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +13 -11
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsList.js +10 -6
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.js +29 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMainHeader.js +18 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +16 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +92 -20
- package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.d.ts +35 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.js +45 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +71 -11
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.js +9 -7
- package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.d.ts +23 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.js +24 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +13 -4
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +35 -38
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.js +51 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.js +16 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.d.ts +175 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.js +133 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.js +2 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.js +13 -64
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.js +12 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.js +12 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.js +2 -1
- package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.d.ts +7 -0
- package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.js +6 -0
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +36 -5
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +52 -9
- package/node_modules/@undefineds.co/ai-connections/dist/client/normalize.js +30 -3
- package/node_modules/@undefineds.co/ai-connections/dist/client/types.d.ts +21 -1
- package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.d.ts +1 -3
- package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.js +3 -7
- package/node_modules/@undefineds.co/ai-connections/dist/client-config/index.cjs +9 -7
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +46 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +231 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +119 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collections.js +173 -0
- package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +71 -5
- package/node_modules/@undefineds.co/ai-connections/dist/controller.js +285 -16
- package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +5 -0
- package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.js +8 -3
- package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.d.ts +59 -0
- package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.js +131 -0
- package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.js +20 -0
- package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +20 -0
- package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +8 -0
- package/node_modules/@undefineds.co/ai-connections/dist/index.js +8 -0
- package/node_modules/@undefineds.co/ai-connections/dist/manifest.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.js +17 -0
- package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.cjs +68 -1
- package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.d.ts +75 -1
- package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.js +119 -0
- package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +5 -0
- package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.js +5 -0
- package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +2 -27
- package/node_modules/@undefineds.co/ai-connections/package.json +1 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +1 -1
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +2 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +150 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +2 -1
- package/node_modules/@undefineds.co/models/README.md +1 -1
- package/node_modules/@undefineds.co/models/dist/ai-config/index.d.ts +3 -3
- package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.d.ts +5 -0
- package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.js +9 -0
- package/node_modules/@undefineds.co/models/dist/ai-runtime.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/approval.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/audit.presentation.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/capture.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/chat-project.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/chat.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/control-request.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/conversation-share.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/credential.schema.d.ts +12 -0
- package/node_modules/@undefineds.co/models/dist/credential.schema.js +15 -1
- package/node_modules/@undefineds.co/models/dist/discovery/index.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/discovery/providers.json +248 -7
- package/node_modules/@undefineds.co/models/dist/discovery/types.d.ts +31 -0
- package/node_modules/@undefineds.co/models/dist/extension/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/favorite/index.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.d.ts +5 -5
- package/node_modules/@undefineds.co/models/dist/import/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/index.d.ts +73 -73
- package/node_modules/@undefineds.co/models/dist/index.js +1 -1
- package/node_modules/@undefineds.co/models/dist/input-request.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/knowledge/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/message.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/namespaces.js +5 -0
- package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.d.ts +4815 -26
- package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.js +482 -132
- package/node_modules/@undefineds.co/models/dist/schema.d.ts +4 -0
- package/node_modules/@undefineds.co/models/dist/session/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/settings/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.d.ts +5 -5
- package/node_modules/@undefineds.co/models/dist/thread.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/types/message-block.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/vocab/index.d.ts +10 -10
- package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.d.ts +1 -0
- package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.js +1 -0
- package/node_modules/@undefineds.co/models/package.json +4 -2
- package/node_modules/@undefineds.co/pod-collections/README.md +71 -0
- package/node_modules/@undefineds.co/pod-collections/dist/diff.d.ts +85 -0
- package/node_modules/@undefineds.co/pod-collections/dist/diff.js +166 -0
- package/node_modules/@undefineds.co/pod-collections/dist/feed.d.ts +17 -0
- package/node_modules/@undefineds.co/pod-collections/dist/feed.js +27 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.cjs +1042 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.d.ts +37 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.js +89 -0
- package/node_modules/@undefineds.co/pod-collections/dist/layout.d.ts +75 -0
- package/node_modules/@undefineds.co/pod-collections/dist/layout.js +173 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.d.ts +78 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.js +287 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mutations.d.ts +83 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mutations.js +273 -0
- package/node_modules/@undefineds.co/pod-collections/dist/react.d.ts +21 -0
- package/node_modules/@undefineds.co/pod-collections/dist/react.js +22 -0
- package/node_modules/@undefineds.co/pod-collections/dist/read.d.ts +65 -0
- package/node_modules/@undefineds.co/pod-collections/dist/read.js +31 -0
- package/node_modules/@undefineds.co/pod-collections/dist/sync.d.ts +66 -0
- package/node_modules/@undefineds.co/pod-collections/dist/sync.js +260 -0
- package/node_modules/@undefineds.co/pod-collections/dist/types.d.ts +155 -0
- package/node_modules/@undefineds.co/pod-collections/dist/types.js +9 -0
- package/node_modules/@undefineds.co/pod-collections/package.json +42 -0
- package/package.json +15 -7
- package/static/app/assets/main.css +1 -1
- package/static/auth-callback/assets/AiConfigContext-DnQs1ZpW.js +1 -0
- package/static/auth-callback/assets/AiConfigPage-DOtvlxH0.js +1 -0
- package/static/auth-callback/assets/DocumentProcessingPanel-BS2voQgL.js +1 -0
- package/static/auth-callback/assets/IndexLifecyclePanel-Cvt0cJtN.js +1 -0
- package/static/auth-callback/assets/{IndexSubjectPanel-BbUqop4b.js → IndexSubjectPanel-Dhf01GqF.js} +1 -1
- package/static/auth-callback/assets/ModelAssignmentsPanel-BJutWaAF.js +1 -0
- package/static/auth-callback/assets/ModelsPage-BRS0sje3.js +11 -0
- package/static/auth-callback/assets/{NetworkPage-Vp2PrMxs.js → NetworkPage-B3qBfANA.js} +2 -2
- package/static/auth-callback/assets/{PaneListHeader-DY7baSFl.js → PaneListHeader-QQeJGTp4.js} +1 -1
- package/static/auth-callback/assets/SearchIndexingPanel-MyNUSEwT.js +1 -0
- package/static/auth-callback/assets/{StatusSubjectPanel-ArIS-TxT.js → StatusSubjectPanel-DQkEVsFs.js} +1 -1
- package/static/{settings/assets/StatusWorkspace-CoMFRXoV.js → auth-callback/assets/StatusWorkspace-Dkv63Uwk.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-BDvT1NUz.js → SystemSettingsPage-TIsUfX5d.js} +1 -1
- package/static/{dashboard/assets/SystemSettingsSubjectPanel-WaE8mTQi.js → auth-callback/assets/SystemSettingsSubjectPanel-BJWEt2-7.js} +5 -5
- package/static/auth-callback/assets/XpodAiConnectionsPodStore-BJiXm-PF.js +3 -0
- package/static/auth-callback/assets/{activity-D1Dsfa_0.js → activity-5hNeNKnL.js} +1 -1
- package/static/auth-callback/assets/ai-connections-CryuHGKW.js +1 -0
- package/static/auth-callback/assets/{auth-callback-Cmf4hXVZ.js → auth-callback-CAFZ3R0B.js} +6 -6
- package/static/auth-callback/assets/auth-callback-rk080mvG.css +1 -0
- package/static/auth-callback/assets/{badge-CZsHq3Ih.js → badge-CAIPI0CB.js} +1 -1
- package/static/auth-callback/assets/collection-runtime-D9s7h9YA.js +1 -0
- package/static/auth-callback/assets/dialog-BjA109aX.js +1 -0
- package/static/auth-callback/assets/{download-DU9ntlHw.js → download-B3Up5W2G.js} +1 -1
- package/static/auth-callback/assets/{external-link-BfzaaZDx.js → external-link-BTXgSPzB.js} +1 -1
- package/static/auth-callback/assets/index-BppXlxcp.js +41 -0
- package/static/auth-callback/assets/index-CirW4CJf.js +1 -0
- package/static/auth-callback/assets/index-DlLYWOhw.js +4 -0
- package/static/auth-callback/assets/{index-browser-BNFqqC74.js → index-browser-DtU38ni3.js} +1 -1
- package/static/auth-callback/assets/{key-round-BwP3DBWo.js → key-round-CQCOrZ7x.js} +1 -1
- package/static/auth-callback/assets/layout-DB3pMyTl.js +1 -0
- package/static/auth-callback/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/auth-callback/assets/{rotate-ccw-VMwnmyab.js → rotate-ccw-C1zM2KtS.js} +1 -1
- package/static/auth-callback/assets/{skeleton-CoD55rBT.js → skeleton-Cqp7_M9-.js} +1 -1
- package/static/auth-callback/assets/{waypoints-DRo_1Ca7.js → waypoints-Bj6gAUSQ.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout--mcXl3My.js → workspace-layout-DK8mDzrY.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/AiConfigContext-BsE7MqX8.js +1 -0
- package/static/dashboard/assets/AiConfigPage-DvM-lRXa.js +1 -0
- package/static/dashboard/assets/DocumentProcessingPanel-BPfdlfuf.js +1 -0
- package/static/dashboard/assets/IndexLifecyclePanel--m0AGxvh.js +1 -0
- package/static/dashboard/assets/{IndexSubjectPanel-B2cXwl8X.js → IndexSubjectPanel-Bb7m1k3d.js} +1 -1
- package/static/dashboard/assets/ModelAssignmentsPanel-BLi_zbMa.js +1 -0
- package/static/dashboard/assets/ModelsPage-CxdpgnfR.js +11 -0
- package/static/dashboard/assets/{NetworkPage-DV2V0qWO.js → NetworkPage-BAIPw-D_.js} +2 -2
- package/static/dashboard/assets/{PaneListHeader-D0c1yCFH.js → PaneListHeader-BBCMei0r.js} +1 -1
- package/static/dashboard/assets/SearchIndexingPanel-Ck4Y-xjR.js +1 -0
- package/static/dashboard/assets/{StatusSubjectPanel-oPSECj7i.js → StatusSubjectPanel-D1KWfAXE.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-PdovQPKa.js → StatusWorkspace-JbA5gzXx.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-CtNDklkx.js → SystemSettingsPage-BbwQWsSR.js} +1 -1
- package/static/{settings/assets/SystemSettingsSubjectPanel-DExjDo_v.js → dashboard/assets/SystemSettingsSubjectPanel-N117nMt5.js} +5 -5
- package/static/dashboard/assets/XpodAiConnectionsPodStore-CdDOb4SV.js +18 -0
- package/static/dashboard/assets/{activity-B9ylSoyr.js → activity-DX1I96o_.js} +1 -1
- package/static/dashboard/assets/ai-connections-DwCRqOQa.js +1 -0
- package/static/dashboard/assets/{badge-BNbFbpIb.js → badge-k2vhtDqH.js} +1 -1
- package/static/dashboard/assets/collection-runtime-BFQ8teQJ.js +1 -0
- package/static/dashboard/assets/{dashboard-CD-FFVRD.js → dashboard-DWZ-fmCT.js} +4 -4
- package/static/dashboard/assets/dashboard-rk080mvG.css +1 -0
- package/static/dashboard/assets/dialog-1CCw-iHT.js +1 -0
- package/static/dashboard/assets/{download-nOP38LtW.js → download-C6-SNY1q.js} +1 -1
- package/static/dashboard/assets/{external-link-Bh2ewN9E.js → external-link-BgPcZ_j2.js} +1 -1
- package/static/dashboard/assets/index-6LcIUIYO.js +1 -0
- package/static/dashboard/assets/index-D7A8U6Pt.js +41 -0
- package/static/dashboard/assets/index-UD6QOE7H.js +4 -0
- package/static/dashboard/assets/{key-round-bGmguBLv.js → key-round-BOd7Jo0Q.js} +1 -1
- package/static/dashboard/assets/layout-DB3pMyTl.js +1 -0
- package/static/dashboard/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/dashboard/assets/{rotate-ccw-D2x__ODW.js → rotate-ccw-CCgJqsvx.js} +1 -1
- package/static/dashboard/assets/{skeleton-VOqft8WS.js → skeleton-Bc7abAn5.js} +1 -1
- package/static/dashboard/assets/{waypoints-fgRqm4oH.js → waypoints-s-opmJxx.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-DV4dgeHX.js → workspace-layout-DqIQeTBV.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/AiConfigContext-BB9KZySa.js +1 -0
- package/static/settings/assets/AiConfigPage-DGSXUkLs.js +1 -0
- package/static/settings/assets/DocumentProcessingPanel-Da2Re6Rg.js +1 -0
- package/static/settings/assets/IndexLifecyclePanel-BSZuIzgr.js +1 -0
- package/static/settings/assets/{IndexSubjectPanel-BgbI9c-a.js → IndexSubjectPanel-CFd0ay-r.js} +1 -1
- package/static/settings/assets/ModelAssignmentsPanel-CSAryvWJ.js +1 -0
- package/static/settings/assets/ModelsPage-BQwCwLHU.js +11 -0
- package/static/settings/assets/{NetworkPage-C8OA9Mtp.js → NetworkPage-BKymvsQc.js} +2 -2
- package/static/settings/assets/{PaneListHeader-COvlPJWj.js → PaneListHeader-Bjh3hRdQ.js} +1 -1
- package/static/settings/assets/SearchIndexingPanel-MjKL5QLU.js +1 -0
- package/static/settings/assets/{StatusSubjectPanel-BuLml7qn.js → StatusSubjectPanel-Bvl6K4mx.js} +1 -1
- package/static/settings/assets/StatusWorkspace-B0NzrP--.js +1 -0
- package/static/settings/assets/{SystemSettingsPage-DlzmaWV-.js → SystemSettingsPage-D2z6Z4FE.js} +1 -1
- package/static/{auth-callback/assets/SystemSettingsSubjectPanel-CDqRuC4t.js → settings/assets/SystemSettingsSubjectPanel-4sxma4X4.js} +5 -5
- package/static/settings/assets/XpodAiConnectionsPodStore-BkNQ8fZx.js +3 -0
- package/static/settings/assets/{activity-TLerXgMs.js → activity-CgJJGpjx.js} +1 -1
- package/static/settings/assets/ai-connections-CryuHGKW.js +1 -0
- package/static/settings/assets/{badge-Bcs8iWrH.js → badge-C4NypVyT.js} +1 -1
- package/static/settings/assets/collection-runtime-CTLCDxAi.js +1 -0
- package/static/settings/assets/dialog-Csq0vWUi.js +1 -0
- package/static/settings/assets/{download-Ct3QmHPt.js → download-DaLJJ-Wp.js} +1 -1
- package/static/settings/assets/{external-link-C8KiHbss.js → external-link--w_iW5Au.js} +1 -1
- package/static/settings/assets/index-B0mQa59b.js +4 -0
- package/static/settings/assets/index-BukHiu4y.js +1 -0
- package/static/settings/assets/index-COmVnZi2.js +41 -0
- package/static/settings/assets/{index-browser-CazX1pc2.js → index-browser-BGpvHwD0.js} +1 -1
- package/static/settings/assets/{key-round-B19YD1GA.js → key-round-Bk4YRjBu.js} +1 -1
- package/static/settings/assets/layout-DB3pMyTl.js +1 -0
- package/static/settings/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/settings/assets/{rotate-ccw-AQm2kMgU.js → rotate-ccw-TCabbqsr.js} +1 -1
- package/static/settings/assets/{settings-C-VBtt9r.js → settings-CJWpdbNC.js} +5 -5
- package/static/settings/assets/settings-rk080mvG.css +1 -0
- package/static/settings/assets/{skeleton-DyZ1OBYf.js → skeleton-JDHYVe7t.js} +1 -1
- package/static/settings/assets/{waypoints-CC3wq-SU.js → waypoints-DDvEl-MU.js} +1 -1
- package/static/settings/assets/{workspace-layout-BxXNKgf9.js → workspace-layout-DV5QU30U.js} +1 -1
- package/static/settings/settings.html +2 -2
- package/static/auth-callback/assets/AiConfigContext-DqWRSm7n.js +0 -1
- package/static/auth-callback/assets/AiConfigPage-C5YYyvzl.js +0 -1
- package/static/auth-callback/assets/DocumentProcessingPanel-DZCiacBz.js +0 -1
- package/static/auth-callback/assets/IndexLifecyclePanel-CCLeOljB.js +0 -1
- package/static/auth-callback/assets/ModelAssignmentsPanel-jUUTDKuh.js +0 -1
- package/static/auth-callback/assets/ModelsPage-B08zdtff.js +0 -10
- package/static/auth-callback/assets/SearchIndexingPanel-D4YRg1-8.js +0 -1
- package/static/auth-callback/assets/StatusWorkspace-Cp5LQ9Yx.js +0 -1
- package/static/auth-callback/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/auth-callback/assets/auth-callback-DWMMiFjh.css +0 -1
- package/static/auth-callback/assets/index-DSNnLUbU.js +0 -4
- package/static/auth-callback/assets/index-FHhHoKgp.js +0 -41
- package/static/dashboard/assets/AiConfigContext-BpPDKSzI.js +0 -1
- package/static/dashboard/assets/AiConfigPage-wsqEZDIX.js +0 -1
- package/static/dashboard/assets/DocumentProcessingPanel-CDSy3juc.js +0 -1
- package/static/dashboard/assets/IndexLifecyclePanel-CVd6vQCX.js +0 -1
- package/static/dashboard/assets/ModelAssignmentsPanel-BeBZhnQd.js +0 -1
- package/static/dashboard/assets/ModelsPage-B6McSCJw.js +0 -25
- package/static/dashboard/assets/SearchIndexingPanel-CGs0OZ12.js +0 -1
- package/static/dashboard/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/dashboard/assets/dashboard-DWMMiFjh.css +0 -1
- package/static/dashboard/assets/index-PgS-Bt7X.js +0 -41
- package/static/dashboard/assets/index-QN2QgEwr.js +0 -4
- package/static/settings/assets/AiConfigContext-zKQYdfai.js +0 -1
- package/static/settings/assets/AiConfigPage-Bs1EE3Ei.js +0 -1
- package/static/settings/assets/DocumentProcessingPanel-CSFfdOXS.js +0 -1
- package/static/settings/assets/IndexLifecyclePanel-BR9Su49B.js +0 -1
- package/static/settings/assets/ModelAssignmentsPanel-C0BE7nbk.js +0 -1
- package/static/settings/assets/ModelsPage-CU-YQ8_7.js +0 -10
- package/static/settings/assets/SearchIndexingPanel-Bdd46mIV.js +0 -1
- package/static/settings/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/settings/assets/index-1Q2cRjZd.js +0 -41
- package/static/settings/assets/index-DBO_Vq0P.js +0 -4
- package/static/settings/assets/settings-DWMMiFjh.css +0 -1
|
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ProviderModelSelectionService = void 0;
|
|
4
4
|
const PlaintextCredentialPayload_1 = require("../credentials/PlaintextCredentialPayload");
|
|
5
5
|
const errors_1 = require("../errors");
|
|
6
|
+
const EmbeddingModelPolicy_1 = require("../../../ai/service/EmbeddingModelPolicy");
|
|
6
7
|
const ProviderRegistry_1 = require("../providers/ProviderRegistry");
|
|
7
8
|
const ProviderModelDiscoveryAdapters_1 = require("./ProviderModelDiscoveryAdapters");
|
|
9
|
+
const ProviderModelType_1 = require("./ProviderModelType");
|
|
8
10
|
const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
9
11
|
/**
|
|
10
12
|
* Coordinates short-lived provider discovery with durable Pod selections.
|
|
@@ -32,11 +34,13 @@ class ProviderModelSelectionService {
|
|
|
32
34
|
this.baseUrlForProvider = options.baseUrlForProvider;
|
|
33
35
|
this.modelsService = options.modelsService;
|
|
34
36
|
this.credentialVault = options.credentialVault;
|
|
37
|
+
this.embeddingModelPolicy = options.embeddingModelPolicy ?? EmbeddingModelPolicy_1.EmbeddingModelPolicy.allowAll();
|
|
35
38
|
this.now = options.now ?? (() => new Date());
|
|
36
39
|
this.cacheTtlMs = normalizeCacheTtl(options.cacheTtlMs);
|
|
37
40
|
}
|
|
38
41
|
async discover(input) {
|
|
39
42
|
const normalizedProvider = normalizeProvider(input.provider);
|
|
43
|
+
this.requireProvidedProvider(normalizedProvider, input.deployment);
|
|
40
44
|
const credential = await this.resolveCredential(input, normalizedProvider);
|
|
41
45
|
const context = this.discoveryContext(normalizedProvider, credential);
|
|
42
46
|
const key = cacheKey(input.webId, normalizedProvider, input.deployment, context);
|
|
@@ -82,6 +86,7 @@ class ProviderModelSelectionService {
|
|
|
82
86
|
}
|
|
83
87
|
async replaceSelection(input) {
|
|
84
88
|
const normalizedProvider = normalizeProvider(input.provider);
|
|
89
|
+
this.requireProvidedProvider(normalizedProvider, input.deployment);
|
|
85
90
|
const credential = await this.resolveOptionalCredential(input, normalizedProvider);
|
|
86
91
|
const context = credential ? this.discoveryContext(normalizedProvider, credential) : undefined;
|
|
87
92
|
const key = cacheKey(input.webId, normalizedProvider, input.deployment, context);
|
|
@@ -115,6 +120,12 @@ class ProviderModelSelectionService {
|
|
|
115
120
|
if (input.defaultModel !== undefined && !availableById.has(modelIdentity(input.defaultModel))) {
|
|
116
121
|
throw modelNotInCatalogError(normalizedProvider, input.defaultModel);
|
|
117
122
|
}
|
|
123
|
+
assertEmbeddingSelectionAllowed({
|
|
124
|
+
provider: normalizedProvider,
|
|
125
|
+
modelIds: input.modelIds,
|
|
126
|
+
availableById,
|
|
127
|
+
policy: this.embeddingModelPolicy,
|
|
128
|
+
});
|
|
118
129
|
const next = await this.selectionRepository.replaceSelection({
|
|
119
130
|
webId: input.webId,
|
|
120
131
|
provider: normalizedProvider,
|
|
@@ -122,7 +133,7 @@ class ProviderModelSelectionService {
|
|
|
122
133
|
const discovered = availableById.get(modelIdentity(modelId));
|
|
123
134
|
return {
|
|
124
135
|
id: modelId,
|
|
125
|
-
modelType: discovered?.modelType ?? '
|
|
136
|
+
modelType: discovered?.modelType ?? 'chat',
|
|
126
137
|
status: 'active',
|
|
127
138
|
...(discovered?.displayName ? { displayName: discovered.displayName } : {}),
|
|
128
139
|
};
|
|
@@ -219,13 +230,13 @@ class ProviderModelSelectionService {
|
|
|
219
230
|
return result.models.map((model) => ({
|
|
220
231
|
id: model.id,
|
|
221
232
|
...(model.displayName ? { displayName: model.displayName } : {}),
|
|
222
|
-
modelType: model.modelType ??
|
|
233
|
+
modelType: model.modelType ?? (0, ProviderModelType_1.inferProviderModelType)({}, model.id),
|
|
223
234
|
}));
|
|
224
235
|
}
|
|
225
236
|
if (offering?.modelDiscovery.strategy === 'unsupported') {
|
|
226
237
|
return this.providerRegistry.requireProvider(input.input.provider).models.map((model) => ({
|
|
227
238
|
id: model.id,
|
|
228
|
-
modelType:
|
|
239
|
+
modelType: (0, ProviderModelType_1.inferProviderModelType)({}, model.id),
|
|
229
240
|
}));
|
|
230
241
|
}
|
|
231
242
|
const adapter = this.discoveryRegistry.get(input.input.provider);
|
|
@@ -242,6 +253,16 @@ class ProviderModelSelectionService {
|
|
|
242
253
|
};
|
|
243
254
|
return adapter.discover(adapterInput);
|
|
244
255
|
}
|
|
256
|
+
/** Cloud settings only manage providers this deployment provides. */
|
|
257
|
+
requireProvidedProvider(provider, deployment) {
|
|
258
|
+
if (deployment && !this.providerRegistry.isProvidedInDeployment(provider, deployment)) {
|
|
259
|
+
throw new errors_1.GatewayProtocolError('provider_not_available_in_deployment', {
|
|
260
|
+
code: 'invalid_request',
|
|
261
|
+
status: 403,
|
|
262
|
+
details: { provider },
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
245
266
|
async resolveCredential(input, provider) {
|
|
246
267
|
const credential = input.credentialId && this.credentialRepository.getCredentialById
|
|
247
268
|
? await this.credentialRepository.getCredentialById({
|
|
@@ -345,20 +366,6 @@ function stringValue(value) {
|
|
|
345
366
|
function normalizeCompatibility(value) {
|
|
346
367
|
return value === 'auto' || value === 'openai' || value === 'anthropic' ? value : undefined;
|
|
347
368
|
}
|
|
348
|
-
function inferModelType(id) {
|
|
349
|
-
const normalized = id.toLowerCase();
|
|
350
|
-
if (/(?:embedding|embed)/u.test(normalized))
|
|
351
|
-
return 'embedding';
|
|
352
|
-
if (/(?:dall[-_ ]?e|stable[-_ ]?diffusion|flux|imagen|midjourney|image[-_ ]?(?:generation|gen))/u.test(normalized)) {
|
|
353
|
-
return 'image';
|
|
354
|
-
}
|
|
355
|
-
if (/(?:whisper|tts|speech|musicgen|audio[-_ ]?(?:generation|gen))/u.test(normalized))
|
|
356
|
-
return 'audio';
|
|
357
|
-
if (/(?:chat|completion|conversation|text[-_ ]?generation|instruct|reason|coder|gpt|claude|kimi|qwen|deepseek|llama|mistral|gemini)/u.test(normalized)) {
|
|
358
|
-
return 'chat';
|
|
359
|
-
}
|
|
360
|
-
return 'other';
|
|
361
|
-
}
|
|
362
369
|
function normalizeCacheTtl(value) {
|
|
363
370
|
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
364
371
|
? value
|
|
@@ -461,10 +468,14 @@ function cloneCatalog(catalog) {
|
|
|
461
468
|
models: catalog.models.map((model) => ({ ...model })),
|
|
462
469
|
};
|
|
463
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* A catalog type is one of the two classes the Pod can store.
|
|
473
|
+
*
|
|
474
|
+
* Anything else - an older row, a provider's own vocabulary - reads as a chat
|
|
475
|
+
* model rather than as a value the AI config write would reject.
|
|
476
|
+
*/
|
|
464
477
|
function normalizeCatalogModelType(value) {
|
|
465
|
-
return value === '
|
|
466
|
-
? value
|
|
467
|
-
: 'other';
|
|
478
|
+
return value === 'embedding' ? 'embedding' : 'chat';
|
|
468
479
|
}
|
|
469
480
|
function activeCredentialRequiredError(provider) {
|
|
470
481
|
return new errors_1.GatewayProtocolError('active_credential_required', {
|
|
@@ -480,6 +491,32 @@ function modelNotInCatalogError(provider, modelId) {
|
|
|
480
491
|
details: { provider, modelId },
|
|
481
492
|
});
|
|
482
493
|
}
|
|
494
|
+
/**
|
|
495
|
+
* Discovery reports whatever a BYOK endpoint advertises, so a selected embedding
|
|
496
|
+
* model still has to be provided by the gateway catalog. Selecting one that is
|
|
497
|
+
* not would otherwise advertise an arbitrary embedding model in Cloud.
|
|
498
|
+
*/
|
|
499
|
+
function assertEmbeddingSelectionAllowed(input) {
|
|
500
|
+
if (!input.policy.isEnforced()) {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
for (const modelId of input.modelIds) {
|
|
504
|
+
const identity = modelIdentity(modelId);
|
|
505
|
+
const discovered = input.availableById.get(identity);
|
|
506
|
+
const embedding = discovered?.modelType === 'embedding'
|
|
507
|
+
|| (0, ProviderModelType_1.inferProviderModelType)({}, identity) === 'embedding';
|
|
508
|
+
if (!embedding) {
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
if (!input.policy.isAllowed({ provider: input.provider, model: identity })) {
|
|
512
|
+
throw new errors_1.GatewayProtocolError('embedding_model_not_allowed', {
|
|
513
|
+
code: 'embedding_model_not_allowed',
|
|
514
|
+
status: 400,
|
|
515
|
+
details: { provider: input.provider, modelId: identity },
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
483
520
|
function modelSelectionDefaultNotPickedError(provider, defaultModel) {
|
|
484
521
|
return new errors_1.GatewayProtocolError('model_selection_default_not_picked', {
|
|
485
522
|
code: 'invalid_request',
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What kind of model an upstream `/models` entry is, as Xpod records it.
|
|
3
|
+
*
|
|
4
|
+
* Discovery answers exactly one question the product acts on: is this an
|
|
5
|
+
* embedding model, or is it a chat model? Embedding is the value the embedding
|
|
6
|
+
* allowlist filters on and the one the settings list marks with a glyph, and the
|
|
7
|
+
* Pod stores such a row as `EmbeddingModel`; everything else is a chat model.
|
|
8
|
+
*
|
|
9
|
+
* The vocabulary is deliberately this short. A Pod row's class has to be one the
|
|
10
|
+
* shared schema knows (`toAIModelClassUri` in `@undefineds.co/models`); a third
|
|
11
|
+
* value invented here - `other`, `audio` - makes the AI config write throw
|
|
12
|
+
* `Unsupported AI model class`, so a synced list would stop being writable. Any
|
|
13
|
+
* finer distinction belongs to a model's capabilities, not to this column.
|
|
14
|
+
*
|
|
15
|
+
* Both discovery paths read the same provider payloads - the adapters behind
|
|
16
|
+
* `POST …/models/refresh` (同步模型) and the per-provider discovery adapters
|
|
17
|
+
* behind the selection service - so the rule lives here once and both import it.
|
|
18
|
+
*/
|
|
19
|
+
export type DiscoveredProviderModelType = 'chat' | 'embedding';
|
|
20
|
+
/**
|
|
21
|
+
* Model type for one upstream entry.
|
|
22
|
+
*
|
|
23
|
+
* An explicit field the provider sends wins; otherwise the id is the only
|
|
24
|
+
* evidence available, and embeddings are the one kind that must never be missed:
|
|
25
|
+
* the embedding allowlist filters on this value, so a missed embedding model
|
|
26
|
+
* disappears from model management.
|
|
27
|
+
*/
|
|
28
|
+
export declare function inferProviderModelType(record: Record<string, unknown>, id: string): DiscoveredProviderModelType;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inferProviderModelType = inferProviderModelType;
|
|
4
|
+
/**
|
|
5
|
+
* Model type for one upstream entry.
|
|
6
|
+
*
|
|
7
|
+
* An explicit field the provider sends wins; otherwise the id is the only
|
|
8
|
+
* evidence available, and embeddings are the one kind that must never be missed:
|
|
9
|
+
* the embedding allowlist filters on this value, so a missed embedding model
|
|
10
|
+
* disappears from model management.
|
|
11
|
+
*/
|
|
12
|
+
function inferProviderModelType(record, id) {
|
|
13
|
+
if (explicitProviderModelType(record) === 'embedding') {
|
|
14
|
+
return 'embedding';
|
|
15
|
+
}
|
|
16
|
+
return /(?:embedding|embed)/u.test(id.toLowerCase()) ? 'embedding' : 'chat';
|
|
17
|
+
}
|
|
18
|
+
/** The kind the provider payload itself declares, when it declares one. */
|
|
19
|
+
function explicitProviderModelType(record) {
|
|
20
|
+
for (const value of [record.modelType, record.model_type, record.type, record.object, record.category]) {
|
|
21
|
+
if (typeof value !== 'string') {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const normalized = value.trim().toLowerCase();
|
|
25
|
+
if (!normalized || normalized === 'model') {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (/(?:embedding|embed)/u.test(normalized)) {
|
|
29
|
+
return 'embedding';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ProviderModelType.js.map
|
|
@@ -2,10 +2,20 @@ import type { ConnectCredentialRecord } from '../connect';
|
|
|
2
2
|
import type { ProviderSecret } from '../credentials/CredentialVault';
|
|
3
3
|
import { ProviderHttpTransport } from '../../service/provider-http-transport';
|
|
4
4
|
import type { ProviderProductDescriptor, ProviderRegistry } from '../providers/ProviderRegistry';
|
|
5
|
+
import { type DiscoveredProviderModelType } from './ProviderModelType';
|
|
5
6
|
export interface DiscoveredProviderModel {
|
|
6
7
|
id: string;
|
|
7
8
|
displayName?: string;
|
|
8
9
|
capabilities?: string[];
|
|
10
|
+
/**
|
|
11
|
+
* What the model is for, inferred from the provider payload.
|
|
12
|
+
*
|
|
13
|
+
* Discovery keeps embedding models in the list, and every consumer of this
|
|
14
|
+
* shape - the Pod row written on sync, the settings model list, the embedding
|
|
15
|
+
* allowlist - reads the type from here. Dropping it stores an embedding model
|
|
16
|
+
* as an ordinary one, which is how it disappears from model management.
|
|
17
|
+
*/
|
|
18
|
+
modelType?: DiscoveredProviderModelType;
|
|
9
19
|
availability?: 'available' | 'unavailable';
|
|
10
20
|
metadata?: {
|
|
11
21
|
sources?: ProviderModelDiscoverySource[];
|
|
@@ -5,6 +5,7 @@ exports.resolveSafeModelsBaseUrl = resolveSafeModelsBaseUrl;
|
|
|
5
5
|
exports.normalizeDiscoveredModels = normalizeDiscoveredModels;
|
|
6
6
|
const ProviderQuotaAdapter_1 = require("../quota/ProviderQuotaAdapter");
|
|
7
7
|
const provider_http_transport_1 = require("../../service/provider-http-transport");
|
|
8
|
+
const ProviderModelType_1 = require("./ProviderModelType");
|
|
8
9
|
class ProviderModelsFetchError extends Error {
|
|
9
10
|
constructor(providerStatus, retryAfter, providerMessage) {
|
|
10
11
|
super(`provider_models_fetch_failed:${providerStatus}`);
|
|
@@ -340,7 +341,7 @@ function normalizeDiscoveredModels(payload) {
|
|
|
340
341
|
}
|
|
341
342
|
const record = item;
|
|
342
343
|
const id = String(record.id ?? record.name ?? record.model ?? record.slug ?? record.uid ?? '').trim();
|
|
343
|
-
if (!id || seen.has(id)
|
|
344
|
+
if (!id || seen.has(id)) {
|
|
344
345
|
continue;
|
|
345
346
|
}
|
|
346
347
|
seen.add(id);
|
|
@@ -350,6 +351,7 @@ function normalizeDiscoveredModels(payload) {
|
|
|
350
351
|
id,
|
|
351
352
|
...(displayName && displayName !== id ? { displayName } : {}),
|
|
352
353
|
...(capabilities.length > 0 ? { capabilities } : {}),
|
|
354
|
+
modelType: (0, ProviderModelType_1.inferProviderModelType)(record, id),
|
|
353
355
|
});
|
|
354
356
|
}
|
|
355
357
|
return models;
|
|
@@ -406,9 +408,6 @@ function extractModelList(payload) {
|
|
|
406
408
|
}
|
|
407
409
|
return [];
|
|
408
410
|
}
|
|
409
|
-
function isEmbeddingModel(id) {
|
|
410
|
-
return /embed/i.test(id);
|
|
411
|
-
}
|
|
412
411
|
function stringValue(value) {
|
|
413
412
|
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
414
413
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { AnthropicModelsAdapter, CodexSubscriptionModelsAdapter, OpenAiCompatibleModelsAdapter, ProviderModelsFetchError, ProviderModelsResponseError, normalizeDiscoveredModels, type DiscoveredProviderModel, type ModelsCredentialRecord, type ProviderModelsAdapter, type ProviderModelsFetchInput, } from './ProviderModelsAdapter';
|
|
2
2
|
export { ProviderModelsService, type ProviderModelDiscovery, type ProviderModelsServiceOptions, } from './ProviderModelsService';
|
|
3
3
|
export { ProviderCustomModelsService, type ProviderCustomModelsServiceOptions, } from './ProviderCustomModelsService';
|
|
4
|
+
export { createGatewayEmbeddingModelCatalog } from './GatewayEmbeddingModelCatalog';
|
|
4
5
|
export type { CustomProviderModel } from '../connect';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ProviderCustomModelsService = exports.ProviderModelsService = exports.normalizeDiscoveredModels = exports.ProviderModelsResponseError = exports.ProviderModelsFetchError = exports.OpenAiCompatibleModelsAdapter = exports.CodexSubscriptionModelsAdapter = exports.AnthropicModelsAdapter = void 0;
|
|
3
|
+
exports.createGatewayEmbeddingModelCatalog = exports.ProviderCustomModelsService = exports.ProviderModelsService = exports.normalizeDiscoveredModels = exports.ProviderModelsResponseError = exports.ProviderModelsFetchError = exports.OpenAiCompatibleModelsAdapter = exports.CodexSubscriptionModelsAdapter = exports.AnthropicModelsAdapter = void 0;
|
|
4
4
|
var ProviderModelsAdapter_1 = require("./ProviderModelsAdapter");
|
|
5
5
|
Object.defineProperty(exports, "AnthropicModelsAdapter", { enumerable: true, get: function () { return ProviderModelsAdapter_1.AnthropicModelsAdapter; } });
|
|
6
6
|
Object.defineProperty(exports, "CodexSubscriptionModelsAdapter", { enumerable: true, get: function () { return ProviderModelsAdapter_1.CodexSubscriptionModelsAdapter; } });
|
|
@@ -12,4 +12,6 @@ var ProviderModelsService_1 = require("./ProviderModelsService");
|
|
|
12
12
|
Object.defineProperty(exports, "ProviderModelsService", { enumerable: true, get: function () { return ProviderModelsService_1.ProviderModelsService; } });
|
|
13
13
|
var ProviderCustomModelsService_1 = require("./ProviderCustomModelsService");
|
|
14
14
|
Object.defineProperty(exports, "ProviderCustomModelsService", { enumerable: true, get: function () { return ProviderCustomModelsService_1.ProviderCustomModelsService; } });
|
|
15
|
+
var GatewayEmbeddingModelCatalog_1 = require("./GatewayEmbeddingModelCatalog");
|
|
16
|
+
Object.defineProperty(exports, "createGatewayEmbeddingModelCatalog", { enumerable: true, get: function () { return GatewayEmbeddingModelCatalog_1.createGatewayEmbeddingModelCatalog; } });
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -6,9 +6,16 @@ export declare class CustomRuntimeAdapter implements ProviderRuntimeAdapter {
|
|
|
6
6
|
readonly provider = "custom";
|
|
7
7
|
private readonly openai;
|
|
8
8
|
private readonly anthropic;
|
|
9
|
+
/**
|
|
10
|
+
* A user-owned endpoint is a Local capability: the operator cannot vouch for
|
|
11
|
+
* it, so Cloud never sends a provider key to a Pod-supplied base URL. Cloud
|
|
12
|
+
* therefore resolves `custom` against the catalog's placeholder endpoint and
|
|
13
|
+
* rejects the request instead of following the Pod.
|
|
14
|
+
*/
|
|
9
15
|
constructor(input: {
|
|
10
16
|
transport: ProviderHttpTransport;
|
|
11
17
|
descriptor: ProviderDescriptor;
|
|
18
|
+
allowCredentialBaseUrl?: boolean;
|
|
12
19
|
});
|
|
13
20
|
execute(input: ProviderRuntimeExecuteInput): AsyncIterable<GatewayEvent>;
|
|
14
21
|
}
|
|
@@ -5,15 +5,22 @@ const errors_1 = require("../errors");
|
|
|
5
5
|
const AnthropicRuntimeAdapter_1 = require("./AnthropicRuntimeAdapter");
|
|
6
6
|
const ProviderRuntimeAdapter_1 = require("./ProviderRuntimeAdapter");
|
|
7
7
|
class CustomRuntimeAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* A user-owned endpoint is a Local capability: the operator cannot vouch for
|
|
10
|
+
* it, so Cloud never sends a provider key to a Pod-supplied base URL. Cloud
|
|
11
|
+
* therefore resolves `custom` against the catalog's placeholder endpoint and
|
|
12
|
+
* rejects the request instead of following the Pod.
|
|
13
|
+
*/
|
|
8
14
|
constructor(input) {
|
|
9
15
|
this.provider = 'custom';
|
|
16
|
+
const options = { allowCredentialBaseUrl: input.allowCredentialBaseUrl ?? true };
|
|
10
17
|
this.openai = new ProviderRuntimeAdapter_1.OpenAiCompatibleRuntimeAdapter({
|
|
11
18
|
transport: input.transport,
|
|
12
19
|
provider: 'custom',
|
|
13
20
|
descriptor: input.descriptor,
|
|
14
21
|
defaultBaseUrl: input.descriptor.defaultBaseUrl,
|
|
15
22
|
safeBaseUrls: input.descriptor.safeBaseUrls,
|
|
16
|
-
allowCredentialBaseUrl:
|
|
23
|
+
allowCredentialBaseUrl: options.allowCredentialBaseUrl,
|
|
17
24
|
supportsImages: input.descriptor.capabilities.imageInput,
|
|
18
25
|
supportsDeveloperMessages: true,
|
|
19
26
|
allowToolChoiceRequired: true,
|
|
@@ -23,7 +30,7 @@ class CustomRuntimeAdapter {
|
|
|
23
30
|
provider: 'custom',
|
|
24
31
|
defaultBaseUrl: input.descriptor.defaultBaseUrl,
|
|
25
32
|
safeBaseUrls: input.descriptor.safeBaseUrls,
|
|
26
|
-
allowCredentialBaseUrl:
|
|
33
|
+
allowCredentialBaseUrl: options.allowCredentialBaseUrl,
|
|
27
34
|
});
|
|
28
35
|
}
|
|
29
36
|
async *execute(input) {
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { XPOD_PROVIDER_TO_MODELS_DEV } from './ProviderRegistry';
|
|
1
2
|
import type { ProviderModelDescriptor, ProviderRegistry } from './ProviderRegistry';
|
|
2
3
|
export declare const MODELS_DEV_API_URL = "https://models.dev/api.json";
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* models.dev provider id per gateway catalog provider id. The mapping is a
|
|
6
|
+
* projection of `MANAGED_PROVIDER_VOCABULARY`, the single provider-vocabulary
|
|
7
|
+
* block: this module does not keep its own translation table.
|
|
8
|
+
*/
|
|
9
|
+
export { XPOD_PROVIDER_TO_MODELS_DEV };
|
|
4
10
|
export interface ModelsDevModel {
|
|
5
11
|
id: string;
|
|
6
12
|
name?: string;
|
|
@@ -8,17 +8,11 @@ exports.lookupModelsDevModelDescriptor = lookupModelsDevModelDescriptor;
|
|
|
8
8
|
exports.syncProviderRegistryWithModelsDev = syncProviderRegistryWithModelsDev;
|
|
9
9
|
exports.syncProviderRegistryFromModelsDev = syncProviderRegistryFromModelsDev;
|
|
10
10
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
11
|
+
const ProviderRegistry_1 = require("./ProviderRegistry");
|
|
12
|
+
Object.defineProperty(exports, "XPOD_PROVIDER_TO_MODELS_DEV", { enumerable: true, get: function () { return ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV; } });
|
|
11
13
|
exports.MODELS_DEV_API_URL = 'https://models.dev/api.json';
|
|
12
14
|
const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
13
15
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
14
|
-
exports.XPOD_PROVIDER_TO_MODELS_DEV = {
|
|
15
|
-
openai: 'openai',
|
|
16
|
-
anthropic: 'anthropic',
|
|
17
|
-
kimi: 'moonshotai',
|
|
18
|
-
bailian: 'alibaba-cn',
|
|
19
|
-
deepseek: 'deepseek',
|
|
20
|
-
zhipu: 'zhipuai',
|
|
21
|
-
};
|
|
22
16
|
let catalogCache;
|
|
23
17
|
function resetModelsDevCatalogCache() {
|
|
24
18
|
catalogCache = undefined;
|
|
@@ -85,7 +79,7 @@ function modelsDevModelDescriptors(provider) {
|
|
|
85
79
|
* Used to enrich gateway projections for models that are absent from the static registry
|
|
86
80
|
* (e.g. newly released models discovered via the provider's live /models endpoint).
|
|
87
81
|
*/
|
|
88
|
-
function lookupModelsDevModelDescriptor(providerId, modelId, mapping =
|
|
82
|
+
function lookupModelsDevModelDescriptor(providerId, modelId, mapping = ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV) {
|
|
89
83
|
const modelsDevId = mapping[providerId];
|
|
90
84
|
const models = modelsDevId ? catalogCache?.catalog[modelsDevId]?.models : undefined;
|
|
91
85
|
if (!models) {
|
|
@@ -98,7 +92,7 @@ function lookupModelsDevModelDescriptor(providerId, modelId, mapping = exports.X
|
|
|
98
92
|
}
|
|
99
93
|
return modelsDevModelDescriptors({ id: modelsDevId, models: { [model.id]: model } })[0];
|
|
100
94
|
}
|
|
101
|
-
function syncProviderRegistryWithModelsDev(registry, catalog, mapping =
|
|
95
|
+
function syncProviderRegistryWithModelsDev(registry, catalog, mapping = ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV) {
|
|
102
96
|
const synced = [];
|
|
103
97
|
for (const [providerId, modelsDevId] of Object.entries(mapping)) {
|
|
104
98
|
const entry = catalog[modelsDevId];
|
|
@@ -78,7 +78,64 @@ export interface ProviderCapabilities {
|
|
|
78
78
|
reasoningEffort?: boolean;
|
|
79
79
|
imageInput?: boolean;
|
|
80
80
|
promptCaching?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Catalog marker for embedding models. This provider catalog is the single
|
|
83
|
+
* authority for the embedding models a deployment provides, so a model only
|
|
84
|
+
* becomes embeddable by being registered here (or merged from models.dev with
|
|
85
|
+
* this capability already set). User-declared custom models cannot add it.
|
|
86
|
+
*/
|
|
87
|
+
embedding?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Curated fast-tier marker.
|
|
90
|
+
*
|
|
91
|
+
* Neither this catalog nor models.dev carries latency data, so "fast" is a
|
|
92
|
+
* published judgement about a model's tier rather than a measurement. It is
|
|
93
|
+
* surfaced to clients as the `fast` capability token.
|
|
94
|
+
*/
|
|
95
|
+
fast?: boolean;
|
|
81
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* One row per managed provider: every vocabulary that names it.
|
|
99
|
+
*
|
|
100
|
+
* Pod AI config, credentials and the default embedding profile name providers in
|
|
101
|
+
* their own vocabulary (`dashscope`, `qwen`, `moonshot`, ...), while the gateway
|
|
102
|
+
* catalog names the product (`bailian`, `kimi`, ...), and the catalogs we
|
|
103
|
+
* project from name it again (`qwen`, `alibaba-cn`, `moonshotai`, `zhipuai`).
|
|
104
|
+
* Keeping all of that in one block means every model-policy check compares
|
|
105
|
+
* against one provider identity instead of each caller inventing its own
|
|
106
|
+
* aliases, and adding a provider cannot leave one of the parallel translations
|
|
107
|
+
* behind.
|
|
108
|
+
*/
|
|
109
|
+
export interface ManagedProviderVocabulary {
|
|
110
|
+
/** Canonical gateway catalog provider id. */
|
|
111
|
+
readonly id: string;
|
|
112
|
+
/**
|
|
113
|
+
* Runtime vocabularies that resolve to `id`. The id itself is always an
|
|
114
|
+
* accepted spelling and does not need to be repeated here.
|
|
115
|
+
*/
|
|
116
|
+
readonly runtimeIds: readonly string[];
|
|
117
|
+
/**
|
|
118
|
+
* Slug of the same provider in the bundled `@undefineds.co/models` discovery
|
|
119
|
+
* catalog. Defaults to `id` when the two agree.
|
|
120
|
+
*/
|
|
121
|
+
readonly discoverySlug?: string;
|
|
122
|
+
/** Provider id in models.dev. Absent when models.dev does not carry the provider. */
|
|
123
|
+
readonly modelsDevId?: string;
|
|
124
|
+
}
|
|
125
|
+
export declare const MANAGED_PROVIDER_VOCABULARY: readonly ManagedProviderVocabulary[];
|
|
126
|
+
/**
|
|
127
|
+
* Runtime vocabulary to canonical provider id, derived from
|
|
128
|
+
* `MANAGED_PROVIDER_VOCABULARY`.
|
|
129
|
+
*
|
|
130
|
+
* `ProviderRegistry.resolveManagedProviderId` is the translation entry point:
|
|
131
|
+
* it validates the canonical id against the registered catalog, which a raw
|
|
132
|
+
* table lookup cannot do.
|
|
133
|
+
*/
|
|
134
|
+
export declare const MANAGED_PROVIDER_ALIASES: Record<string, string>;
|
|
135
|
+
/** Discovery-catalog slug of a gateway catalog provider id (identity when undeclared). */
|
|
136
|
+
export declare function discoveryProviderSlug(providerId: string): string;
|
|
137
|
+
/** models.dev provider ids keyed by gateway catalog provider id, derived from the vocabulary block. */
|
|
138
|
+
export declare const XPOD_PROVIDER_TO_MODELS_DEV: Record<string, string>;
|
|
82
139
|
export interface ProviderModelDescriptor {
|
|
83
140
|
id: string;
|
|
84
141
|
aliases?: string[];
|
|
@@ -118,12 +175,43 @@ export declare class ProviderRegistry {
|
|
|
118
175
|
getProvider(provider: string): ProviderDescriptor | undefined;
|
|
119
176
|
requireProvider(provider: string): ProviderDescriptor;
|
|
120
177
|
listProviders(): ProviderDescriptor[];
|
|
178
|
+
/**
|
|
179
|
+
* Resolve a runtime provider vocabulary entry to the catalog provider that
|
|
180
|
+
* owns it. Unknown providers stay unresolved so a deployment can never treat
|
|
181
|
+
* a Pod-invented provider id as a catalog provider.
|
|
182
|
+
*/
|
|
183
|
+
resolveManagedProviderId(provider: string): string | undefined;
|
|
184
|
+
/**
|
|
185
|
+
* Whether this deployment offers the provider at all.
|
|
186
|
+
*
|
|
187
|
+
* Cloud only offers the operator-designated providers with the endpoints the
|
|
188
|
+
* catalog names: a self-hosted `custom` endpoint or a local-daemon provider
|
|
189
|
+
* such as Ollama is a Local-only capability, because there the user owns the
|
|
190
|
+
* endpoint.
|
|
191
|
+
*/
|
|
192
|
+
isProvidedInDeployment(provider: string, deployment: string): boolean;
|
|
193
|
+
listProvidedProviders(deployment: string): ProviderDescriptor[];
|
|
194
|
+
/**
|
|
195
|
+
* Embedding models this catalog provides for a provider. This is the authority
|
|
196
|
+
* for embedding model policy; anything absent is not provided by the gateway.
|
|
197
|
+
*/
|
|
198
|
+
listManagedEmbeddingModels(provider: string): ProviderModelDescriptor[];
|
|
199
|
+
isManagedEmbeddingModel(provider: string, modelId: string): boolean;
|
|
121
200
|
getProduct(product: string): ProviderProductDescriptor | undefined;
|
|
122
201
|
requireProduct(product: string): ProviderProductDescriptor;
|
|
123
202
|
listProducts(): ProviderProductDescriptor[];
|
|
124
203
|
getOffering(product: string, offeringId: string): ProviderOfferingDescriptor | undefined;
|
|
125
204
|
requireOffering(product: string, offeringId: string): ProviderOfferingDescriptor;
|
|
126
205
|
resolveAlias(model: string): ModelAliasTarget | undefined;
|
|
206
|
+
/**
|
|
207
|
+
* Catalog descriptor for one model of one provider, matched by id or alias.
|
|
208
|
+
*
|
|
209
|
+
* Provider vocabularies differ between the Pod configuration and the catalog,
|
|
210
|
+
* so the runtime id is resolved through the same alias table the model-policy
|
|
211
|
+
* checks use. An unknown provider stays unresolved rather than falling back to
|
|
212
|
+
* another provider's catalog entry.
|
|
213
|
+
*/
|
|
214
|
+
getModelDescriptor(provider: string, modelId: string): ProviderModelDescriptor | undefined;
|
|
127
215
|
findModel(model: string): Array<{
|
|
128
216
|
provider: ProviderDescriptor;
|
|
129
217
|
model: ProviderModelDescriptor;
|
|
@@ -132,6 +220,25 @@ export declare class ProviderRegistry {
|
|
|
132
220
|
}
|
|
133
221
|
export declare function createDefaultProviderRegistry(options?: ProviderRegistryOptions): ProviderRegistry;
|
|
134
222
|
export declare function providerProductsForDeployment(deployment: 'local' | 'cloud'): ProviderProductDescriptor[];
|
|
223
|
+
/**
|
|
224
|
+
* Whether one declared upstream capability assigns a protocol+profile to a
|
|
225
|
+
* product offering under the credential kind that would use it.
|
|
226
|
+
*
|
|
227
|
+
* `PROVIDER_UPSTREAM_OVERRIDES` is the axis's single authority for the
|
|
228
|
+
* offering→capability mapping and `QuotaCapabilityRegistry` dispatches handlers
|
|
229
|
+
* from the protocol+profile declared here. A handler that needs to know whether
|
|
230
|
+
* an offering is its own asks the declaration instead of comparing offering id
|
|
231
|
+
* literals in `supports()`, which would be a second copy of this table.
|
|
232
|
+
*
|
|
233
|
+
* A capability may narrow itself to the credential auth modes it serves
|
|
234
|
+
* (`options.credentialAuthModes`); without that option every credential kind the
|
|
235
|
+
* Offering publishes is served. When the declaration narrows the kinds and the
|
|
236
|
+
* caller does not know the credential kind, the offering cannot be claimed.
|
|
237
|
+
*/
|
|
238
|
+
export declare function offeringDeclaresUpstreamCapability(product: string, offeringId: string | undefined, capability: {
|
|
239
|
+
protocol: string;
|
|
240
|
+
profile?: string;
|
|
241
|
+
}, credentialAuthMode?: string): boolean;
|
|
135
242
|
/**
|
|
136
243
|
* The provider/offering catalog belongs to `@undefineds.co/ai-connections`: it
|
|
137
244
|
* is content rather than schema, and it carries endpoints, console links and
|