lazlo-ai 1.0.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.
Files changed (126) hide show
  1. package/.env.example +9 -0
  2. package/README.md +278 -0
  3. package/dist/cache/semantic.d.ts +39 -0
  4. package/dist/cache/semantic.d.ts.map +1 -0
  5. package/dist/cache/semantic.js +134 -0
  6. package/dist/cache/semantic.js.map +1 -0
  7. package/dist/chains/llmchain.d.ts +65 -0
  8. package/dist/chains/llmchain.d.ts.map +1 -0
  9. package/dist/chains/llmchain.js +137 -0
  10. package/dist/chains/llmchain.js.map +1 -0
  11. package/dist/chains/rag.d.ts +23 -0
  12. package/dist/chains/rag.d.ts.map +1 -0
  13. package/dist/chains/rag.js +47 -0
  14. package/dist/chains/rag.js.map +1 -0
  15. package/dist/core/types.d.ts +130 -0
  16. package/dist/core/types.d.ts.map +1 -0
  17. package/dist/core/types.js +8 -0
  18. package/dist/core/types.js.map +1 -0
  19. package/dist/document_loaders/index.d.ts +61 -0
  20. package/dist/document_loaders/index.d.ts.map +1 -0
  21. package/dist/document_loaders/index.js +183 -0
  22. package/dist/document_loaders/index.js.map +1 -0
  23. package/dist/embeddings/google.d.ts +43 -0
  24. package/dist/embeddings/google.d.ts.map +1 -0
  25. package/dist/embeddings/google.js +90 -0
  26. package/dist/embeddings/google.js.map +1 -0
  27. package/dist/embeddings/local.d.ts +64 -0
  28. package/dist/embeddings/local.d.ts.map +1 -0
  29. package/dist/embeddings/local.js +95 -0
  30. package/dist/embeddings/local.js.map +1 -0
  31. package/dist/evals/judge.d.ts +22 -0
  32. package/dist/evals/judge.d.ts.map +1 -0
  33. package/dist/evals/judge.js +77 -0
  34. package/dist/evals/judge.js.map +1 -0
  35. package/dist/index.d.ts +28 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +84 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/memory/buffer.d.ts +64 -0
  40. package/dist/memory/buffer.d.ts.map +1 -0
  41. package/dist/memory/buffer.js +168 -0
  42. package/dist/memory/buffer.js.map +1 -0
  43. package/dist/parsers/output.d.ts +64 -0
  44. package/dist/parsers/output.d.ts.map +1 -0
  45. package/dist/parsers/output.js +148 -0
  46. package/dist/parsers/output.js.map +1 -0
  47. package/dist/prompts/registry.d.ts +65 -0
  48. package/dist/prompts/registry.d.ts.map +1 -0
  49. package/dist/prompts/registry.js +170 -0
  50. package/dist/prompts/registry.js.map +1 -0
  51. package/dist/providers/ollama.d.ts +30 -0
  52. package/dist/providers/ollama.d.ts.map +1 -0
  53. package/dist/providers/ollama.js +104 -0
  54. package/dist/providers/ollama.js.map +1 -0
  55. package/dist/providers/openai.d.ts +46 -0
  56. package/dist/providers/openai.d.ts.map +1 -0
  57. package/dist/providers/openai.js +228 -0
  58. package/dist/providers/openai.js.map +1 -0
  59. package/dist/retrievers/index.d.ts +71 -0
  60. package/dist/retrievers/index.d.ts.map +1 -0
  61. package/dist/retrievers/index.js +130 -0
  62. package/dist/retrievers/index.js.map +1 -0
  63. package/dist/router/smartrouter.d.ts +36 -0
  64. package/dist/router/smartrouter.d.ts.map +1 -0
  65. package/dist/router/smartrouter.js +132 -0
  66. package/dist/router/smartrouter.js.map +1 -0
  67. package/dist/text_splitters/index.d.ts +28 -0
  68. package/dist/text_splitters/index.d.ts.map +1 -0
  69. package/dist/text_splitters/index.js +109 -0
  70. package/dist/text_splitters/index.js.map +1 -0
  71. package/dist/tools/decorator.d.ts +26 -0
  72. package/dist/tools/decorator.d.ts.map +1 -0
  73. package/dist/tools/decorator.js +102 -0
  74. package/dist/tools/decorator.js.map +1 -0
  75. package/dist/tools/index.d.ts +7 -0
  76. package/dist/tools/index.d.ts.map +1 -0
  77. package/dist/tools/index.js +6 -0
  78. package/dist/tools/index.js.map +1 -0
  79. package/dist/tools/keiro.d.ts +20 -0
  80. package/dist/tools/keiro.d.ts.map +1 -0
  81. package/dist/tools/keiro.js +67 -0
  82. package/dist/tools/keiro.js.map +1 -0
  83. package/dist/tracing/tracer.d.ts +56 -0
  84. package/dist/tracing/tracer.d.ts.map +1 -0
  85. package/dist/tracing/tracer.js +125 -0
  86. package/dist/tracing/tracer.js.map +1 -0
  87. package/dist/utils/logger.d.ts +25 -0
  88. package/dist/utils/logger.d.ts.map +1 -0
  89. package/dist/utils/logger.js +50 -0
  90. package/dist/utils/logger.js.map +1 -0
  91. package/dist/utils/pricing.d.ts +31 -0
  92. package/dist/utils/pricing.d.ts.map +1 -0
  93. package/dist/utils/pricing.js +108 -0
  94. package/dist/utils/pricing.js.map +1 -0
  95. package/dist/vectorstores/index.d.ts +62 -0
  96. package/dist/vectorstores/index.d.ts.map +1 -0
  97. package/dist/vectorstores/index.js +244 -0
  98. package/dist/vectorstores/index.js.map +1 -0
  99. package/package.json +48 -0
  100. package/src/cache/semantic.ts +175 -0
  101. package/src/chains/llmchain.ts +194 -0
  102. package/src/chains/rag.ts +65 -0
  103. package/src/core/types.ts +178 -0
  104. package/src/document_loaders/index.ts +223 -0
  105. package/src/embeddings/google.ts +119 -0
  106. package/src/embeddings/local.ts +118 -0
  107. package/src/evals/judge.ts +99 -0
  108. package/src/index.ts +121 -0
  109. package/src/memory/buffer.ts +222 -0
  110. package/src/parsers/output.ts +195 -0
  111. package/src/prompts/registry.ts +205 -0
  112. package/src/providers/ollama.ts +151 -0
  113. package/src/providers/openai.ts +320 -0
  114. package/src/retrievers/index.ts +182 -0
  115. package/src/router/smartrouter.ts +172 -0
  116. package/src/text_splitters/index.ts +145 -0
  117. package/src/tools/decorator.ts +145 -0
  118. package/src/tools/index.ts +7 -0
  119. package/src/tools/keiro.ts +92 -0
  120. package/src/tracing/tracer.ts +178 -0
  121. package/src/utils/logger.ts +62 -0
  122. package/src/utils/pricing.ts +133 -0
  123. package/src/vectorstores/index.ts +338 -0
  124. package/test-full.mjs +552 -0
  125. package/test.mjs +74 -0
  126. package/tsconfig.json +30 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Local Embeddings
