Warn about broad tool response projections
Deploy / deploy (push) Successful in 1m40s
CI / Rust Checks (push) Failing after 5m3s
CI / UI Checks (push) Has been skipped
CI / Frontend E2E (push) Has been skipped
CI / Deployment Manifests (push) Has been skipped

This commit is contained in:
github-ops
2026-06-20 21:05:30 +00:00
parent 5970db5449
commit ce773e6196
10 changed files with 328 additions and 8 deletions
+24 -3
View File
@@ -12,10 +12,11 @@ use crank_core::{
NoopAuditSink, OperationId, OperationSecurityLevel, OperationStatus, OwnerOnlyPolicyEngine,
PlatformApiKey, PlatformApiKeyId, PlatformApiKeyScope, PlatformApiKeyStatus, PolicyEngine,
ProductEdition, Protocol, ResponseCachePolicy, SampleId, Samples, Secret, SecretId, SecretKind,
SecretStatus, Target, ToolQualitySchemaKind, ToolQualitySchemaNode, UsagePeriod, UserId,
UserSessionId, WizardState, Workspace, WorkspaceId, WorkspaceStatus,
SecretStatus, Target, ToolQualityMappingRule, ToolQualityMappingSet, ToolQualitySchemaKind,
ToolQualitySchemaNode, UsagePeriod, UserId, UserSessionId, WizardState, Workspace, WorkspaceId,
WorkspaceStatus,
};
use crank_mapping::{JsonPathRoot, MappingSet, infer_mapping_from_samples};
use crank_mapping::{JsonPathRoot, MappingRule, MappingSet, infer_mapping_from_samples};
use crank_registry::{
AgentSummary, AgentVersionRecord, CreateAgentDraftVersionRequest, CreateAgentRequest,
CreateInvocationLogRequest, CreatePlatformApiKeyRequest, CreateSecretRequest,
@@ -1459,6 +1460,9 @@ impl AdminService {
findings.extend(
crank_core::analyze_tool_schema_quality("input_schema", &input_schema).findings,
);
let output_mapping = tool_quality_mapping_set(&payload.output_mapping);
findings
.extend(crank_core::analyze_tool_response_projection_quality(&output_mapping).findings);
Ok(crank_core::ToolQualityReport::new(findings))
}
@@ -3832,6 +3836,23 @@ fn tool_quality_schema_kind(kind: &SchemaKind) -> ToolQualitySchemaKind {
}
}
fn tool_quality_mapping_set(mapping: &MappingSet) -> ToolQualityMappingSet {
ToolQualityMappingSet {
rules: mapping
.rules
.iter()
.map(tool_quality_mapping_rule)
.collect(),
}
}
fn tool_quality_mapping_rule(rule: &MappingRule) -> ToolQualityMappingRule {
ToolQualityMappingRule {
source: rule.source.clone(),
target: rule.target.clone(),
}
}
#[cfg(test)]
#[allow(clippy::items_after_test_module)]
mod tests {