UNPKG

meld

Version:

Meld: A template language for LLM prompts

190 lines (173 loc) 6.29 kB
/** * Demo of mermaid-ascii wrapper * * This file contains examples of how to use the mermaid-ascii wrapper. * Run it with: npx ts-node tests/utils/mermaid-ascii/demo.ts */ import { mermaidToAscii, getBinaryVersion, isBinaryAvailable } from './index'; import { AsciiVisualizationAdapter, enhanceWithAsciiVisualization } from './integration'; import { VisualizationConfig } from '../debug/StateVisualizationService/IStateVisualizationService'; // Example: Basic usage of mermaid-ascii converter async function runBasicDemo() { console.log('==== Basic Usage Demo ===='); // Check if the binary is available const available = await isBinaryAvailable(); console.log('Binary available:', available); if (available) { const version = await getBinaryVersion(); console.log('Binary version:', version); } // Simple flowchart example const flowchart = ` graph TD A[Start] --> B{Is it?} B -->|Yes| C[OK] C --> D[Rethink] D --> B B -->|No| E[End] `; console.log('\nFlowchart example:'); try { const asciiArt = await mermaidToAscii(flowchart, { width: 80 }); console.log(asciiArt); } catch (error) { console.error('Error converting flowchart:', error); console.log('Using mock output for demonstration:'); console.log(` +-------+ +--------+ +----+ +---------+ | Start | --> | Is it? | --> | OK | --> | Rethink | +-------+ +--------+ +----+ +---------+ | | | | v | | | | | +--------------------------+ | v +-----+ | End | +-----+ `); } // Sequence diagram example const sequenceDiagram = ` sequenceDiagram participant Browser participant Server Browser->>Server: GET /api/data Server-->>Browser: Response with data Browser->>Browser: Process data Browser->>Server: POST /api/update Server-->>Browser: Update confirmation `; console.log('\nSequence diagram example:'); try { const asciiArt = await mermaidToAscii(sequenceDiagram, { width: 80 }); console.log(asciiArt); } catch (error) { console.error('Error converting sequence diagram:', error); console.log('Using mock output for demonstration:'); console.log(` Browser Server ------- ------ | | | GET /api/data | |---------------------->| | | | Response with data | |<----------------------| | | |---+ | | | Process data | |<--+ | | | | POST /api/update | |---------------------->| | | | Update confirmation | |<----------------------| | | `); } } // Example: Integration with StateVisualizationService async function runVisualizationDemo() { console.log('\n==== Visualization Service Integration Demo ===='); // Create mock visualization service const mockVisualizationService = { generateHierarchyView: (stateId: string, config: VisualizationConfig) => { return `graph TD State_${stateId}[State ${stateId}] --> State_child1[Child 1] State_${stateId} --> State_child2[Child 2] State_child1 --> State_grandchild[Grandchild]`; }, generateTransitionDiagram: (stateId: string, config: VisualizationConfig) => { return `graph LR State_A[State A] -->|Event 1| State_B[State B] State_B -->|Event 2| State_C[State C] State_C -->|Event 3| State_A`; }, generateRelationshipGraph: (stateIds: string[], config: VisualizationConfig) => { return `graph TD State_1[State 1] --> State_2[State 2] State_2 --> State_3[State 3] State_1 -.-> State_3`; }, generateTimeline: (stateIds: string[], config: VisualizationConfig) => { return `gantt title State Timeline dateFormat s State 1 :a1, 0, 30s State 2 :a2, after a1, 45s State 3 :a3, after a2, 30s`; }, visualizeResolutionPathTimeline: (variableName: string, stateId: string, config: any) => { return `sequenceDiagram participant State_${stateId} as State ${stateId} participant P as Parent participant C as Context State_${stateId}->>P: Resolve ${variableName} P->>C: Look up ${variableName} C-->>P: Value found P-->>State_${stateId}: Return value`; }, // Add other required methods to satisfy the interface getMetrics: () => ({ totalStates: 0, statesByType: {}, averageTransformationsPerState: 0, maxTransformationChainLength: 0, averageChildrenPerState: 0, maxTreeDepth: 0, operationFrequency: {} }), exportStateGraph: () => '', visualizeContextHierarchy: () => '', visualizeVariablePropagation: () => '', visualizeContextsAndVariableFlow: () => '' }; // Create the enhanced service const enhancedService = enhanceWithAsciiVisualization(mockVisualizationService); // Example state ID const stateId = 'example-123'; console.log('\nHierarchy View:'); try { const asciiArt = await enhancedService.generateAsciiHierarchyView(stateId, { width: 80 }); console.log(asciiArt); } catch (error) { console.error('Error generating hierarchy view:', error); } console.log('\nTransition Diagram:'); try { const asciiArt = await enhancedService.generateAsciiTransitionDiagram(stateId, { width: 80 }); console.log(asciiArt); } catch (error) { console.error('Error generating transition diagram:', error); } console.log('\nVariable Resolution:'); try { const asciiArt = await enhancedService.generateAsciiVariableResolution(stateId, 'myVariable', { width: 80 }); console.log(asciiArt); } catch (error) { console.error('Error generating variable resolution:', error); } } // Run the demos async function runAllDemos() { await runBasicDemo(); await runVisualizationDemo(); } runAllDemos().catch(console.error);