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) }