MCPcopy Index your code
hub / github.com/coder/coder / userCanUseChatModelConfig

Method userCanUseChatModelConfig

coderd/exp_chats.go:905–961  ·  view source on GitHub ↗

userCanUseChatModelConfig returns chatModelConfigAvailable when the user can use the model config. If err is non-nil, callers must ignore the returned reason because it may be the zero-value availability sentinel.

(
	ctx context.Context,
	userID uuid.UUID,
	modelConfigID uuid.UUID,
)

Source from the content-addressed store, hash-verified

903// use the model config. If err is non-nil, callers must ignore the returned
904// reason because it may be the zero-value availability sentinel.
905func (api *API) userCanUseChatModelConfig(
906 ctx context.Context,
907 userID uuid.UUID,
908 modelConfigID uuid.UUID,
909) (chatModelConfigUnavailableReason, error) {
910 if modelConfigID == uuid.Nil {
911 return chatModelConfigUnavailableModelNotFoundOrDisabled, nil
912 }
913 //nolint:gocritic // Non-admin users need deployment config validation.
914 model, err := api.Database.GetChatModelConfigByID(
915 dbauthz.AsSystemRestricted(ctx),
916 modelConfigID,
917 )
918 if err != nil {
919 if errors.Is(err, sql.ErrNoRows) || httpapi.Is404Error(err) {
920 return chatModelConfigUnavailableModelNotFoundOrDisabled, nil
921 }
922 return chatModelConfigAvailable, err
923 }
924 if !model.Enabled {
925 return chatModelConfigUnavailableModelNotFoundOrDisabled, nil
926 }
927
928 availability, err := api.getUserChatProviderAvailability(ctx, userID)
929 if err != nil {
930 return chatModelConfigAvailable, err
931 }
932 if model.AIProviderID.Valid {
933 providerID := model.AIProviderID.UUID
934 if _, ok := availability.enabledProviderIDs[providerID]; !ok {
935 return chatModelConfigUnavailableProviderDisabled, nil
936 }
937 providerStatus, ok := availability.providerStatusByID[providerID]
938 if !ok {
939 return chatModelConfigUnavailableProviderDisabled, nil
940 }
941 if !providerStatus.Available {
942 return chatModelConfigUnavailableCredentialsMissing, nil
943 }
944 return chatModelConfigAvailable, nil
945 }
946 provider, _, err := chatprovider.ResolveModelWithProviderHint(model.Model, model.Provider)
947 if err != nil {
948 return chatModelConfigUnavailableProviderDisabled, nil
949 }
950 if _, ok := availability.enabledProviderNames[provider]; !ok {
951 return chatModelConfigUnavailableProviderDisabled, nil
952 }
953 providerStatus, ok := availability.providerStatus[provider]
954 if !ok {
955 return chatModelConfigUnavailableProviderDisabled, nil
956 }
957 if !providerStatus.Available {
958 return chatModelConfigUnavailableCredentialsMissing, nil
959 }
960 return chatModelConfigAvailable, nil
961}
962

Calls 6

AsSystemRestrictedFunction · 0.92
Is404ErrorFunction · 0.92
IsMethod · 0.45

Tested by

no test coverage detected