38 lines
1.9 KiB
Go
38 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"time"
|
|
|
|
"git.cin.su/m/Assistant/contracts/capability"
|
|
"git.cin.su/m/Assistant/contracts/identity"
|
|
)
|
|
|
|
type discoveryService struct {
|
|
resolver bindingResolver
|
|
providers map[string]providerRegistration
|
|
owner identity.PrincipalID
|
|
now func() time.Time
|
|
}
|
|
|
|
func (s discoveryService) handler(w http.ResponseWriter, r *http.Request) {
|
|
registration, ok := s.providers[r.PathValue("provider")]
|
|
if !ok || registration.Discovery == nil {
|
|
http.Error(w, "provider discovery not found", http.StatusNotFound)
|
|
return
|
|
}
|
|
discovered, probe := registration.Discovery.Discover(r.Context())
|
|
snapshot := capability.CognitiveDiscoverySnapshot{ProviderInstanceID: registration.ProviderInstanceID, ProviderKind: registration.Kind, EndpointRef: registration.EndpointRef, CredentialRef: registration.CredentialRef, AuthMode: registration.AuthMode, BillingMode: registration.BillingMode, Enabled: true, OwnerPrincipalID: s.owner, CapabilityID: creatorAdvisoryCapabilityID, DataPolicy: registration.DataPolicy, LimitPolicyRef: "creator-advisory-local-v1", Health: probe.Health, FailureClass: capability.CognitiveFailureType(probe.Failure), ObservedAtUnixMillis: s.now().UnixMilli()}
|
|
for _, model := range discovered {
|
|
snapshot.Models = append(snapshot.Models, capability.DiscoveredModelSnapshot{ProviderModelID: model.ProviderModelID, Fingerprint: model.Fingerprint, MaxContextBytes: model.MaxContextBytes, Modalities: model.Modalities, Capabilities: model.Capabilities, Installed: capability.OperationalYes, Loaded: capability.OperationalNotObserved, Invokable: capability.OperationalNotObserved})
|
|
}
|
|
result, err := s.resolver.RegisterDiscovery(r.Context(), snapshot)
|
|
if err != nil {
|
|
http.Error(w, "provider discovery registration unavailable", http.StatusBadGateway)
|
|
return
|
|
}
|
|
w.Header().Set("Content-Type", "application/json")
|
|
_ = json.NewEncoder(w).Encode(result)
|
|
}
|