Skip to main content

cmind/modelmanager/v1/external_model_service.proto

Package: cmind.modelmanager.v1

Enums

ExternalModelProvider

ValueNumberDescription
EXTERNAL_MODEL_PROVIDER_UNSPECIFIED0
EXTERNAL_MODEL_PROVIDER_OPENAI1
EXTERNAL_MODEL_PROVIDER_AZURE2
EXTERNAL_MODEL_PROVIDER_CUSTOM_OPENAI3

Messages

ExternalModel

FieldTypeNumberDescription
namestring1name is the resource name (metadata.name in K8s)
providerExternalModelProvider2provider identifies the type of external service
providerModelIdstring3provider_model_id is the provider's model identifier, sent on the wire to the external provider on every request (e.g. "gpt-4o"). Not required to be unique — multiple connectors may target the same provider model. The unique, client-facing identifier is public_model_id.
apiKeystring5api_key is the credential for authenticating with the provider
baseUrlstring6base_url is the endpoint URL for custom_openai or azure providers
apiVersionstring7api_version is the API version for Azure OpenAI
sharingSharing8sharing reflects current sharing state. Read-only on Create/Update — mutate via UpdateExternalModelSharing.
publicModelIdstring9public_model_id is the client-facing model identifier. Clients send this exact string in the OpenAI model field to invoke this external model. Required, immutable, and unique across ModelDeployment + ExternalModel + ModelAlias within the shared namespace. Validation mirrors the operator CRD: alnum start/end, 2–128 chars, internal chars [A-Za-z0-9._/-].
displayNamestring10display_name is the human-facing label rendered in pickers and admin UIs. Mutable; not required to be unique.
capabilitiesModelCapabilities11capabilities describes what this external model can do (task type + input modalities). Mirrors the CRD spec.capabilities. External models have no preset, so the type defaults to text-generation.

CreateExternalModelRequest

FieldTypeNumberDescription
externalModelExternalModel1

CreateExternalModelResponse

FieldTypeNumberDescription
externalModelExternalModel1

CreateTenantExternalModelRequest

FieldTypeNumberDescription
externalModelExternalModel1
tenantIdstring2Tenant that owns the model

CreateTenantExternalModelResponse

FieldTypeNumberDescription
externalModelExternalModel1

GetExternalModelRequest

FieldTypeNumberDescription
namestring1

GetExternalModelResponse

FieldTypeNumberDescription
externalModelExternalModel1

UpdateExternalModelRequest

FieldTypeNumberDescription
externalModelExternalModel1

UpdateExternalModelResponse

FieldTypeNumberDescription
externalModelExternalModel1

UpdateExternalModelSharingRequest

FieldTypeNumberDescription
namestring1
sharingSharing2

UpdateExternalModelSharingResponse

FieldTypeNumberDescription
sharingSharing1

DeleteExternalModelRequest

FieldTypeNumberDescription
namestring1

DeleteExternalModelResponse

ListExternalModelsRequest

ExternalModelSummary

ExternalModelSummary is the slim shape returned by ListExternalModels. Connection detail (base_url, api_version) is omitted because the list endpoint is reachable by any tenant member with can_invoke; api_key has always been stripped on read but base_url would leak provider hostnames. Callers needing detail use GetExternalModel (can_admin). share_to_all mirrors ModelDeploymentSummary — pickers need it, shared_with stays admin-only.

FieldTypeNumberDescription
namestring1
displayNamestring2
publicModelIdstring3
providerModelIdstring4
providerExternalModelProvider5
shareToAllbool6
capabilitiesModelCapabilities7capabilities lets pickers filter the list to a context without a per-item GetExternalModel round-trip. See ModelCapabilities.
tenantIdstring8Owning tenant; empty means platform-owned (cluster-wide)

ListExternalModelsResponse

FieldTypeNumberDescription
externalModelsrepeated ExternalModelSummary1

ListExternalModelPermissionsRequest

FieldTypeNumberDescription
namestring1
subjectTypeoptional cmind.permissions.v1.SubjectType2
roleoptional cmind.permissions.v1.DeploymentRole3

ListExternalModelPermissionsResponse

