From 0f7113b78b4d867179c1a3adb9b6bd82b56da615 Mon Sep 17 00:00:00 2001 From: Paolo Dettori Date: Tue, 23 Jun 2026 11:47:20 -0400 Subject: [PATCH] fix: use resolve_scoped_name for provider lookup in inference set The provider lookup in upsert_cluster_inference_route used get_message_by_name directly, which fails for per-user providers stored under scoped keys (e.g. 'owner-uuid/claude'). Switch to resolve_scoped_name which tries the scoped key first then falls back to global, matching the pattern used in the provider gRPC service. Signed-off-by: Paolo Dettori --- crates/openshell-server/src/inference.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/openshell-server/src/inference.rs b/crates/openshell-server/src/inference.rs index 705aae300..cf75c8ae4 100644 --- a/crates/openshell-server/src/inference.rs +++ b/crates/openshell-server/src/inference.rs @@ -297,13 +297,17 @@ async fn upsert_cluster_inference_route( return Err(Status::invalid_argument("model_id is required")); } - let provider = store - .get_message_by_name::(provider_name) - .await - .map_err(|e| Status::internal(format!("fetch provider failed: {e}")))? - .ok_or_else(|| { - Status::failed_precondition(format!("provider '{provider_name}' not found")) - })?; + let provider_record = crate::auth::ownership::resolve_scoped_name( + store, + Provider::object_type(), + provider_name, + principal, + admin_role, + ) + .await? + .ok_or_else(|| Status::failed_precondition(format!("provider '{provider_name}' not found")))?; + let provider = Provider::decode(provider_record.payload.as_slice()) + .map_err(|e| Status::internal(format!("decode provider failed: {e}")))?; let empty = std::collections::HashMap::new(); let provider_labels = provider.metadata.as_ref().map_or(&empty, |m| &m.labels);