learngraph 0.1.1 → 0.3.0
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/LICENSE +190 -21
- package/README.md +165 -3
- package/dist/cjs/llm/adapters/anthropic.js +124 -0
- package/dist/cjs/llm/adapters/anthropic.js.map +1 -0
- package/dist/cjs/llm/adapters/base.js +100 -0
- package/dist/cjs/llm/adapters/base.js.map +1 -0
- package/dist/cjs/llm/adapters/index.js +22 -0
- package/dist/cjs/llm/adapters/index.js.map +1 -0
- package/dist/cjs/llm/adapters/ollama.js +149 -0
- package/dist/cjs/llm/adapters/ollama.js.map +1 -0
- package/dist/cjs/llm/adapters/openai.js +126 -0
- package/dist/cjs/llm/adapters/openai.js.map +1 -0
- package/dist/cjs/llm/index.js +34 -5
- package/dist/cjs/llm/index.js.map +1 -1
- package/dist/cjs/llm/orchestrator.js +219 -0
- package/dist/cjs/llm/orchestrator.js.map +1 -0
- package/dist/cjs/llm/prompts.js +367 -0
- package/dist/cjs/llm/prompts.js.map +1 -0
- package/dist/cjs/parsers/base.js +189 -0
- package/dist/cjs/parsers/base.js.map +1 -0
- package/dist/cjs/parsers/demo.js +159 -0
- package/dist/cjs/parsers/demo.js.map +1 -0
- package/dist/cjs/parsers/extractor.js +191 -0
- package/dist/cjs/parsers/extractor.js.map +1 -0
- package/dist/cjs/parsers/index.js +43 -4
- package/dist/cjs/parsers/index.js.map +1 -1
- package/dist/cjs/parsers/json.js +157 -0
- package/dist/cjs/parsers/json.js.map +1 -0
- package/dist/cjs/parsers/markdown.js +168 -0
- package/dist/cjs/parsers/markdown.js.map +1 -0
- package/dist/cjs/parsers/samples.js +139 -0
- package/dist/cjs/parsers/samples.js.map +1 -0
- package/dist/cjs/storage/base.js +231 -0
- package/dist/cjs/storage/base.js.map +1 -0
- package/dist/cjs/storage/errors.js +128 -0
- package/dist/cjs/storage/errors.js.map +1 -0
- package/dist/cjs/storage/index.js +92 -5
- package/dist/cjs/storage/index.js.map +1 -1
- package/dist/cjs/storage/levelgraph.js +855 -0
- package/dist/cjs/storage/levelgraph.js.map +1 -0
- package/dist/cjs/storage/memory.js +447 -0
- package/dist/cjs/storage/memory.js.map +1 -0
- package/dist/cjs/storage/neo4j.js +866 -0
- package/dist/cjs/storage/neo4j.js.map +1 -0
- package/dist/cjs/storage/seeds.js +565 -0
- package/dist/cjs/storage/seeds.js.map +1 -0
- package/dist/cjs/types/llm.js +8 -0
- package/dist/cjs/types/llm.js.map +1 -0
- package/dist/cjs/types/parser.js +8 -0
- package/dist/cjs/types/parser.js.map +1 -0
- package/dist/esm/llm/adapters/anthropic.js +119 -0
- package/dist/esm/llm/adapters/anthropic.js.map +1 -0
- package/dist/esm/llm/adapters/base.js +95 -0
- package/dist/esm/llm/adapters/base.js.map +1 -0
- package/dist/esm/llm/adapters/index.js +10 -0
- package/dist/esm/llm/adapters/index.js.map +1 -0
- package/dist/esm/llm/adapters/ollama.js +144 -0
- package/dist/esm/llm/adapters/ollama.js.map +1 -0
- package/dist/esm/llm/adapters/openai.js +121 -0
- package/dist/esm/llm/adapters/openai.js.map +1 -0
- package/dist/esm/llm/index.js +12 -6
- package/dist/esm/llm/index.js.map +1 -1
- package/dist/esm/llm/orchestrator.js +214 -0
- package/dist/esm/llm/orchestrator.js.map +1 -0
- package/dist/esm/llm/prompts.js +360 -0
- package/dist/esm/llm/prompts.js.map +1 -0
- package/dist/esm/parsers/base.js +179 -0
- package/dist/esm/parsers/base.js.map +1 -0
- package/dist/esm/parsers/demo.js +154 -0
- package/dist/esm/parsers/demo.js.map +1 -0
- package/dist/esm/parsers/extractor.js +187 -0
- package/dist/esm/parsers/extractor.js.map +1 -0
- package/dist/esm/parsers/index.js +24 -5
- package/dist/esm/parsers/index.js.map +1 -1
- package/dist/esm/parsers/json.js +153 -0
- package/dist/esm/parsers/json.js.map +1 -0
- package/dist/esm/parsers/markdown.js +164 -0
- package/dist/esm/parsers/markdown.js.map +1 -0
- package/dist/esm/parsers/samples.js +136 -0
- package/dist/esm/parsers/samples.js.map +1 -0
- package/dist/esm/storage/base.js +221 -0
- package/dist/esm/storage/base.js.map +1 -0
- package/dist/esm/storage/errors.js +116 -0
- package/dist/esm/storage/errors.js.map +1 -0
- package/dist/esm/storage/index.js +71 -6
- package/dist/esm/storage/index.js.map +1 -1
- package/dist/esm/storage/levelgraph.js +818 -0
- package/dist/esm/storage/levelgraph.js.map +1 -0
- package/dist/esm/storage/memory.js +443 -0
- package/dist/esm/storage/memory.js.map +1 -0
- package/dist/esm/storage/neo4j.js +829 -0
- package/dist/esm/storage/neo4j.js.map +1 -0
- package/dist/esm/storage/seeds.js +561 -0
- package/dist/esm/storage/seeds.js.map +1 -0
- package/dist/esm/types/llm.js +7 -0
- package/dist/esm/types/llm.js.map +1 -0
- package/dist/esm/types/parser.js +7 -0
- package/dist/esm/types/parser.js.map +1 -0
- package/dist/types/llm/adapters/anthropic.d.ts +21 -0
- package/dist/types/llm/adapters/anthropic.d.ts.map +1 -0
- package/dist/types/llm/adapters/base.d.ts +46 -0
- package/dist/types/llm/adapters/base.d.ts.map +1 -0
- package/dist/types/llm/adapters/index.d.ts +11 -0
- package/dist/types/llm/adapters/index.d.ts.map +1 -0
- package/dist/types/llm/adapters/ollama.d.ts +30 -0
- package/dist/types/llm/adapters/ollama.d.ts.map +1 -0
- package/dist/types/llm/adapters/openai.d.ts +22 -0
- package/dist/types/llm/adapters/openai.d.ts.map +1 -0
- package/dist/types/llm/index.d.ts +5 -0
- package/dist/types/llm/index.d.ts.map +1 -1
- package/dist/types/llm/orchestrator.d.ts +35 -0
- package/dist/types/llm/orchestrator.d.ts.map +1 -0
- package/dist/types/llm/prompts.d.ts +269 -0
- package/dist/types/llm/prompts.d.ts.map +1 -0
- package/dist/types/parsers/base.d.ts +39 -0
- package/dist/types/parsers/base.d.ts.map +1 -0
- package/dist/types/parsers/demo.d.ts +87 -0
- package/dist/types/parsers/demo.d.ts.map +1 -0
- package/dist/types/parsers/extractor.d.ts +43 -0
- package/dist/types/parsers/extractor.d.ts.map +1 -0
- package/dist/types/parsers/index.d.ts +10 -0
- package/dist/types/parsers/index.d.ts.map +1 -1
- package/dist/types/parsers/json.d.ts +71 -0
- package/dist/types/parsers/json.d.ts.map +1 -0
- package/dist/types/parsers/markdown.d.ts +43 -0
- package/dist/types/parsers/markdown.d.ts.map +1 -0
- package/dist/types/parsers/samples.d.ts +27 -0
- package/dist/types/parsers/samples.d.ts.map +1 -0
- package/dist/types/storage/base.d.ts +39 -0
- package/dist/types/storage/base.d.ts.map +1 -0
- package/dist/types/storage/errors.d.ts +74 -0
- package/dist/types/storage/errors.d.ts.map +1 -0
- package/dist/types/storage/index.d.ts +50 -2
- package/dist/types/storage/index.d.ts.map +1 -1
- package/dist/types/storage/levelgraph.d.ts +92 -0
- package/dist/types/storage/levelgraph.d.ts.map +1 -0
- package/dist/types/storage/memory.d.ts +70 -0
- package/dist/types/storage/memory.d.ts.map +1 -0
- package/dist/types/storage/neo4j.d.ts +88 -0
- package/dist/types/storage/neo4j.d.ts.map +1 -0
- package/dist/types/storage/seeds.d.ts +27 -0
- package/dist/types/storage/seeds.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/llm.d.ts +298 -0
- package/dist/types/types/llm.d.ts.map +1 -0
- package/dist/types/types/parser.d.ts +208 -0
- package/dist/types/types/parser.d.ts.map +1 -0
- package/package.json +4 -2
- package/scripts/postinstall.js +68 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sample educational graphs for testing and demos
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { SkillNodeInput, PrerequisiteEdgeInput, GraphStorage, ImportResult } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Sample fractions curriculum (elementary math)
|
|
9
|
+
*/
|
|
10
|
+
export declare const FRACTIONS_CURRICULUM: {
|
|
11
|
+
nodes: SkillNodeInput[];
|
|
12
|
+
edges: PrerequisiteEdgeInput[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Sample programming fundamentals curriculum
|
|
16
|
+
*/
|
|
17
|
+
export declare const PROGRAMMING_CURRICULUM: {
|
|
18
|
+
nodes: SkillNodeInput[];
|
|
19
|
+
edges: PrerequisiteEdgeInput[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Seed a storage instance with sample data
|
|
23
|
+
*/
|
|
24
|
+
export declare function seedStorage(storage: GraphStorage, curriculum?: 'fractions' | 'programming' | 'all', options?: {
|
|
25
|
+
clearExisting?: boolean;
|
|
26
|
+
}): Promise<ImportResult>;
|
|
27
|
+
//# sourceMappingURL=seeds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/storage/seeds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAoThC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,qBAAqB,EAAE,CAAC;CA6MhC,CAAC;AAEF;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,UAAU,GAAE,WAAW,GAAG,aAAa,GAAG,KAAa,EACvD,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,YAAY,CAAC,CA0CvB"}
|
|
@@ -15,4 +15,6 @@ export type { Subgraph, GraphExport, GraphStats, GraphValidation, GraphValidatio
|
|
|
15
15
|
export { GRAPH_VERSION } from './graph.js';
|
|
16
16
|
export type { QueryOperator, QueryFilter, QuerySort, QueryPagination, SkillQuery, ZPDResult, LearningPath, LearningSession, ReviewSchedule, ReviewItem, ZPDOptions, PathOptions, ReviewOptions, } from './query.js';
|
|
17
17
|
export type { StorageBackend, StorageConfigBase, Neo4jConfig, LevelGraphConfig, MemoryConfig, StorageConfig, ConnectionStatus, ImportResult, GraphStorage, StorageFactory, } from './storage.js';
|
|
18
|
+
export type { ParseFormat, DocumentMetadata, LearningObjective, Topic, Module, ParseResult, ParseWarning, ParseStats, ExtractedSkill, SkillExtractionResult, ParseOptions, ExtractionOptions, Parser, SkillExtractor, } from './parser.js';
|
|
19
|
+
export type { LLMProvider, LLMConfig, OpenAIConfig, AnthropicConfig, OllamaConfig, MessageRole, ChatMessage, CompletionRequest, CompletionResponse, SkillExtractionRequest, ExtractedSkillLLM, SkillExtractionResponse, PrerequisiteInferenceRequest, InferredPrerequisite, PrerequisiteInferenceResponse, BloomAnalysisRequest, BloomAnalysisResponse, DecompositionRequest, DecompositionResponse, LLMAdapter, LLMOrchestrator, } from './llm.js';
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC;AAKtB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,cAAc,GACf,MAAM,aAAa,CAAC;AAKrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM provider types for skill extraction and prerequisite inference
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { BloomLevel } from './bloom.js';
|
|
7
|
+
import type { SkillNodeInput } from './skill.js';
|
|
8
|
+
/**
|
|
9
|
+
* Supported LLM providers
|
|
10
|
+
*/
|
|
11
|
+
export type LLMProvider = 'openai' | 'anthropic' | 'ollama' | 'custom';
|
|
12
|
+
/**
|
|
13
|
+
* Base configuration for all LLM providers
|
|
14
|
+
*/
|
|
15
|
+
export interface LLMConfig {
|
|
16
|
+
/** Provider type */
|
|
17
|
+
provider: LLMProvider;
|
|
18
|
+
/** Model identifier (e.g., 'gpt-4o', 'claude-3-5-sonnet-20241022', 'llama3.2') */
|
|
19
|
+
model: string;
|
|
20
|
+
/** API key (not needed for Ollama) */
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
/** Base URL for API (optional, for custom endpoints) */
|
|
23
|
+
baseUrl?: string;
|
|
24
|
+
/** Maximum tokens to generate */
|
|
25
|
+
maxTokens?: number;
|
|
26
|
+
/** Temperature for generation (0-1) */
|
|
27
|
+
temperature?: number;
|
|
28
|
+
/** Request timeout in milliseconds */
|
|
29
|
+
timeout?: number;
|
|
30
|
+
/** Number of retries on failure */
|
|
31
|
+
retries?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* OpenAI-specific configuration
|
|
35
|
+
*/
|
|
36
|
+
export interface OpenAIConfig extends LLMConfig {
|
|
37
|
+
provider: 'openai';
|
|
38
|
+
/** Organization ID (optional) */
|
|
39
|
+
organization?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Anthropic-specific configuration
|
|
43
|
+
*/
|
|
44
|
+
export interface AnthropicConfig extends LLMConfig {
|
|
45
|
+
provider: 'anthropic';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Ollama-specific configuration (local models)
|
|
49
|
+
*/
|
|
50
|
+
export interface OllamaConfig extends LLMConfig {
|
|
51
|
+
provider: 'ollama';
|
|
52
|
+
/** Default: http://localhost:11434 */
|
|
53
|
+
baseUrl?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Message role in conversation
|
|
57
|
+
*/
|
|
58
|
+
export type MessageRole = 'system' | 'user' | 'assistant';
|
|
59
|
+
/**
|
|
60
|
+
* Chat message
|
|
61
|
+
*/
|
|
62
|
+
export interface ChatMessage {
|
|
63
|
+
role: MessageRole;
|
|
64
|
+
content: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* LLM completion request
|
|
68
|
+
*/
|
|
69
|
+
export interface CompletionRequest {
|
|
70
|
+
/** Messages for chat completion */
|
|
71
|
+
messages: ChatMessage[];
|
|
72
|
+
/** Override temperature for this request */
|
|
73
|
+
temperature?: number;
|
|
74
|
+
/** Override max tokens for this request */
|
|
75
|
+
maxTokens?: number;
|
|
76
|
+
/** Response format (for structured output) */
|
|
77
|
+
responseFormat?: 'text' | 'json';
|
|
78
|
+
/** JSON schema for structured output (if responseFormat is 'json') */
|
|
79
|
+
jsonSchema?: Record<string, unknown>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* LLM completion response
|
|
83
|
+
*/
|
|
84
|
+
export interface CompletionResponse {
|
|
85
|
+
/** Generated text content */
|
|
86
|
+
content: string;
|
|
87
|
+
/** Parsed JSON (if responseFormat was 'json') */
|
|
88
|
+
json?: unknown;
|
|
89
|
+
/** Token usage statistics */
|
|
90
|
+
usage: {
|
|
91
|
+
promptTokens: number;
|
|
92
|
+
completionTokens: number;
|
|
93
|
+
totalTokens: number;
|
|
94
|
+
};
|
|
95
|
+
/** Model used for completion */
|
|
96
|
+
model: string;
|
|
97
|
+
/** Finish reason */
|
|
98
|
+
finishReason: 'stop' | 'length' | 'content_filter' | 'error';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Request to extract skills from curriculum content
|
|
102
|
+
*/
|
|
103
|
+
export interface SkillExtractionRequest {
|
|
104
|
+
/** Raw curriculum/syllabus content */
|
|
105
|
+
content: string;
|
|
106
|
+
/** Content format hint */
|
|
107
|
+
format?: 'markdown' | 'text' | 'html' | 'pdf';
|
|
108
|
+
/** Domain/subject area hint */
|
|
109
|
+
domain?: string;
|
|
110
|
+
/** Target audience/grade level */
|
|
111
|
+
gradeLevel?: string;
|
|
112
|
+
/** Additional context for extraction */
|
|
113
|
+
context?: string;
|
|
114
|
+
/** Tags to apply to all extracted skills */
|
|
115
|
+
tags?: string[];
|
|
116
|
+
/** Minimum confidence threshold (0-1) */
|
|
117
|
+
minConfidence?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* LLM-extracted skill with metadata
|
|
121
|
+
*/
|
|
122
|
+
export interface ExtractedSkillLLM {
|
|
123
|
+
/** Skill name (concise) */
|
|
124
|
+
name: string;
|
|
125
|
+
/** Skill description */
|
|
126
|
+
description: string;
|
|
127
|
+
/** Detected Bloom's level */
|
|
128
|
+
bloomLevel: BloomLevel;
|
|
129
|
+
/** Difficulty estimate (0-1) */
|
|
130
|
+
difficulty: number;
|
|
131
|
+
/** Confidence in extraction (0-1) */
|
|
132
|
+
confidence: number;
|
|
133
|
+
/** Whether this is a threshold concept */
|
|
134
|
+
isThresholdConcept: boolean;
|
|
135
|
+
/** Estimated time to master in minutes */
|
|
136
|
+
estimatedMinutes?: number;
|
|
137
|
+
/** Source text that generated this skill */
|
|
138
|
+
sourceText?: string;
|
|
139
|
+
/** LLM's reasoning for this extraction */
|
|
140
|
+
reasoning?: string;
|
|
141
|
+
/** Keywords/concepts associated with this skill */
|
|
142
|
+
keywords?: string[];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Result of skill extraction
|
|
146
|
+
*/
|
|
147
|
+
export interface SkillExtractionResponse {
|
|
148
|
+
/** Extracted skills */
|
|
149
|
+
skills: ExtractedSkillLLM[];
|
|
150
|
+
/** Overall extraction confidence */
|
|
151
|
+
confidence: number;
|
|
152
|
+
/** Token usage */
|
|
153
|
+
usage: CompletionResponse['usage'];
|
|
154
|
+
/** Warnings or notes from extraction */
|
|
155
|
+
warnings: string[];
|
|
156
|
+
/** Processing time in milliseconds */
|
|
157
|
+
durationMs: number;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Request to infer prerequisites between skills
|
|
161
|
+
*/
|
|
162
|
+
export interface PrerequisiteInferenceRequest {
|
|
163
|
+
/** Skills to analyze for prerequisites */
|
|
164
|
+
skills: Array<{
|
|
165
|
+
id: string;
|
|
166
|
+
name: string;
|
|
167
|
+
description: string;
|
|
168
|
+
bloomLevel: BloomLevel;
|
|
169
|
+
difficulty: number;
|
|
170
|
+
}>;
|
|
171
|
+
/** Domain context */
|
|
172
|
+
domain?: string;
|
|
173
|
+
/** Whether to infer transitive prerequisites */
|
|
174
|
+
inferTransitive?: boolean;
|
|
175
|
+
/** Minimum confidence for edge suggestion */
|
|
176
|
+
minConfidence?: number;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Inferred prerequisite relationship
|
|
180
|
+
*/
|
|
181
|
+
export interface InferredPrerequisite {
|
|
182
|
+
/** Source skill ID (the prerequisite) */
|
|
183
|
+
sourceId: string;
|
|
184
|
+
/** Target skill ID (depends on source) */
|
|
185
|
+
targetId: string;
|
|
186
|
+
/** Relationship strength (0-1) */
|
|
187
|
+
strength: number;
|
|
188
|
+
/** Type of prerequisite */
|
|
189
|
+
type: 'hard' | 'soft' | 'recommended';
|
|
190
|
+
/** Confidence in this inference (0-1) */
|
|
191
|
+
confidence: number;
|
|
192
|
+
/** LLM's reasoning for this relationship */
|
|
193
|
+
reasoning: string;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Result of prerequisite inference
|
|
197
|
+
*/
|
|
198
|
+
export interface PrerequisiteInferenceResponse {
|
|
199
|
+
/** Inferred prerequisites */
|
|
200
|
+
prerequisites: InferredPrerequisite[];
|
|
201
|
+
/** Token usage */
|
|
202
|
+
usage: CompletionResponse['usage'];
|
|
203
|
+
/** Processing time in milliseconds */
|
|
204
|
+
durationMs: number;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Request to analyze Bloom's level of text
|
|
208
|
+
*/
|
|
209
|
+
export interface BloomAnalysisRequest {
|
|
210
|
+
/** Text to analyze */
|
|
211
|
+
text: string;
|
|
212
|
+
/** Context for analysis */
|
|
213
|
+
context?: string;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Result of Bloom's level analysis
|
|
217
|
+
*/
|
|
218
|
+
export interface BloomAnalysisResponse {
|
|
219
|
+
/** Detected Bloom's level */
|
|
220
|
+
level: BloomLevel;
|
|
221
|
+
/** Confidence in detection (0-1) */
|
|
222
|
+
confidence: number;
|
|
223
|
+
/** Key verbs/phrases that indicated this level */
|
|
224
|
+
indicators: string[];
|
|
225
|
+
/** LLM's reasoning */
|
|
226
|
+
reasoning: string;
|
|
227
|
+
/** Token usage */
|
|
228
|
+
usage: CompletionResponse['usage'];
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Request to decompose curriculum into a skill graph
|
|
232
|
+
*/
|
|
233
|
+
export interface DecompositionRequest {
|
|
234
|
+
/** Curriculum content */
|
|
235
|
+
content: string;
|
|
236
|
+
/** Title of the course/curriculum */
|
|
237
|
+
title?: string;
|
|
238
|
+
/** Domain/subject */
|
|
239
|
+
domain?: string;
|
|
240
|
+
/** Target grade level */
|
|
241
|
+
gradeLevel?: string;
|
|
242
|
+
/** Additional context */
|
|
243
|
+
context?: string;
|
|
244
|
+
/** Maximum depth of skill hierarchy */
|
|
245
|
+
maxDepth?: number;
|
|
246
|
+
/** Whether to infer prerequisites */
|
|
247
|
+
inferPrerequisites?: boolean;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Result of curriculum decomposition
|
|
251
|
+
*/
|
|
252
|
+
export interface DecompositionResponse {
|
|
253
|
+
/** Course/curriculum title */
|
|
254
|
+
title: string;
|
|
255
|
+
/** Extracted skills */
|
|
256
|
+
skills: ExtractedSkillLLM[];
|
|
257
|
+
/** Inferred prerequisites (if requested) */
|
|
258
|
+
prerequisites: InferredPrerequisite[];
|
|
259
|
+
/** Skill inputs ready for storage */
|
|
260
|
+
skillInputs: SkillNodeInput[];
|
|
261
|
+
/** Token usage */
|
|
262
|
+
usage: CompletionResponse['usage'];
|
|
263
|
+
/** Processing time in milliseconds */
|
|
264
|
+
durationMs: number;
|
|
265
|
+
/** Warnings from processing */
|
|
266
|
+
warnings: string[];
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* LLM adapter interface for different providers
|
|
270
|
+
*/
|
|
271
|
+
export interface LLMAdapter {
|
|
272
|
+
/** Provider name */
|
|
273
|
+
readonly provider: LLMProvider;
|
|
274
|
+
/** Model identifier */
|
|
275
|
+
readonly model: string;
|
|
276
|
+
/** Send a completion request */
|
|
277
|
+
complete(request: CompletionRequest): Promise<CompletionResponse>;
|
|
278
|
+
/** Check if the adapter is properly configured */
|
|
279
|
+
isConfigured(): boolean;
|
|
280
|
+
/** Get current configuration (without sensitive data) */
|
|
281
|
+
getConfig(): Omit<LLMConfig, 'apiKey'>;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* High-level LLM orchestrator for educational tasks
|
|
285
|
+
*/
|
|
286
|
+
export interface LLMOrchestrator {
|
|
287
|
+
/** Extract skills from curriculum content */
|
|
288
|
+
extractSkills(request: SkillExtractionRequest): Promise<SkillExtractionResponse>;
|
|
289
|
+
/** Infer prerequisites between skills */
|
|
290
|
+
inferPrerequisites(request: PrerequisiteInferenceRequest): Promise<PrerequisiteInferenceResponse>;
|
|
291
|
+
/** Analyze Bloom's level of text */
|
|
292
|
+
analyzeBloomLevel(request: BloomAnalysisRequest): Promise<BloomAnalysisResponse>;
|
|
293
|
+
/** Full curriculum decomposition */
|
|
294
|
+
decompose(request: DecompositionRequest): Promise<DecompositionResponse>;
|
|
295
|
+
/** Get the underlying adapter */
|
|
296
|
+
getAdapter(): LLMAdapter;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/types/llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser types for syllabus and curriculum parsing
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { BloomLevel } from './bloom.js';
|
|
7
|
+
import type { SkillNodeInput } from './skill.js';
|
|
8
|
+
/**
|
|
9
|
+
* Supported input formats for parsing
|
|
10
|
+
*/
|
|
11
|
+
export type ParseFormat = 'markdown' | 'json' | 'yaml' | 'pdf' | 'text';
|
|
12
|
+
/**
|
|
13
|
+
* Source document metadata
|
|
14
|
+
*/
|
|
15
|
+
export interface DocumentMetadata {
|
|
16
|
+
/** Original filename or URL */
|
|
17
|
+
source: string;
|
|
18
|
+
/** Document format */
|
|
19
|
+
format: ParseFormat;
|
|
20
|
+
/** Document title if detected */
|
|
21
|
+
title?: string;
|
|
22
|
+
/** Course or subject name */
|
|
23
|
+
course?: string;
|
|
24
|
+
/** Institution name */
|
|
25
|
+
institution?: string;
|
|
26
|
+
/** Grade level or audience */
|
|
27
|
+
gradeLevel?: string;
|
|
28
|
+
/** Parse timestamp */
|
|
29
|
+
parsedAt: string;
|
|
30
|
+
/** Additional metadata */
|
|
31
|
+
custom?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A learning objective extracted from a syllabus
|
|
35
|
+
*/
|
|
36
|
+
export interface LearningObjective {
|
|
37
|
+
/** Original text of the objective */
|
|
38
|
+
text: string;
|
|
39
|
+
/** Detected Bloom's level (null if not detected) */
|
|
40
|
+
bloomLevel: BloomLevel | null;
|
|
41
|
+
/** Confidence score for Bloom's detection (0-1) */
|
|
42
|
+
bloomConfidence: number;
|
|
43
|
+
/** Chapter or section this belongs to */
|
|
44
|
+
section?: string;
|
|
45
|
+
/** Week or unit number */
|
|
46
|
+
week?: number;
|
|
47
|
+
/** Suggested skill name derived from objective */
|
|
48
|
+
suggestedName?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A topic or concept extracted from a syllabus
|
|
52
|
+
*/
|
|
53
|
+
export interface Topic {
|
|
54
|
+
/** Topic name */
|
|
55
|
+
name: string;
|
|
56
|
+
/** Description if available */
|
|
57
|
+
description?: string;
|
|
58
|
+
/** Parent topic (for hierarchical structures) */
|
|
59
|
+
parent?: string;
|
|
60
|
+
/** Week or unit number */
|
|
61
|
+
week?: number;
|
|
62
|
+
/** Associated learning objectives */
|
|
63
|
+
objectives: LearningObjective[];
|
|
64
|
+
/** Estimated time in minutes */
|
|
65
|
+
estimatedMinutes?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A module or chapter extracted from a syllabus
|
|
69
|
+
*/
|
|
70
|
+
export interface Module {
|
|
71
|
+
/** Module/chapter number or ID */
|
|
72
|
+
id: string;
|
|
73
|
+
/** Module title */
|
|
74
|
+
title: string;
|
|
75
|
+
/** Description or summary */
|
|
76
|
+
description?: string;
|
|
77
|
+
/** Week number (for weekly syllabi) */
|
|
78
|
+
week?: number;
|
|
79
|
+
/** Topics covered in this module */
|
|
80
|
+
topics: Topic[];
|
|
81
|
+
/** Direct learning objectives (not under topics) */
|
|
82
|
+
objectives: LearningObjective[];
|
|
83
|
+
/** Estimated duration in minutes */
|
|
84
|
+
estimatedMinutes?: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Result of parsing a syllabus document
|
|
88
|
+
*/
|
|
89
|
+
export interface ParseResult {
|
|
90
|
+
/** Document metadata */
|
|
91
|
+
metadata: DocumentMetadata;
|
|
92
|
+
/** Extracted modules/chapters */
|
|
93
|
+
modules: Module[];
|
|
94
|
+
/** Standalone topics (not in modules) */
|
|
95
|
+
topics: Topic[];
|
|
96
|
+
/** Standalone objectives (not in topics) */
|
|
97
|
+
objectives: LearningObjective[];
|
|
98
|
+
/** Parse warnings (non-fatal issues) */
|
|
99
|
+
warnings: ParseWarning[];
|
|
100
|
+
/** Parse statistics */
|
|
101
|
+
stats: ParseStats;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Warning generated during parsing
|
|
105
|
+
*/
|
|
106
|
+
export interface ParseWarning {
|
|
107
|
+
/** Warning type */
|
|
108
|
+
type: 'ambiguous_bloom' | 'missing_objective' | 'unclear_structure' | 'unknown';
|
|
109
|
+
/** Warning message */
|
|
110
|
+
message: string;
|
|
111
|
+
/** Line number or location (if applicable) */
|
|
112
|
+
location?: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Statistics about the parse operation
|
|
116
|
+
*/
|
|
117
|
+
export interface ParseStats {
|
|
118
|
+
/** Total modules found */
|
|
119
|
+
moduleCount: number;
|
|
120
|
+
/** Total topics found */
|
|
121
|
+
topicCount: number;
|
|
122
|
+
/** Total learning objectives found */
|
|
123
|
+
objectiveCount: number;
|
|
124
|
+
/** Objectives with detected Bloom's level */
|
|
125
|
+
bloomDetectedCount: number;
|
|
126
|
+
/** Parse duration in milliseconds */
|
|
127
|
+
durationMs: number;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* An extracted skill ready for graph creation
|
|
131
|
+
*/
|
|
132
|
+
export interface ExtractedSkill {
|
|
133
|
+
/** Suggested skill input (ready for storage) */
|
|
134
|
+
skill: SkillNodeInput;
|
|
135
|
+
/** Source objective or topic */
|
|
136
|
+
source: LearningObjective | Topic;
|
|
137
|
+
/** Extraction confidence (0-1) */
|
|
138
|
+
confidence: number;
|
|
139
|
+
/** Suggested prerequisites (names, not IDs yet) */
|
|
140
|
+
suggestedPrerequisites?: string[];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Result of extracting skills from parsed content
|
|
144
|
+
*/
|
|
145
|
+
export interface SkillExtractionResult {
|
|
146
|
+
/** Extracted skills */
|
|
147
|
+
skills: ExtractedSkill[];
|
|
148
|
+
/** Suggested prerequisite relationships */
|
|
149
|
+
suggestedEdges: Array<{
|
|
150
|
+
sourceName: string;
|
|
151
|
+
targetName: string;
|
|
152
|
+
strength: number;
|
|
153
|
+
reasoning?: string;
|
|
154
|
+
}>;
|
|
155
|
+
/** Extraction warnings */
|
|
156
|
+
warnings: ParseWarning[];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Options for parsing operations
|
|
160
|
+
*/
|
|
161
|
+
export interface ParseOptions {
|
|
162
|
+
/** Attempt to detect Bloom's levels */
|
|
163
|
+
detectBloom?: boolean;
|
|
164
|
+
/** Extract time estimates */
|
|
165
|
+
extractTime?: boolean;
|
|
166
|
+
/** Suggest skill names from objectives */
|
|
167
|
+
suggestNames?: boolean;
|
|
168
|
+
/** Include raw text in output */
|
|
169
|
+
includeRaw?: boolean;
|
|
170
|
+
/** Custom section headers to recognize */
|
|
171
|
+
sectionHeaders?: string[];
|
|
172
|
+
/** Custom objective markers (e.g., "LO:", "Students will be able to:") */
|
|
173
|
+
objectiveMarkers?: string[];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Options for skill extraction
|
|
177
|
+
*/
|
|
178
|
+
export interface ExtractionOptions extends ParseOptions {
|
|
179
|
+
/** Default difficulty for extracted skills */
|
|
180
|
+
defaultDifficulty?: number;
|
|
181
|
+
/** Default mastery threshold */
|
|
182
|
+
defaultMasteryThreshold?: number;
|
|
183
|
+
/** Default estimated minutes */
|
|
184
|
+
defaultEstimatedMinutes?: number;
|
|
185
|
+
/** Tags to apply to all extracted skills */
|
|
186
|
+
tags?: string[];
|
|
187
|
+
/** Domain to apply to all extracted skills */
|
|
188
|
+
domain?: string;
|
|
189
|
+
/** Grade level to apply */
|
|
190
|
+
gradeLevel?: string;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Base parser interface
|
|
194
|
+
*/
|
|
195
|
+
export interface Parser {
|
|
196
|
+
/** Parse content from a string */
|
|
197
|
+
parse(content: string, options?: ParseOptions): Promise<ParseResult>;
|
|
198
|
+
/** Get supported format */
|
|
199
|
+
format: ParseFormat;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Skill extractor interface (can use LLM)
|
|
203
|
+
*/
|
|
204
|
+
export interface SkillExtractor {
|
|
205
|
+
/** Extract skills from parse result */
|
|
206
|
+
extract(parseResult: ParseResult, options?: ExtractionOptions): Promise<SkillExtractionResult>;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/types/parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learngraph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The world's first AI-powered learning path generator. Transform syllabi into personalized mastery paths with Zone of Proximal Development (ZPD), Bloom's Taxonomy, spaced repetition, and Bayesian Knowledge Tracing built in. Every student's path to mastery.",
|
|
5
5
|
"author": "Dr. Ernesto Lee <dr.ernesto.lee@gmail.com>",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://github.com/fenago/Jali#readme",
|
|
8
8
|
"bugs": {
|
|
9
9
|
"url": "https://github.com/fenago/Jali/issues"
|
|
@@ -127,10 +127,12 @@
|
|
|
127
127
|
},
|
|
128
128
|
"files": [
|
|
129
129
|
"dist",
|
|
130
|
+
"scripts",
|
|
130
131
|
"README.md",
|
|
131
132
|
"LICENSE"
|
|
132
133
|
],
|
|
133
134
|
"scripts": {
|
|
135
|
+
"postinstall": "node scripts/postinstall.js || true",
|
|
134
136
|
"build": "npm run build:esm && npm run build:cjs && npm run build:types",
|
|
135
137
|
"build:esm": "tsc -p tsconfig.esm.json",
|
|
136
138
|
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* LearnGraph Post-Install Script
|
|
5
|
+
* Displays welcome message with quick start guide
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const CYAN = '\x1b[36m';
|
|
9
|
+
const YELLOW = '\x1b[33m';
|
|
10
|
+
const GREEN = '\x1b[32m';
|
|
11
|
+
const MAGENTA = '\x1b[35m';
|
|
12
|
+
const WHITE = '\x1b[37m';
|
|
13
|
+
const BOLD = '\x1b[1m';
|
|
14
|
+
const DIM = '\x1b[2m';
|
|
15
|
+
const RESET = '\x1b[0m';
|
|
16
|
+
|
|
17
|
+
const ascii = `
|
|
18
|
+
${CYAN}${BOLD}
|
|
19
|
+
╦ ╔═╗╔═╗╦═╗╔╗╔ ╔═╗╦═╗╔═╗╔═╗╦ ╦
|
|
20
|
+
║ ║╣ ╠═╣╠╦╝║║║ ║ ╦╠╦╝╠═╣╠═╝╠═╣
|
|
21
|
+
╩═╝╚═╝╩ ╩╩╚═╝╚╝ ╚═╝╩╚═╩ ╩╩ ╩ ╩
|
|
22
|
+
${RESET}
|
|
23
|
+
${YELLOW} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}
|
|
24
|
+
${WHITE}${BOLD} AI-Powered Learning Path Generator${RESET}
|
|
25
|
+
${YELLOW} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}
|
|
26
|
+
|
|
27
|
+
${DIM} Transform syllabi into personalized mastery paths${RESET}
|
|
28
|
+
${DIM} with ZPD, Bloom's Taxonomy & Knowledge Tracing${RESET}
|
|
29
|
+
|
|
30
|
+
${MAGENTA}${BOLD} Created by Dr. Ernesto Lee${RESET}
|
|
31
|
+
${CYAN} https://DrLee.ai${RESET}
|
|
32
|
+
|
|
33
|
+
${GREEN}${BOLD} Quick Start${RESET}
|
|
34
|
+
${GREEN} ───────────${RESET}
|
|
35
|
+
|
|
36
|
+
${WHITE} // In-memory storage (great for testing)${RESET}
|
|
37
|
+
${DIM} import { MemoryStorage } from 'learngraph/storage';
|
|
38
|
+
|
|
39
|
+
const storage = new MemoryStorage();
|
|
40
|
+
await storage.connect({ backend: 'memory' });
|
|
41
|
+
|
|
42
|
+
const skill = await storage.createSkill({
|
|
43
|
+
name: 'Add Fractions',
|
|
44
|
+
description: 'Add fractions with like denominators',
|
|
45
|
+
bloomLevel: 'apply',
|
|
46
|
+
difficulty: 0.4,
|
|
47
|
+
isThresholdConcept: false,
|
|
48
|
+
masteryThreshold: 0.8,
|
|
49
|
+
estimatedMinutes: 30,
|
|
50
|
+
tags: ['math', 'fractions'],
|
|
51
|
+
metadata: {}
|
|
52
|
+
});${RESET}
|
|
53
|
+
|
|
54
|
+
${GREEN}${BOLD} Storage Backends${RESET}
|
|
55
|
+
${GREEN} ────────────────${RESET}
|
|
56
|
+
|
|
57
|
+
${WHITE} Memory${RESET} ${DIM}Built-in, zero config${RESET}
|
|
58
|
+
${WHITE} LevelGraph${RESET} ${DIM}npm install level levelgraph${RESET}
|
|
59
|
+
${WHITE} Neo4j${RESET} ${DIM}npm install neo4j-driver${RESET}
|
|
60
|
+
|
|
61
|
+
${YELLOW} Docs:${RESET} ${CYAN}https://github.com/fenago/Jali${RESET}
|
|
62
|
+
${YELLOW} Issues:${RESET} ${CYAN}https://github.com/fenago/Jali/issues${RESET}
|
|
63
|
+
|
|
64
|
+
${GREEN}${BOLD} Thank you for using LearnGraph!${RESET}
|
|
65
|
+
|
|
66
|
+
`;
|
|
67
|
+
|
|
68
|
+
console.log(ascii);
|