Spaces:
Running
Running
| /** | |
| * Schema Detection Utility for Knowledge Graph Data | |
| * | |
| * Detects whether knowledge graph data uses reference-based or direct-based schema | |
| * and provides capability information for conditional feature rendering. | |
| */ | |
| export interface SchemaCapabilities { | |
| supportsLineReferences: boolean; | |
| supportsFailures: boolean; | |
| supportsImportanceLevels: boolean; | |
| supportsInteractionPrompts: boolean; | |
| } | |
| /** | |
| * Detect schema type from knowledge graph data structure | |
| */ | |
| export function detectSchemaType( | |
| data: any | |
| ): "reference_based" | "direct_based" { | |
| if (!data) { | |
| console.warn( | |
| "Schema detection: No data provided, defaulting to direct_based" | |
| ); | |
| return "direct_based"; | |
| } | |
| try { | |
| // Check entities for reference-based indicators | |
| const hasEntityRefs = data.entities?.some( | |
| (entity: any) => | |
| Array.isArray(entity.raw_prompt_ref) && entity.raw_prompt_ref.length > 0 | |
| ); | |
| // Check relations for reference-based indicators | |
| const hasRelationRefs = data.relations?.some( | |
| (relation: any) => | |
| Array.isArray(relation.interaction_prompt_ref) && | |
| relation.interaction_prompt_ref.length > 0 | |
| ); | |
| // Check for failures array (reference-based only) | |
| const hasFailures = | |
| Array.isArray(data.failures) && data.failures.length > 0; | |
| // Check for importance levels (more common in reference-based) | |
| const hasImportanceLevels = data.entities?.some( | |
| (entity: any) => | |
| entity.importance && | |
| ["HIGH", "MEDIUM", "LOW"].includes(entity.importance) | |
| ); | |
| const isReferenceBased = | |
| hasEntityRefs || hasRelationRefs || hasFailures || hasImportanceLevels; | |
| console.log("Schema detection results:", { | |
| hasEntityRefs, | |
| hasRelationRefs, | |
| hasFailures, | |
| hasImportanceLevels, | |
| schemaType: isReferenceBased ? "reference_based" : "direct_based", | |
| }); | |
| return isReferenceBased ? "reference_based" : "direct_based"; | |
| } catch (error) { | |
| console.warn("Schema detection failed, defaulting to direct_based:", error); | |
| return "direct_based"; | |
| } | |
| } | |
| /** | |
| * Check if data has reference-based features | |
| */ | |
| export function hasReferenceBasedFeatures(data: any): boolean { | |
| return detectSchemaType(data) === "reference_based"; | |
| } | |
| /** | |
| * Get schema capabilities based on schema type | |
| */ | |
| export function getSchemaCapabilities( | |
| schemaType: "reference_based" | "direct_based" | |
| ): SchemaCapabilities { | |
| if (schemaType === "reference_based") { | |
| return { | |
| supportsLineReferences: true, | |
| supportsFailures: true, | |
| supportsImportanceLevels: true, | |
| supportsInteractionPrompts: true, | |
| }; | |
| } else { | |
| return { | |
| supportsLineReferences: false, | |
| supportsFailures: false, | |
| supportsImportanceLevels: false, | |
| supportsInteractionPrompts: false, | |
| }; | |
| } | |
| } | |