Skip to main content
Version: 3.4.0-rc.1

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.
queryPrefixoptional string12Literal query prefix, including whitespace. Empty explicitly disables the instruction Omitted on update preserves the existing value

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_read; 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_read; 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