3
+ *
4
+ * Zero-cost, completely offline embedding generation
5
+ * Uses a simple hash-based approach for demonstration
6
+ * For production, use transformers.js or ONNX runtime
7
+ */
8
+ /**
9
+ * Local Embeddings
10
+ *
11
+ * Generates embeddings locally without API calls.
12
+ * Uses a deterministic hash-based approach for consistent results.
13
+ * For production use, integrate with transformers.js or ONNX runtime.
14
+ */
15
+ export declare class LocalEmbeddings {
16
+ readonly dimensions: number;
17
+ private modelName;
18
+ constructor(options?: {
19
+ dimensions?: number;
20
+ modelName?: string;
21
+ });
22
+ /**
23
+ * Generate embedding using a simple hash-based approach
24
+ * This is NOT suitable for production semantic search
25
+ * but provides consistent results for testing
26
+ */
27
+ private generateHashEmbedding;
28
+ /**
29
+ * Embed a single text
30
+ */
31
+ embedQuery(text: string): Promise<number[]>;
32
+ /**
33
+ * Embed multiple texts
34
+ */
35
+ embedDocuments(texts: string[]): Promise<number[][]>;
36
+ /**
37
+ * Batch embed
38
+ */
39
+ embed(texts: string[]): Promise<number[][]>;
40
+ }
41
+ /**
42
+ * Factory function
43
+ */
44
+ export declare function createLocalEmbeddings(options?: {
45
+ dimensions?: number;
46
+ modelName?: string;
47
+ }): LocalEmbeddings;
48
+ /**
49
+ * Mock HuggingFace Embeddings (for compatibility)
50
+ * In production, use @xenova/transformers
51
+ */
52
+ export declare class HuggingFaceEmbeddings {
53
+ readonly model: string;
54
+ readonly device: string;
55
+ readonly normalize: boolean;
56
+ constructor(options?: {
57
+ model?: string;
58
+ device?: string;
59
+ normalize?: boolean;
60
+ });
61
+ embedQuery(text: string): Promise<number[]>;
62
+ embedDocuments(texts: string[]): Promise<number[][]>;
63
+ }
64
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAMrE;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIjD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAI1D;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAGlD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,eAAe,CAElB;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,GAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KAChB;IAQA,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK3C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAG3D"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Local Embeddings
3
+ *
4
+ * Zero-cost, completely offline embedding generation
5
+ * Uses a simple hash-based approach for demonstration
6
+ * For production, use transformers.js or ONNX runtime
7
+ */
8
+ import { logger } from '../utils/logger.js';
9
+ /**
10
+ * Local Embeddings
11
+ *
12
+ * Generates embeddings locally without API calls.
13
+ * Uses a deterministic hash-based approach for consistent results.
14
+ * For production use, integrate with transformers.js or ONNX runtime.
15
+ */
16
+ export class LocalEmbeddings {
17
+ dimensions;
18
+ modelName;
19
+ constructor(options = {}) {
20
+ this.dimensions = options.dimensions || 384;
21
+ this.modelName = options.modelName || 'local-hash';
22
+ logger.info(`[LocalEmbeddings] Initialized with ${this.dimensions} dimensions`);
23
+ }
24
+ /**
25
+ * Generate embedding using a simple hash-based approach
26
+ * This is NOT suitable for production semantic search
27
+ * but provides consistent results for testing
28
+ */
29
+ generateHashEmbedding(text) {
30
+ const embedding = new Array(this.dimensions).fill(0);
31
+ // Simple hash to generate consistent embedding
32
+ for (let i = 0; i < text.length; i++) {
33
+ const char = text.charCodeAt(i);
34
+ const idx1 = i % this.dimensions;
35
+ const idx2 = (i * 31 + char) % this.dimensions;
36
+ embedding[idx1] += char / text.length;
37
+ embedding[idx2] += char / text.length;
38
+ }
39
+ // Normalize
40
+ const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
41
+ if (magnitude > 0) {
42
+ for (let i = 0; i < embedding.length; i++) {
43
+ embedding[i] /= magnitude;
44
+ }
45
+ }
46
+ return embedding;
47
+ }
48
+ /**
49
+ * Embed a single text
50
+ */
51
+ async embedQuery(text) {
52
+ return this.generateHashEmbedding(text);
53
+ }
54
+ /**
55
+ * Embed multiple texts
56
+ */
57
+ async embedDocuments(texts) {
58
+ return texts.map(text => this.generateHashEmbedding(text));
59
+ }
60
+ /**
61
+ * Batch embed
62
+ */
63
+ async embed(texts) {
64
+ return this.embedDocuments(texts);
65
+ }
66
+ }
67
+ /**
68
+ * Factory function
69
+ */
70
+ export function createLocalEmbeddings(options) {
71
+ return new LocalEmbeddings(options);
72
+ }
73
+ /**
74
+ * Mock HuggingFace Embeddings (for compatibility)
75
+ * In production, use @xenova/transformers
76
+ */
77
+ export class HuggingFaceEmbeddings {
78
+ model;
79
+ device;
80
+ normalize;
81
+ constructor(options = {}) {
82
+ this.model = options.model || 'sentence-transformers/all-MiniLM-L6-v2';
83
+ this.device = options.device || 'cpu';
84
+ this.normalize = options.normalize !== false;
85
+ logger.info(`[HuggingFaceEmbeddings] Initialized (mock). For real embeddings, install @xenova/transformers`);
86
+ }
87
+ async embedQuery(text) {
88
+ // Mock implementation
89
+ return new LocalEmbeddings().embedQuery(text);
90
+ }
91
+ async embedDocuments(texts) {
92
+ return new LocalEmbeddings().embedDocuments(texts);
93
+ }
94
+ }
95
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * LLMJudge - Evaluate LLM responses
3
+ */
4
+ import { BaseChatModel } from '../core/types.js';
5
+ export declare enum EvalCriteria {
6
+ FAITHFULNESS = "faithfulness",
7
+ RELEVANCE = "relevance",
8
+ TOXICITY = "toxicity",
9
+ COHERENCE = "coherence",
10
+ ACCURACY = "accuracy"
11
+ }
12
+ export interface EvalResult {
13
+ score: number;
14
+ explanation: string;
15
+ passed: boolean;
16
+ }
17
+ export declare class LLMJudge {
18
+ private judgeLLM;
19
+ constructor(judgeLLM: BaseChatModel);
20
+ evaluate(question: string, response: string, criteria: EvalCriteria, context?: string): Promise<EvalResult>;
21
+ }
22
+ //# sourceMappingURL=judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/evals/judge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAW,MAAM,kBAAkB,CAAC;AAO1D,oBAAY,YAAY;IACtB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AA0BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,QAAQ,EAAE,aAAa;IAK7B,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,UAAU,CAAC;CAoCvB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * LLMJudge - Evaluate LLM responses
3
+ */
4
+ import { logger } from '../utils/logger.js';
5
+ // ============================================================================
6
+ // Evaluation Criteria
7
+ // ============================================================================
8
+ export var EvalCriteria;
9
+ (function (EvalCriteria) {
10
+ EvalCriteria["FAITHFULNESS"] = "faithfulness";
11
+ EvalCriteria["RELEVANCE"] = "relevance";
12
+ EvalCriteria["TOXICITY"] = "toxicity";
13
+ EvalCriteria["COHERENCE"] = "coherence";
14
+ EvalCriteria["ACCURACY"] = "accuracy";
15
+ })(EvalCriteria || (EvalCriteria = {}));
16
+ // ============================================================================
17
+ // LLM Judge
18
+ // ============================================================================
19
+ const EVAL_PROMPT = `You are an impartial, strict evaluator. Your job is to grade the Assistant's response
20
+ based on the following criteria: {criteria}.
21
+
22
+ Question asked by User:
23
+ "{question}"
24
+
25
+ Context provided to Assistant (if any):
26
+ "{context}"
27
+
28
+ Assistant's Response:
29
+ "{response}"
30
+
31
+ Evaluate the response. Output strictly in the following JSON schema:
32
+ {{
33
+ "score": <int from 1 to 10>,
34
+ "explanation": "<brief reason for the score>",
35
+ "passed": <boolean true if score >= 7 else false>
36
+ }}
37
+ `;
38
+ export class LLMJudge {
39
+ judgeLLM;
40
+ constructor(judgeLLM) {
41
+ this.judgeLLM = judgeLLM;
42
+ logger.info('LLMJudge ready. Ready to evaluate responses.');
43
+ }
44
+ async evaluate(question, response, criteria, context = '') {
45
+ const prompt = EVAL_PROMPT
46
+ .replace('{criteria}', criteria)
47
+ .replace('{question}', question)
48
+ .replace('{context}', context)
49
+ .replace('{response}', response);
50
+ const messages = [
51
+ { role: 'system', content: 'You are a JSON grading API.' },
52
+ { role: 'user', content: prompt },
53
+ ];
54
+ try {
55
+ const result = await this.judgeLLM.invoke(messages, {
56
+ responseFormat: { type: 'json_object' }
57
+ });
58
+ const content = result.content.trim();
59
+ const parsed = JSON.parse(content);
60
+ logger.debug(`[Judge] Score: ${parsed.score}/10 - Passed: ${parsed.passed}`);
61
+ return {
62
+ score: parsed.score ?? 0,
63
+ explanation: parsed.explanation ?? '',
64
+ passed: parsed.passed ?? false,
65
+ };
66
+ }
67
+ catch (error) {
68
+ logger.error(`Evaluation failed: ${error}`);
69
+ return {
70
+ score: 0,
71
+ explanation: String(error),
72
+ passed: false,
73
+ };
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/evals/judge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,CAAN,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,uCAAuB,CAAA;IACvB,qCAAqB,CAAA;IACrB,uCAAuB,CAAA;IACvB,qCAAqB,CAAA;AACvB,CAAC,EANW,YAAY,KAAZ,YAAY,QAMvB;AAQD,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;CAkBnB,CAAC;AAEF,MAAM,OAAO,QAAQ;IACX,QAAQ,CAAgB;IAEhC,YAAY,QAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,QAAgB,EAChB,QAAsB,EACtB,UAAkB,EAAE;QAEpB,MAAM,MAAM,GAAG,WAAW;aACvB,OAAO,CAAC,YAAY,EAAE,QAAkB,CAAC;aACzC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;aAC/B,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7B,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,QAAQ,GAAc;YAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;YAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAClC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAClD,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aACxC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEnC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAE7E,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;aAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YAC5C,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;gBAC1B,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Lazlo - The Anti-Framework for JavaScript/TypeScript
3
+ *
4
+ * A production-grade AI framework that prioritizes performance, transparency, and simplicity.
5
+ */
6
+ export * from './core/types.js';
7
+ export { OpenAI, createOpenAI } from './providers/openai.js';
8
+ export { Ollama, createOllama } from './providers/ollama.js';
9
+ export { LLMChain, SequentialChain, PromptTemplate } from './chains/llmchain.js';
10
+ export { RetrievalQAChain, createRetrievalChain } from './chains/rag.js';
11
+ export { SmartRouter } from './router/smartrouter.js';
12
+ export { SemanticCache } from './cache/semantic.js';
13
+ export { BufferMemory, TokenBudgetMemory } from './memory/buffer.js';
14
+ export { Tool, tool, createToolDecorator, defineTool, calculator, search, weather, KeiroSearch } from './tools/index.js';
15
+ export { tracer, Tracer } from './tracing/tracer.js';
16
+ export { LLMJudge, EvalCriteria } from './evals/judge.js';
17
+ export { CharacterTextSplitter, RecursiveCharacterTextSplitter, createCharacterSplitter, createRecursiveSplitter } from './text_splitters/index.js';
18
+ export { InMemoryVectorStore, ChromaVectorStore, SQLiteVectorStore, createVectorStore, createChromaVectorStore, createSQLiteVectorStore } from './vectorstores/index.js';
19
+ export { TextLoader, CSVLoader, JSONLoader, loadDocument, loadDocuments } from './document_loaders/index.js';
20
+ export { GoogleEmbeddings, createGoogleEmbeddings } from './embeddings/google.js';
21
+ export { LocalEmbeddings, HuggingFaceEmbeddings, createLocalEmbeddings } from './embeddings/local.js';
22
+ export { JSONOutputParser, XMLOutputParser, CommaSeparatedListParser, MarkdownCodeBlockParser, ToolCallParser, createJSONParser, createXMLParser, createListParser, createMarkdownParser } from './parsers/output.js';
23
+ export { PromptRegistry, SimplePromptTemplate, createPromptRegistry } from './prompts/registry.js';
24
+ export { ContextualCompressionRetriever, ParentDocumentRetriever, EnsembleRetriever, createVectorStoreRetriever } from './retrievers/index.js';
25
+ export type { BaseRetriever } from './retrievers/index.js';
26
+ export { logger } from './utils/logger.js';
27
+ export { getPricing, setPricing, calculateCost, estimateCost, estimateTokens } from './utils/pricing.js';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,cAAc,iBAAiB,CAAC;AAMhC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAMzE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMrE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMzH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAM1D,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAMpJ,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMzK,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAM7G,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMtG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAMtN,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAMnG,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC/I,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Lazlo - The Anti-Framework for JavaScript/TypeScript
3
+ *
4
+ * A production-grade AI framework that prioritizes performance, transparency, and simplicity.
5
+ */
6
+ // ============================================================================
7
+ // Core Types
8
+ // ============================================================================
9
+ export * from './core/types.js';
10
+ // ============================================================================
11
+ // Providers
12
+ // ============================================================================
13
+ export { OpenAI, createOpenAI } from './providers/openai.js';
14
+ export { Ollama, createOllama } from './providers/ollama.js';
15
+ // ============================================================================
16
+ // Chains
17
+ // ============================================================================
18
+ export { LLMChain, SequentialChain, PromptTemplate } from './chains/llmchain.js';
19
+ export { RetrievalQAChain, createRetrievalChain } from './chains/rag.js';
20
+ // ============================================================================
21
+ // Router
22
+ // ============================================================================
23
+ export { SmartRouter } from './router/smartrouter.js';
24
+ // ============================================================================
25
+ // Cache
26
+ // ============================================================================
27
+ export { SemanticCache } from './cache/semantic.js';
28
+ // ============================================================================
29
+ // Memory
30
+ // ============================================================================
31
+ export { BufferMemory, TokenBudgetMemory } from './memory/buffer.js';
32
+ // ============================================================================
33
+ // Tools
34
+ // ============================================================================
35
+ export { Tool, tool, createToolDecorator, defineTool, calculator, search, weather, KeiroSearch } from './tools/index.js';
36
+ // ============================================================================
37
+ // Tracing
38
+ // ============================================================================
39
+ export { tracer, Tracer } from './tracing/tracer.js';
40
+ // ============================================================================
41
+ // Evals
42
+ // ============================================================================
43
+ export { LLMJudge, EvalCriteria } from './evals/judge.js';
44
+ // ============================================================================
45
+ // Text Splitters
46
+ // ============================================================================
47
+ export { CharacterTextSplitter, RecursiveCharacterTextSplitter, createCharacterSplitter, createRecursiveSplitter } from './text_splitters/index.js';
48
+ // ============================================================================
49
+ // Vector Stores
50
+ // ============================================================================
51
+ export { InMemoryVectorStore, ChromaVectorStore, SQLiteVectorStore, createVectorStore, createChromaVectorStore, createSQLiteVectorStore } from './vectorstores/index.js';
52
+ // ============================================================================
53
+ // Document Loaders
54
+ // ============================================================================
55
+ export { TextLoader, CSVLoader, JSONLoader, loadDocument, loadDocuments } from './document_loaders/index.js';
56
+ // ============================================================================
57
+ // Embeddings
58
+ // ============================================================================
59
+ export { GoogleEmbeddings, createGoogleEmbeddings } from './embeddings/google.js';
60
+ export { LocalEmbeddings, HuggingFaceEmbeddings, createLocalEmbeddings } from './embeddings/local.js';
61
+ // ============================================================================
62
+ // Output Parsers
63
+ // ============================================================================
64
+ export { JSONOutputParser, XMLOutputParser, CommaSeparatedListParser, MarkdownCodeBlockParser, ToolCallParser, createJSONParser, createXMLParser, createListParser, createMarkdownParser } from './parsers/output.js';
65
+ // ============================================================================
66
+ // Prompt Registry
67
+ // ============================================================================
68
+ export { PromptRegistry, SimplePromptTemplate, createPromptRegistry } from './prompts/registry.js';
69
+ // ============================================================================
70
+ // Retrievers
71
+ // ============================================================================
72
+ export { ContextualCompressionRetriever, ParentDocumentRetriever, EnsembleRetriever, createVectorStoreRetriever } from './retrievers/index.js';
73
+ // ============================================================================
74
+ // Utils
75
+ // ============================================================================
76
+ export { logger } from './utils/logger.js';
77
+ export { getPricing, setPricing, calculateCost, estimateCost, estimateTokens } from './utils/pricing.js';
78
+ // ============================================================================
79
+ // Initialize
80
+ // ============================================================================
81
+ import { loadEnvPricing } from './utils/pricing.js';
82
+ loadEnvPricing();
83
+ console.log('⚡ Lazlo JS loaded. The Anti-Framework.');
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Buffer Memory - Simple conversation history
3
+ */
4
+ import { Message } from '../core/types.js';
5
+ export interface BufferMemoryOptions {
6
+ memoryKey?: string;
7
+ returnMessages?: boolean;
8
+ maxTokenLimit?: number;
9
+ }
10
+ export declare class BufferMemory {
11
+ private messages;
12
+ private memoryKey;
13
+ private returnMessages;
14
+ private maxTokenLimit?;
15
+ constructor(options?: BufferMemoryOptions);
16
+ /**
17
+ * Estimate tokens (rough approximation)
18
+ */
19
+ private estimateTokens;
20
+ /**
21
+ * Load memory variables for the chain
22
+ */
23
+ loadMemoryVariables(_inputs?: Record<string, unknown>): Promise<Record<string, unknown>>;
24
+ /**
25
+ * Save context to memory
26
+ */
27
+ saveContext(inputs: Record<string, unknown>, outputs: Record<string, string>): Promise<void>;
28
+ /**
29
+ * Clear memory
30
+ */
31
+ clear(): Promise<void>;
32
+ /**
33
+ * Get messages
34
+ */
35
+ getMessages(): Message[];
36
+ }
37
+ export interface TokenBudgetMemoryOptions {
38
+ summarizerLLM?: any;
39
+ maxTokens?: number;
40
+ summarizeThreshold?: number;
41
+ memoryKey?: string;
42
+ returnMessages?: boolean;
43
+ }
44
+ export declare class TokenBudgetMemory {
45
+ private messages;
46
+ private summarizerLLM?;
47
+ private maxTokens;
48
+ private summarizeThreshold;
49
+ private memoryKey;
50
+ private returnMessages;
51
+ private summaryPrefix;
52
+ constructor(options?: TokenBudgetMemoryOptions);
53
+ private estimateTokens;
54
+ private compress;
55
+ loadMemoryVariables(_inputs?: Record<string, unknown>): Promise<Record<string, unknown>>;
56
+ saveContext(inputs: Record<string, unknown>, outputs: Record<string, string>): Promise<void>;
57
+ clear(): Promise<void>;
58
+ get tokenUsage(): {
59
+ estimatedTokens: number;
60
+ budget: number;
61
+ messageCount: number;
62
+ };
63
+ }
64
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/memory/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAM3C,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,OAAO,GAAE,mBAAwB;IAM7C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACG,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAiClG;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAalG;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;CAGzB;AAMD,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AASD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAC,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAM;gBAEf,OAAO,GAAE,wBAA6B;IAQlD,OAAO,CAAC,cAAc;YAQR,QAAQ;IAwBhB,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA2B5F,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,IAAI,UAAU,IAAI;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAMlF;CACF"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Buffer Memory - Simple conversation history
3
+ */
4
+ export class BufferMemory {
5
+ messages = [];
6
+ memoryKey;
7
+ returnMessages;
8
+ maxTokenLimit;
9
+ constructor(options = {}) {
10
+ this.memoryKey = options.memoryKey ?? 'history';
11
+ this.returnMessages = options.returnMessages ?? false;
12
+ this.maxTokenLimit = options.maxTokenLimit;
13
+ }
14
+ /**
15
+ * Estimate tokens (rough approximation)
16
+ */
17
+ estimateTokens(text) {
18
+ return Math.ceil(text.length / 4);
19
+ }
20
+ /**
21
+ * Load memory variables for the chain
22
+ */
23
+ async loadMemoryVariables(_inputs = {}) {
24
+ // Trim if over token limit
25
+ if (this.maxTokenLimit) {
26
+ let tokenCount = 0;
27
+ const trimmedMessages = [];
28
+ for (let i = this.messages.length - 1; i >= 0; i--) {
29
+ const msg = this.messages[i];
30
+ const msgTokens = this.estimateTokens(msg.content);
31
+ if (tokenCount + msgTokens <= this.maxTokenLimit) {
32
+ trimmedMessages.unshift(msg);
33
+ tokenCount += msgTokens;
34
+ }
35
+ else {
36
+ break;
37
+ }
38
+ }
39
+ this.messages = trimmedMessages;
40
+ }
41
+ if (this.returnMessages) {
42
+ return { [this.memoryKey]: [...this.messages] };
43
+ }
44
+ // Return as formatted string
45
+ const history = this.messages
46
+ .map(m => `${m.role === 'user' ? 'User' : 'Assistant'}: ${m.content}`)
47
+ .join('\n');
48
+ return { [this.memoryKey]: history };
49
+ }
50
+ /**
51
+ * Save context to memory
52
+ */
53
+ async saveContext(inputs, outputs) {
54
+ // Extract input and output content
55
+ const inputContent = Object.values(inputs)[0]?.toString() ?? '';
56
+ const outputContent = Object.values(outputs)[0]?.toString() ?? '';
57
+ if (inputContent) {
58
+ this.messages.push({ role: 'user', content: inputContent });
59
+ }
60
+ if (outputContent) {
61
+ this.messages.push({ role: 'assistant', content: outputContent });
62
+ }
63
+ }
64
+ /**
65
+ * Clear memory
66
+ */
67
+ async clear() {
68
+ this.messages = [];
69
+ }
70
+ /**
71
+ * Get messages
72
+ */
73
+ getMessages() {
74
+ return [...this.messages];
75
+ }
76
+ }
77
+ const SUMMARIZE_PROMPT = `Summarize the following conversation history into 2-3 concise sentences. Preserve key facts, decisions, and context. Be extremely terse.
78
+
79
+ Conversation:
80
+ {history}
81
+
82
+ Summary:`;
83
+ export class TokenBudgetMemory {
84
+ messages = [];
85
+ summarizerLLM;
86
+ maxTokens;
87
+ summarizeThreshold;
88
+ memoryKey;
89
+ returnMessages;
90
+ summaryPrefix = '';
91
+ constructor(options = {}) {
92
+ this.summarizerLLM = options.summarizerLLM;
93
+ this.maxTokens = options.maxTokens ?? 4000;
94
+ this.summarizeThreshold = options.summarizeThreshold ?? 0.8;
95
+ this.memoryKey = options.memoryKey ?? 'history';
96
+ this.returnMessages = options.returnMessages ?? false;
97
+ }
98
+ estimateTokens() {
99
+ let text = this.messages.map(m => m.content).join('\n');
100
+ if (this.summaryPrefix) {
101
+ text += '\n' + this.summaryPrefix;
102
+ }
103
+ return Math.ceil(text.length / 4);
104
+ }
105
+ async compress() {
106
+ if (!this.messages.length || !this.summarizerLLM)
107
+ return;
108
+ // Keep the second half of messages
109
+ const half = Math.floor(this.messages.length / 2);
110
+ const oldMessages = this.messages.slice(0, half);
111
+ this.messages = this.messages.slice(half);
112
+ const historyStr = oldMessages
113
+ .map(m => `${m.role === 'user' ? 'User' : 'Assistant'}: ${m.content}`)
114
+ .join('\n');
115
+ const prompt = SUMMARIZE_PROMPT.replace('{history}', this.summaryPrefix ? `Previous summary: ${this.summaryPrefix}\n\n${historyStr}` : historyStr);
116
+ try {
117
+ const response = await this.summarizerLLM.invoke(prompt);
118
+ this.summaryPrefix = typeof response === 'string' ? response : response.content ?? '';
119
+ }
120
+ catch (error) {
121
+ console.error('[TokenBudgetMemory] Compression failed:', error);
122
+ }
123
+ }
124
+ async loadMemoryVariables(_inputs = {}) {
125
+ const tokensUsed = this.estimateTokens();
126
+ if (tokensUsed >= this.maxTokens * this.summarizeThreshold) {
127
+ await this.compress();
128
+ }
129
+ if (this.returnMessages) {
130
+ const content = [];
131
+ if (this.summaryPrefix) {
132
+ content.push({ role: 'system', content: `[Earlier context]: ${this.summaryPrefix}` });
133
+ }
134
+ content.push(...this.messages);
135
+ return { [this.memoryKey]: content };
136
+ }
137
+ const parts = [];
138
+ if (this.summaryPrefix) {
139
+ parts.push(`[Earlier context]: ${this.summaryPrefix}`);
140
+ }
141
+ for (const m of this.messages) {
142
+ parts.push(`${m.role === 'user' ? 'User' : 'Assistant'}: ${m.content}`);
143
+ }
144
+ return { [this.memoryKey]: parts.join('\n') };
145
+ }
146
+ async saveContext(inputs, outputs) {
147
+ const inputContent = Object.values(inputs)[0]?.toString() ?? '';
148
+ const outputContent = Object.values(outputs)[0]?.toString() ?? '';
149
+ if (inputContent) {
150
+ this.messages.push({ role: 'user', content: inputContent });
151
+ }
152
+ if (outputContent) {
153
+ this.messages.push({ role: 'assistant', content: outputContent });
154
+ }
155
+ }
156
+ async clear() {
157
+ this.messages = [];
158
+ this.summaryPrefix = '';
159
+ }
160
+ get tokenUsage() {
161
+ return {
162
+ estimatedTokens: this.estimateTokens(),
163
+ budget: this.maxTokens,
164
+ messageCount: this.messages.length,
165
+ };
166
+ }
167
+ }
168
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/memory/buffer.ts"],"names":[],"mappings":"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"}