FieldTypeNumberDescription
permissionsrepeated cmind.permissions.v1.DeploymentPermission1

AddExternalModelPermissionRequest

FieldTypeNumberDescription
namestring1
subjectcmind.permissions.v1.Subject2
rolecmind.permissions.v1.DeploymentRole3

AddExternalModelPermissionResponse

RemoveExternalModelPermissionRequest

FieldTypeNumberDescription
namestring1
subjectcmind.permissions.v1.Subject2
rolecmind.permissions.v1.DeploymentRole3

RemoveExternalModelPermissionResponse

GetExternalModelMetricsRequest

FieldTypeNumberDescription
namestring1
startTimeuint322
endTimeuint323
stepMetricsStep4

GetExternalModelMetricsResponse

FieldTypeNumberDescription
timeRangeMetricsTimeRange1
metricsExternalModelMetrics2

ExternalModelMetrics

ExternalModelMetrics carries only token-usage series. Request counts, latency percentiles, and error rates are intentionally absent: those derive from in-cluster request logs, which external (proxied) models do not emit.

FieldTypeNumberDescription
totalPromptTokensrepeated MetricPoint1
totalCompletionTokensrepeated MetricPoint2
totalEmbeddingTokensrepeated MetricPoint3
totalRerankTokensrepeated MetricPoint4
totalTokensrepeated MetricPoint5

Services

ExternalModelService

CreateExternalModel

POST /cmind.modelmanager.v1.ExternalModelService/CreateExternalModel

Request: CreateExternalModelRequest

Response: CreateExternalModelResponse

CreateTenantExternalModel

POST /cmind.modelmanager.v1.ExternalModelService/CreateTenantExternalModel

Creates a tenant-owned external model (parent_tenant = tenant_id). Mirrors CreateExternalModel but scopes the model to a tenant; CreateExternalModel remains the platform-scoped create.

Request: CreateTenantExternalModelRequest

Response: CreateTenantExternalModelResponse

GetExternalModel

GET /cmind.modelmanager.v1.ExternalModelService/GetExternalModel

Request: GetExternalModelRequest

Response: GetExternalModelResponse

UpdateExternalModel

POST /cmind.modelmanager.v1.ExternalModelService/UpdateExternalModel

Request: UpdateExternalModelRequest

Response: UpdateExternalModelResponse

UpdateExternalModelSharing

POST /cmind.modelmanager.v1.ExternalModelService/UpdateExternalModelSharing

UpdateExternalModelSharing replaces the model's Sharing struct atomically (PUT semantics). The full desired state must be supplied; omitted fields are cleared. Sharing is not mutated by UpdateExternalModel — this is the only write path for it.

Request: UpdateExternalModelSharingRequest

Response: UpdateExternalModelSharingResponse

DeleteExternalModel

POST /cmind.modelmanager.v1.ExternalModelService/DeleteExternalModel

Request: DeleteExternalModelRequest

Response: DeleteExternalModelResponse

ListExternalModels

GET /cmind.modelmanager.v1.ExternalModelService/ListExternalModels

Handler filters per-item by can_invoke; gate here is just "logged in".

Request: ListExternalModelsRequest

Response: ListExternalModelsResponse

ListExternalModelPermissions

GET /cmind.modelmanager.v1.ExternalModelService/ListExternalModelPermissions

Request: ListExternalModelPermissionsRequest

Response: ListExternalModelPermissionsResponse

AddExternalModelPermission

POST /cmind.modelmanager.v1.ExternalModelService/AddExternalModelPermission

Request: AddExternalModelPermissionRequest

Response: AddExternalModelPermissionResponse

RemoveExternalModelPermission

POST /cmind.modelmanager.v1.ExternalModelService/RemoveExternalModelPermission

Request: RemoveExternalModelPermissionRequest

Response: RemoveExternalModelPermissionResponse

GetExternalModelMetrics

GET /cmind.modelmanager.v1.ExternalModelService/GetExternalModelMetrics

GetExternalModelMetrics returns token-usage time series for an external model. Only token metrics are available: request counts, latency, and error rates require in-cluster request logs, which proxied external models do not produce.

Request: GetExternalModelMetricsRequest

Response: GetExternalModelMetricsResponse