@teachinglab/omd 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +257 -251
- package/README.old.md +137 -137
- package/canvas/core/canvasConfig.js +202 -202
- package/canvas/drawing/segment.js +167 -167
- package/canvas/drawing/stroke.js +385 -385
- package/canvas/events/eventManager.js +444 -444
- package/canvas/events/pointerEventHandler.js +262 -262
- package/canvas/index.js +48 -48
- package/canvas/tools/PointerTool.js +71 -71
- package/canvas/tools/tool.js +222 -222
- package/canvas/utils/boundingBox.js +377 -377
- package/canvas/utils/mathUtils.js +258 -258
- package/docs/api/configuration-options.md +198 -198
- package/docs/api/eventManager.md +82 -82
- package/docs/api/focusFrameManager.md +144 -144
- package/docs/api/index.md +105 -105
- package/docs/api/main.md +62 -62
- package/docs/api/omdBinaryExpressionNode.md +86 -86
- package/docs/api/omdCanvas.md +83 -83
- package/docs/api/omdConfigManager.md +112 -112
- package/docs/api/omdConstantNode.md +52 -52
- package/docs/api/omdDisplay.md +87 -87
- package/docs/api/omdEquationNode.md +174 -174
- package/docs/api/omdEquationSequenceNode.md +258 -258
- package/docs/api/omdEquationStack.md +192 -192
- package/docs/api/omdFunctionNode.md +82 -82
- package/docs/api/omdGroupNode.md +78 -78
- package/docs/api/omdHelpers.md +87 -87
- package/docs/api/omdLeafNode.md +85 -85
- package/docs/api/omdNode.md +201 -201
- package/docs/api/omdOperationDisplayNode.md +117 -117
- package/docs/api/omdOperatorNode.md +91 -91
- package/docs/api/omdParenthesisNode.md +133 -133
- package/docs/api/omdPopup.md +191 -191
- package/docs/api/omdPowerNode.md +131 -131
- package/docs/api/omdRationalNode.md +144 -144
- package/docs/api/omdSequenceNode.md +128 -128
- package/docs/api/omdSimplification.md +78 -78
- package/docs/api/omdSqrtNode.md +144 -144
- package/docs/api/omdStepVisualizer.md +146 -146
- package/docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/docs/api/omdStepVisualizerLayout.md +70 -70
- package/docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/docs/api/omdToolbar.md +130 -130
- package/docs/api/omdTranscriptionService.md +95 -95
- package/docs/api/omdTreeDiff.md +169 -169
- package/docs/api/omdUnaryExpressionNode.md +137 -137
- package/docs/api/omdUtilities.md +82 -82
- package/docs/api/omdVariableNode.md +123 -123
- package/docs/api/selectTool.md +74 -74
- package/docs/api/simplificationEngine.md +97 -97
- package/docs/api/simplificationRules.md +76 -76
- package/docs/api/simplificationUtils.md +64 -64
- package/docs/api/transcribe.md +43 -43
- package/docs/api-reference.md +85 -85
- package/docs/index.html +453 -453
- package/docs/index.md +38 -38
- package/docs/omd-objects.md +258 -258
- package/index.js +79 -79
- package/jsvg/index.js +3 -0
- package/jsvg/jsvg.js +898 -898
- package/jsvg/jsvgComponents.js +357 -358
- package/npm-docs/DOCUMENTATION_SUMMARY.md +220 -220
- package/npm-docs/README.md +251 -251
- package/npm-docs/api/api-reference.md +85 -85
- package/npm-docs/api/configuration-options.md +198 -198
- package/npm-docs/api/eventManager.md +82 -82
- package/npm-docs/api/expression-nodes.md +561 -561
- package/npm-docs/api/focusFrameManager.md +144 -144
- package/npm-docs/api/index.md +105 -105
- package/npm-docs/api/main.md +62 -62
- package/npm-docs/api/omdBinaryExpressionNode.md +86 -86
- package/npm-docs/api/omdCanvas.md +83 -83
- package/npm-docs/api/omdConfigManager.md +112 -112
- package/npm-docs/api/omdConstantNode.md +52 -52
- package/npm-docs/api/omdDisplay.md +87 -87
- package/npm-docs/api/omdEquationNode.md +174 -174
- package/npm-docs/api/omdEquationSequenceNode.md +258 -258
- package/npm-docs/api/omdEquationStack.md +192 -192
- package/npm-docs/api/omdFunctionNode.md +82 -82
- package/npm-docs/api/omdGroupNode.md +78 -78
- package/npm-docs/api/omdHelpers.md +87 -87
- package/npm-docs/api/omdLeafNode.md +85 -85
- package/npm-docs/api/omdNode.md +201 -201
- package/npm-docs/api/omdOperationDisplayNode.md +117 -117
- package/npm-docs/api/omdOperatorNode.md +91 -91
- package/npm-docs/api/omdParenthesisNode.md +133 -133
- package/npm-docs/api/omdPopup.md +191 -191
- package/npm-docs/api/omdPowerNode.md +131 -131
- package/npm-docs/api/omdRationalNode.md +144 -144
- package/npm-docs/api/omdSequenceNode.md +128 -128
- package/npm-docs/api/omdSimplification.md +78 -78
- package/npm-docs/api/omdSqrtNode.md +144 -144
- package/npm-docs/api/omdStepVisualizer.md +146 -146
- package/npm-docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/npm-docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/npm-docs/api/omdStepVisualizerLayout.md +70 -70
- package/npm-docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/npm-docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/npm-docs/api/omdToolbar.md +130 -130
- package/npm-docs/api/omdTranscriptionService.md +95 -95
- package/npm-docs/api/omdTreeDiff.md +169 -169
- package/npm-docs/api/omdUnaryExpressionNode.md +137 -137
- package/npm-docs/api/omdUtilities.md +82 -82
- package/npm-docs/api/omdVariableNode.md +123 -123
- package/npm-docs/api/selectTool.md +74 -74
- package/npm-docs/api/simplificationEngine.md +97 -97
- package/npm-docs/api/simplificationRules.md +76 -76
- package/npm-docs/api/simplificationUtils.md +64 -64
- package/npm-docs/api/transcribe.md +43 -43
- package/npm-docs/guides/equations.md +854 -854
- package/npm-docs/guides/factory-functions.md +354 -354
- package/npm-docs/guides/getting-started.md +318 -318
- package/npm-docs/guides/quick-examples.md +525 -525
- package/npm-docs/guides/visualizations.md +682 -682
- package/npm-docs/index.html +12 -0
- package/npm-docs/json-schemas.md +826 -826
- package/omd/config/omdConfigManager.js +279 -267
- package/omd/core/index.js +158 -158
- package/omd/core/omdEquationStack.js +606 -547
- package/omd/core/omdUtilities.js +113 -113
- package/omd/display/omdDisplay.js +1045 -963
- package/omd/display/omdToolbar.js +501 -501
- package/omd/nodes/omdBinaryExpressionNode.js +459 -459
- package/omd/nodes/omdConstantNode.js +141 -141
- package/omd/nodes/omdEquationNode.js +1327 -1327
- package/omd/nodes/omdFunctionNode.js +351 -351
- package/omd/nodes/omdGroupNode.js +67 -67
- package/omd/nodes/omdLeafNode.js +76 -76
- package/omd/nodes/omdNode.js +556 -556
- package/omd/nodes/omdOperationDisplayNode.js +321 -321
- package/omd/nodes/omdOperatorNode.js +108 -108
- package/omd/nodes/omdParenthesisNode.js +292 -292
- package/omd/nodes/omdPowerNode.js +235 -235
- package/omd/nodes/omdRationalNode.js +295 -295
- package/omd/nodes/omdSqrtNode.js +307 -307
- package/omd/nodes/omdUnaryExpressionNode.js +227 -227
- package/omd/nodes/omdVariableNode.js +122 -122
- package/omd/simplification/omdSimplification.js +140 -140
- package/omd/simplification/omdSimplificationEngine.js +887 -887
- package/omd/simplification/package.json +5 -5
- package/omd/simplification/rules/binaryRules.js +1037 -1037
- package/omd/simplification/rules/functionRules.js +111 -111
- package/omd/simplification/rules/index.js +48 -48
- package/omd/simplification/rules/parenthesisRules.js +19 -19
- package/omd/simplification/rules/powerRules.js +143 -143
- package/omd/simplification/rules/rationalRules.js +725 -725
- package/omd/simplification/rules/sqrtRules.js +48 -48
- package/omd/simplification/rules/unaryRules.js +37 -37
- package/omd/simplification/simplificationRules.js +31 -31
- package/omd/simplification/simplificationUtils.js +1055 -1055
- package/omd/step-visualizer/omdStepVisualizer.js +947 -947
- package/omd/step-visualizer/omdStepVisualizerHighlighting.js +246 -246
- package/omd/step-visualizer/omdStepVisualizerLayout.js +892 -892
- package/omd/step-visualizer/omdStepVisualizerTextBoxes.js +200 -200
- package/omd/utils/aiNextEquationStep.js +106 -106
- package/omd/utils/omdNodeOverlay.js +638 -638
- package/omd/utils/omdPopup.js +1203 -1203
- package/omd/utils/omdStepVisualizerInteractiveSteps.js +684 -684
- package/omd/utils/omdStepVisualizerNodeUtils.js +267 -267
- package/omd/utils/omdTranscriptionService.js +123 -123
- package/omd/utils/omdTreeDiff.js +733 -733
- package/package.json +59 -57
- package/readme.html +184 -120
- package/src/index.js +74 -74
- package/src/json-schemas.md +576 -576
- package/src/omd-json-samples.js +147 -147
- package/src/omdApp.js +391 -391
- package/src/omdAppCanvas.js +335 -335
- package/src/omdBalanceHanger.js +199 -199
- package/src/omdColor.js +13 -13
- package/src/omdCoordinatePlane.js +541 -541
- package/src/omdExpression.js +115 -115
- package/src/omdFactory.js +150 -150
- package/src/omdFunction.js +114 -114
- package/src/omdMetaExpression.js +290 -290
- package/src/omdNaturalExpression.js +563 -563
- package/src/omdNode.js +383 -383
- package/src/omdNumber.js +52 -52
- package/src/omdNumberLine.js +114 -112
- package/src/omdNumberTile.js +118 -118
- package/src/omdOperator.js +72 -72
- package/src/omdPowerExpression.js +91 -91
- package/src/omdProblem.js +259 -259
- package/src/omdRatioChart.js +251 -251
- package/src/omdRationalExpression.js +114 -114
- package/src/omdSampleData.js +215 -215
- package/src/omdShapes.js +512 -512
- package/src/omdSpinner.js +151 -151
- package/src/omdString.js +49 -49
- package/src/omdTable.js +498 -498
- package/src/omdTapeDiagram.js +244 -244
- package/src/omdTerm.js +91 -91
- package/src/omdTileEquation.js +349 -349
- package/src/omdUtils.js +84 -84
- package/src/omdVariable.js +51 -51
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* omdTranscriptionService - AI-powered transcription service for handwritten content
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Transcription service using server endpoint
|
|
7
|
-
*/
|
|
8
|
-
export class omdTranscriptionService {
|
|
9
|
-
constructor(options = {}) {
|
|
10
|
-
this.options = {
|
|
11
|
-
endpoint: options.endpoint || this._getDefaultEndpoint(),
|
|
12
|
-
defaultProvider: options.defaultProvider || 'openai',
|
|
13
|
-
defaultModel: options.defaultModel || 'gpt-4o',
|
|
14
|
-
...options
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Get the default endpoint based on current environment
|
|
20
|
-
* @private
|
|
21
|
-
*/
|
|
22
|
-
_getDefaultEndpoint() {
|
|
23
|
-
return '/.netlify/functions/transcribe';
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Convert blob to base64
|
|
28
|
-
* @private
|
|
29
|
-
*/
|
|
30
|
-
async _blobToBase64(blob) {
|
|
31
|
-
return new Promise((resolve, reject) => {
|
|
32
|
-
const reader = new FileReader();
|
|
33
|
-
reader.onload = () => {
|
|
34
|
-
const base64 = reader.result.split(',')[1];
|
|
35
|
-
resolve(base64);
|
|
36
|
-
};
|
|
37
|
-
reader.onerror = reject;
|
|
38
|
-
reader.readAsDataURL(blob);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Transcribe an image using the server endpoint
|
|
44
|
-
* @param {Blob} imageBlob - The image blob to transcribe
|
|
45
|
-
* @param {Object} options - Transcription options
|
|
46
|
-
* @param {string} options.prompt - Custom prompt for transcription
|
|
47
|
-
* @returns {Promise<Object>} Transcription result
|
|
48
|
-
*/
|
|
49
|
-
async transcribe(imageBlob, options = {}) {
|
|
50
|
-
try {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Convert blob to base64
|
|
54
|
-
const base64Image = await this._blobToBase64(imageBlob);
|
|
55
|
-
|
|
56
|
-
// Call server endpoint
|
|
57
|
-
const response = await fetch(this.options.endpoint, {
|
|
58
|
-
method: 'POST',
|
|
59
|
-
headers: {
|
|
60
|
-
'Content-Type': 'application/json'
|
|
61
|
-
},
|
|
62
|
-
body: JSON.stringify({
|
|
63
|
-
imageBase64: base64Image,
|
|
64
|
-
prompt: options.prompt || 'Please transcribe the handwritten mathematical expression in this image. Return only the mathematical expression in pure format (no LaTeX, no dollar signs). For powers use ^, for fractions use /, for square roots use sqrt().',
|
|
65
|
-
model: options.model || this.options.defaultModel,
|
|
66
|
-
provider: options.provider || this.options.defaultProvider
|
|
67
|
-
})
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
if (!response.ok) {
|
|
71
|
-
throw new Error(`Transcription API error: ${response.status} ${response.statusText}`);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const result = await response.json();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
text: (result.text || '').trim(),
|
|
79
|
-
provider: result.provider || this.options.defaultProvider,
|
|
80
|
-
model: result.model || (options.model || this.options.defaultModel),
|
|
81
|
-
confidence: result.confidence || 1.0
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
} catch (error) {
|
|
85
|
-
console.error('Transcription error:', error);
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Transcribe with fallback (same as transcribe for now)
|
|
92
|
-
* @param {Blob} imageBlob - The image blob to transcribe
|
|
93
|
-
* @param {Object} options - Transcription options
|
|
94
|
-
* @returns {Promise<Object>} Transcription result
|
|
95
|
-
*/
|
|
96
|
-
async transcribeWithFallback(imageBlob, options = {}) {
|
|
97
|
-
return this.transcribe(imageBlob, options);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Check if transcription service is available
|
|
102
|
-
* @returns {boolean} True if service is available
|
|
103
|
-
*/
|
|
104
|
-
isAvailable() {
|
|
105
|
-
return true; // Always available since we use server endpoint
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Get available providers (simplified)
|
|
110
|
-
* @returns {Array} List of available providers
|
|
111
|
-
*/
|
|
112
|
-
getAvailableProviders() {
|
|
113
|
-
return ['openai']; // Server handles actual model execution
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Check if a specific provider is available
|
|
118
|
-
* @param {string} provider - Provider name
|
|
119
|
-
* @returns {boolean} True if provider is available
|
|
120
|
-
*/
|
|
121
|
-
isProviderAvailable(provider) {
|
|
122
|
-
return provider === 'openai';
|
|
123
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* omdTranscriptionService - AI-powered transcription service for handwritten content
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Transcription service using server endpoint
|
|
7
|
+
*/
|
|
8
|
+
export class omdTranscriptionService {
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.options = {
|
|
11
|
+
endpoint: options.endpoint || this._getDefaultEndpoint(),
|
|
12
|
+
defaultProvider: options.defaultProvider || 'openai',
|
|
13
|
+
defaultModel: options.defaultModel || 'gpt-4o',
|
|
14
|
+
...options
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get the default endpoint based on current environment
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
_getDefaultEndpoint() {
|
|
23
|
+
return '/.netlify/functions/transcribe';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Convert blob to base64
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
async _blobToBase64(blob) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
const reader = new FileReader();
|
|
33
|
+
reader.onload = () => {
|
|
34
|
+
const base64 = reader.result.split(',')[1];
|
|
35
|
+
resolve(base64);
|
|
36
|
+
};
|
|
37
|
+
reader.onerror = reject;
|
|
38
|
+
reader.readAsDataURL(blob);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Transcribe an image using the server endpoint
|
|
44
|
+
* @param {Blob} imageBlob - The image blob to transcribe
|
|
45
|
+
* @param {Object} options - Transcription options
|
|
46
|
+
* @param {string} options.prompt - Custom prompt for transcription
|
|
47
|
+
* @returns {Promise<Object>} Transcription result
|
|
48
|
+
*/
|
|
49
|
+
async transcribe(imageBlob, options = {}) {
|
|
50
|
+
try {
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
// Convert blob to base64
|
|
54
|
+
const base64Image = await this._blobToBase64(imageBlob);
|
|
55
|
+
|
|
56
|
+
// Call server endpoint
|
|
57
|
+
const response = await fetch(this.options.endpoint, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: {
|
|
60
|
+
'Content-Type': 'application/json'
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
imageBase64: base64Image,
|
|
64
|
+
prompt: options.prompt || 'Please transcribe the handwritten mathematical expression in this image. Return only the mathematical expression in pure format (no LaTeX, no dollar signs). For powers use ^, for fractions use /, for square roots use sqrt().',
|
|
65
|
+
model: options.model || this.options.defaultModel,
|
|
66
|
+
provider: options.provider || this.options.defaultProvider
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (!response.ok) {
|
|
71
|
+
throw new Error(`Transcription API error: ${response.status} ${response.statusText}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const result = await response.json();
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
text: (result.text || '').trim(),
|
|
79
|
+
provider: result.provider || this.options.defaultProvider,
|
|
80
|
+
model: result.model || (options.model || this.options.defaultModel),
|
|
81
|
+
confidence: result.confidence || 1.0
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error('Transcription error:', error);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Transcribe with fallback (same as transcribe for now)
|
|
92
|
+
* @param {Blob} imageBlob - The image blob to transcribe
|
|
93
|
+
* @param {Object} options - Transcription options
|
|
94
|
+
* @returns {Promise<Object>} Transcription result
|
|
95
|
+
*/
|
|
96
|
+
async transcribeWithFallback(imageBlob, options = {}) {
|
|
97
|
+
return this.transcribe(imageBlob, options);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Check if transcription service is available
|
|
102
|
+
* @returns {boolean} True if service is available
|
|
103
|
+
*/
|
|
104
|
+
isAvailable() {
|
|
105
|
+
return true; // Always available since we use server endpoint
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get available providers (simplified)
|
|
110
|
+
* @returns {Array} List of available providers
|
|
111
|
+
*/
|
|
112
|
+
getAvailableProviders() {
|
|
113
|
+
return ['openai']; // Server handles actual model execution
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Check if a specific provider is available
|
|
118
|
+
* @param {string} provider - Provider name
|
|
119
|
+
* @returns {boolean} True if provider is available
|
|
120
|
+
*/
|
|
121
|
+
isProviderAvailable(provider) {
|
|
122
|
+
return provider === 'openai';
|
|
123
|
+
}
|
|
124
124
|
}
|