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
+ * Output Parsers
3
+ *
4
+ * Parse LLM outputs into structured formats
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Base Output Parser Interface
9
+ */
10
+ export interface BaseOutputParser<T> {
11
+ parse(text: string): Promise<T>;
12
+ format?(text: string): string;
13
+ }
14
+ /**
15
+ * JSON Output Parser
16
+ */
17
+ export declare class JSONOutputParser<T extends z.ZodTypeAny = z.ZodTypeAny> {
18
+ private schema?;
19
+ private schemaName?;
20
+ constructor(schema?: T, schemaName?: string);
21
+ parse(text: string): Promise<any>;
22
+ format(text: string): string;
23
+ }
24
+ /**
25
+ * XML Output Parser
26
+ */
27
+ export declare class XMLOutputParser {
28
+ private tags;
29
+ constructor(tags?: string[]);
30
+ parse(text: string): Promise<Record<string, string>>;
31
+ format(text: string): string;
32
+ }
33
+ /**
34
+ * Comma-Separated List Parser
35
+ */
36
+ export declare class CommaSeparatedListParser {
37
+ parse(text: string): Promise<string[]>;
38
+ }
39
+ /**
40
+ * Markdown Code Block Parser
41
+ */
42
+ export declare class MarkdownCodeBlockParser {
43
+ private language?;
44
+ constructor(language?: string);
45
+ parse(text: string): Promise<string>;
46
+ }
47
+ /**
48
+ * Parser for tool calls
49
+ */
50
+ export interface ToolCall {
51
+ name: string;
52
+ arguments: Record<string, any>;
53
+ }
54
+ export declare class ToolCallParser {
55
+ parse(text: string): Promise<ToolCall[]>;
56
+ }
57
+ /**
58
+ * Factory functions
59
+ */
60
+ export declare function createJSONParser<T extends z.ZodTypeAny>(schema?: T, name?: string): JSONOutputParser<T>;
61
+ export declare function createXMLParser(tags?: string[]): XMLOutputParser;
62
+ export declare function createListParser(): CommaSeparatedListParser;
63
+ export declare function createMarkdownParser(language?: string): MarkdownCodeBlockParser;
64
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/parsers/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IACjE,OAAO,CAAC,MAAM,CAAC,CAAI;IACnB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM;IAKrC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBvC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG7B;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAW;gBAEX,IAAI,GAAE,MAAM,EAAiB;IAInC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAe1D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,wBAAwB;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAM7C;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,QAAQ,CAAC,EAAE,MAAM;IAIvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAc3C;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBAAa,cAAc;IACnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAwC/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAEvG;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,CAEhE;AAED,wBAAgB,gBAAgB,IAAI,wBAAwB,CAE3D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAE/E"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Output Parsers
3
+ *
4
+ * Parse LLM outputs into structured formats
5
+ */
6
+ /**
7
+ * JSON Output Parser
8
+ */
9
+ export class JSONOutputParser {
10
+ schema;
11
+ schemaName;
12
+ constructor(schema, schemaName) {
13
+ this.schema = schema;
14
+ this.schemaName = schemaName;
15
+ }
16
+ async parse(text) {
17
+ // Try to extract JSON from text
18
+ const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/) ||
19
+ text.match(/\{[\s\S]*\}/);
20
+ if (!jsonMatch) {
21
+ throw new Error('No JSON found in output');
22
+ }
23
+ const jsonStr = jsonMatch[1] || jsonMatch[0];
24
+ try {
25
+ const parsed = JSON.parse(jsonStr);
26
+ if (this.schema) {
27
+ return this.schema.parse(parsed);
28
+ }
29
+ return parsed;
30
+ }
31
+ catch (error) {
32
+ throw new Error(`Failed to parse JSON: ${error.message}`);
33
+ }
34
+ }
35
+ format(text) {
36
+ return `Output the following as valid JSON:\n${text}`;
37
+ }
38
+ }
39
+ /**
40
+ * XML Output Parser
41
+ */
42
+ export class XMLOutputParser {
43
+ tags;
44
+ constructor(tags = ['response']) {
45
+ this.tags = tags;
46
+ }
47
+ async parse(text) {
48
+ const result = {};
49
+ for (const tag of this.tags) {
50
+ const regex = new RegExp(`<${tag}[^>]*>([\\s\\S]*?)</${tag}>`, 'i');
51
+ const match = text.match(regex);
52
+ if (match) {
53
+ result[tag] = match[1].trim();
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ format(text) {
59
+ const tagsStr = this.tags.map(t => `<${t}>...</${t}>`).join('\n');
60
+ return `Output the following as XML:\n${tagsStr}\n\nContent:\n${text}`;
61
+ }
62
+ }
63
+ /**
64
+ * Comma-Separated List Parser
65
+ */
66
+ export class CommaSeparatedListParser {
67
+ async parse(text) {
68
+ return text
69
+ .split(',')
70
+ .map(item => item.trim())
71
+ .filter(item => item.length > 0);
72
+ }
73
+ }
74
+ /**
75
+ * Markdown Code Block Parser
76
+ */
77
+ export class MarkdownCodeBlockParser {
78
+ language;
79
+ constructor(language) {
80
+ this.language = language;
81
+ }
82
+ async parse(text) {
83
+ const regex = this.language
84
+ ? new RegExp(`\`\`\`${this.language}\\s*([\\s\\S]*?)\`\`\``)
85
+ : /```(?:\w+)?\s*([\s\S]*?)```/;
86
+ const match = text.match(regex);
87
+ if (match) {
88
+ return match[1].trim();
89
+ }
90
+ // Return original if no code block found
91
+ return text.trim();
92
+ }
93
+ }
94
+ export class ToolCallParser {
95
+ async parse(text) {
96
+ const toolCalls = [];
97
+ // Try JSON format
98
+ try {
99
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
100
+ if (jsonMatch) {
101
+ const parsed = JSON.parse(jsonMatch[0]);
102
+ if (parsed.name && parsed.arguments) {
103
+ return [parsed];
104
+ }
105
+ }
106
+ }
107
+ catch {
108
+ // Not JSON, try other formats
109
+ }
110
+ // Try function call format
111
+ const functionMatch = text.match(/(\w+)\(([\s\S]*?)\)/);
112
+ if (functionMatch) {
113
+ const name = functionMatch[1];
114
+ let args = {};
115
+ try {
116
+ args = JSON.parse(`{${functionMatch[2]}}`);
117
+ }
118
+ catch {
119
+ // Simple key=value parsing
120
+ const argPairs = functionMatch[2].split(',');
121
+ for (const pair of argPairs) {
122
+ const [key, value] = pair.split('=').map(s => s.trim());
123
+ if (key) {
124
+ args[key] = value?.replace(/["']/g, '') || '';
125
+ }
126
+ }
127
+ }
128
+ toolCalls.push({ name, arguments: args });
129
+ }
130
+ return toolCalls;
131
+ }
132
+ }
133
+ /**
134
+ * Factory functions
135
+ */
136
+ export function createJSONParser(schema, name) {
137
+ return new JSONOutputParser(schema, name);
138
+ }
139
+ export function createXMLParser(tags) {
140
+ return new XMLOutputParser(tags);
141
+ }
142
+ export function createListParser() {
143
+ return new CommaSeparatedListParser();
144
+ }
145
+ export function createMarkdownParser(language) {
146
+ return new MarkdownCodeBlockParser(language);
147
+ }
148
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/parsers/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Prompt Registry
3
+ *
4
+ * Store, version, and load prompts from YAML files
5
+ */
6
+ export interface PromptConfig {
7
+ template: string;
8
+ description?: string;
9
+ version?: string;
10
+ variables?: string[];
11
+ }
12
+ /**
13
+ * Prompt Registry
14
+ *
15
+ * Load and manage prompts from YAML files
16
+ */
17
+ export declare class PromptRegistry {
18
+ private prompts;
19
+ private directory?;
20
+ constructor(directory?: string);
21
+ /**
22
+ * Load prompts from a directory
23
+ */
24
+ private loadPrompts;
25
+ /**
26
+ * Simple YAML parser
27
+ */
28
+ private parseYAML;
29
+ /**
30
+ * Register a prompt
31
+ */
32
+ register(name: string, config: PromptConfig): void;
33
+ /**
34
+ * Load a prompt by name (supports @version syntax)
35
+ */
36
+ load(name: string): string;
37
+ /**
38
+ * Get prompt config
39
+ */
40
+ get(name: string): PromptConfig | undefined;
41
+ /**
42
+ * List all prompts
43
+ */
44
+ list(): string[];
45
+ /**
46
+ * Format a prompt with variables
47
+ */
48
+ format(template: string, variables: Record<string, string>): string;
49
+ }
50
+ /**
51
+ * Factory function
52
+ */
53
+ export declare function createPromptRegistry(directory?: string): PromptRegistry;
54
+ /**
55
+ * Simple Prompt Template (standalone)
56
+ */
57
+ export declare class SimplePromptTemplate {
58
+ private template;
59
+ private inputVariables;
60
+ constructor(template: string);
61
+ private extractVariables;
62
+ format(variables: Record<string, string>): string;
63
+ get inputVars(): string[];
64
+ }
65
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,SAAS,CAAC,EAAE,MAAM;IAO9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAmDjB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAKlD;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;CASpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAEvE;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAW;gBAErB,QAAQ,EAAE,MAAM;IAK5B,OAAO,CAAC,gBAAgB;IAKxB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAUjD,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;CACF"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Prompt Registry
3
+ *
4
+ * Store, version, and load prompts from YAML files
5
+ */
6
+ import { readFileSync, readdirSync, existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { logger } from '../utils/logger.js';
9
+ /**
10
+ * Prompt Registry
11
+ *
12
+ * Load and manage prompts from YAML files
13
+ */
14
+ export class PromptRegistry {
15
+ prompts = new Map();
16
+ directory;
17
+ constructor(directory) {
18
+ if (directory) {
19
+ this.directory = directory;
20
+ this.loadPrompts(directory);
21
+ }
22
+ }
23
+ /**
24
+ * Load prompts from a directory
25
+ */
26
+ loadPrompts(directory) {
27
+ if (!existsSync(directory)) {
28
+ logger.warn(`[PromptRegistry] Directory not found: ${directory}`);
29
+ return;
30
+ }
31
+ try {
32
+ const files = readdirSync(directory).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
33
+ for (const file of files) {
34
+ const content = readFileSync(join(directory, file), 'utf-8');
35
+ const config = this.parseYAML(content);
36
+ const name = file.replace(/\.(yaml|yml)$/, '');
37
+ this.prompts.set(name, config);
38
+ }
39
+ logger.info(`[PromptRegistry] Loaded ${this.prompts.size} prompts from ${directory}`);
40
+ }
41
+ catch (error) {
42
+ logger.error(`[PromptRegistry] Error loading prompts: ${error.message}`);
43
+ }
44
+ }
45
+ /**
46
+ * Simple YAML parser
47
+ */
48
+ parseYAML(content) {
49
+ const result = {};
50
+ const lines = content.split('\n');
51
+ let currentKey = '';
52
+ let currentValue = [];
53
+ let inArray = false;
54
+ for (const line of lines) {
55
+ const trimmed = line.trim();
56
+ if (!trimmed || trimmed.startsWith('#'))
57
+ continue;
58
+ // Check for key: value
59
+ const keyMatch = trimmed.match(/^(\w+):\s*(.*)$/);
60
+ if (keyMatch) {
61
+ if (currentKey) {
62
+ result[currentKey] = currentValue.join('\n').trim();
63
+ }
64
+ currentKey = keyMatch[1];
65
+ const value = keyMatch[2];
66
+ if (value.startsWith('[') && value.endsWith(']')) {
67
+ // Array
68
+ result[currentKey] = value.slice(1, -1).split(',').map((s) => s.trim());
69
+ currentKey = '';
70
+ }
71
+ else if (value) {
72
+ currentValue = [value];
73
+ }
74
+ else {
75
+ currentValue = [];
76
+ }
77
+ }
78
+ else if (trimmed.startsWith('- ')) {
79
+ // Array item
80
+ if (!Array.isArray(result[currentKey])) {
81
+ result[currentKey] = [];
82
+ }
83
+ result[currentKey].push(trimmed.slice(2).trim());
84
+ }
85
+ else {
86
+ // Continuation
87
+ currentValue.push(trimmed);
88
+ }
89
+ }
90
+ if (currentKey) {
91
+ result[currentKey] = currentValue.join('\n').trim();
92
+ }
93
+ return result;
94
+ }
95
+ /**
96
+ * Register a prompt
97
+ */
98
+ register(name, config) {
99
+ this.prompts.set(name, config);
100
+ logger.debug(`[PromptRegistry] Registered prompt: ${name}`);
101
+ }
102
+ /**
103
+ * Load a prompt by name (supports @version syntax)
104
+ */
105
+ load(name) {
106
+ const [baseName, version] = name.split('@');
107
+ const prompt = this.prompts.get(baseName);
108
+ if (!prompt) {
109
+ throw new Error(`Prompt not found: ${baseName}`);
110
+ }
111
+ if (version && prompt.version && prompt.version !== version) {
112
+ throw new Error(`Version ${version} not found for prompt: ${baseName}`);
113
+ }
114
+ return prompt.template;
115
+ }
116
+ /**
117
+ * Get prompt config
118
+ */
119
+ get(name) {
120
+ return this.prompts.get(name);
121
+ }
122
+ /**
123
+ * List all prompts
124
+ */
125
+ list() {
126
+ return Array.from(this.prompts.keys());
127
+ }
128
+ /**
129
+ * Format a prompt with variables
130
+ */
131
+ format(template, variables) {
132
+ let result = template;
133
+ for (const [key, value] of Object.entries(variables)) {
134
+ result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
135
+ }
136
+ return result;
137
+ }
138
+ }
139
+ /**
140
+ * Factory function
141
+ */
142
+ export function createPromptRegistry(directory) {
143
+ return new PromptRegistry(directory);
144
+ }
145
+ /**
146
+ * Simple Prompt Template (standalone)
147
+ */
148
+ export class SimplePromptTemplate {
149
+ template;
150
+ inputVariables;
151
+ constructor(template) {
152
+ this.template = template;
153
+ this.inputVariables = this.extractVariables(template);
154
+ }
155
+ extractVariables(template) {
156
+ const matches = template.match(/\{(\w+)\}/g) || [];
157
+ return [...new Set(matches.map(m => m.slice(1, -1)))];
158
+ }
159
+ format(variables) {
160
+ let result = this.template;
161
+ for (const [key, value] of Object.entries(variables)) {
162
+ result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
163
+ }
164
+ return result;
165
+ }
166
+ get inputVars() {
167
+ return this.inputVariables;
168
+ }
169
+ }
170
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Ollama Provider - Local LLM inference
3
+ */
4
+ import { BaseChatModel, Message, ChatResponse, ToolDefinition, StreamChunk } from '../core/types.js';
5
+ export interface OllamaOptions {
6
+ model?: string;
7
+ baseURL?: string;
8
+ timeout?: number;
9
+ }
10
+ export declare class Ollama implements BaseChatModel {
11
+ readonly supportsTools = true;
12
+ readonly supportsStructuredOutput = true;
13
+ private model;
14
+ private baseURL;
15
+ private client;
16
+ constructor(options?: OllamaOptions);
17
+ private formatMessages;
18
+ invoke(messages: Message[], options?: {
19
+ model?: string;
20
+ tools?: ToolDefinition[];
21
+ temperature?: number;
22
+ }): Promise<ChatResponse>;
23
+ stream(messages: Message[], options?: {
24
+ model?: string;
25
+ }): AsyncGenerator<StreamChunk>;
26
+ listModels(): Promise<string[]>;
27
+ close(): void;
28
+ }
29
+ export declare function createOllama(options?: OllamaOptions): Ollama;
30
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,aAAa,EACb,OAAO,EACP,YAAY,EACZ,cAAc,EACd,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAO1B,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,MAAO,YAAW,aAAa;IAC1C,QAAQ,CAAC,aAAa,QAAQ;IAC9B,QAAQ,CAAC,wBAAwB,QAAQ;IAEzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,GAAE,aAAkB;IAavC,OAAO,CAAC,cAAc;IAOhB,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB,GACL,OAAO,CAAC,YAAY,CAAC;IAiCjB,MAAM,CACX,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,cAAc,CAAC,WAAW,CAAC;IAmCxB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUrC,KAAK,IAAI,IAAI;CAGd;AAGD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Ollama Provider - Local LLM inference
3
+ */
4
+ import axios from 'axios';
5
+ import { logger } from '../utils/logger.js';
6
+ export class Ollama {
7
+ supportsTools = true;
8
+ supportsStructuredOutput = true;
9
+ model;
10
+ baseURL;
11
+ client;
12
+ constructor(options = {}) {
13
+ this.model = options.model ?? 'llama3.2';
14
+ this.baseURL = (options.baseURL ?? 'http://localhost:11434').replace(/\/$/, '');
15
+ this.client = axios.create({
16
+ baseURL: this.baseURL,
17
+ headers: { 'Content-Type': 'application/json' },
18
+ timeout: options.timeout ?? 300000,
19
+ });
20
+ logger.info(`Ollama Provider ready. Model: ${this.model}. Endpoint: ${this.baseURL}`);
21
+ }
22
+ formatMessages(messages) {
23
+ return messages.map(m => ({
24
+ role: m.role,
25
+ content: m.content,
26
+ }));
27
+ }
28
+ async invoke(messages, options = {}) {
29
+ const model = options.model ?? this.model;
30
+ const payload = {
31
+ model,
32
+ messages: this.formatMessages(messages),
33
+ stream: false,
34
+ };
35
+ if (options.tools) {
36
+ payload.tools = options.tools;
37
+ }
38
+ try {
39
+ const response = await this.client.post('/api/chat', payload);
40
+ const data = response.data;
41
+ const message = data.message;
42
+ return {
43
+ content: message?.content ?? '',
44
+ tool_calls: message?.tool_calls,
45
+ model: model,
46
+ finish_reason: data.done ? 'stop' : null,
47
+ };
48
+ }
49
+ catch (error) {
50
+ if (error.code === 'ECONNREFUSED') {
51
+ throw new Error(`Cannot connect to Ollama at ${this.baseURL}. Is Ollama running?`);
52
+ }
53
+ logger.error(`Ollama invoke error: ${error.message}`);
54
+ throw error;
55
+ }
56
+ }
57
+ async *stream(messages, options = {}) {
58
+ const model = options.model ?? this.model;
59
+ const payload = {
60
+ model,
61
+ messages: this.formatMessages(messages),
62
+ stream: true,
63
+ };
64
+ const response = await this.client.post('/api/chat', payload, {
65
+ responseType: 'stream',
66
+ });
67
+ for await (const chunk of response.data) {
68
+ const lines = chunk.toString().split('\n').filter((l) => l.trim());
69
+ for (const line of lines) {
70
+ try {
71
+ const data = JSON.parse(line);
72
+ const content = data.message?.content ?? '';
73
+ if (content) {
74
+ yield { delta: content };
75
+ }
76
+ if (data.done) {
77
+ return;
78
+ }
79
+ }
80
+ catch {
81
+ // Skip invalid JSON
82
+ }
83
+ }
84
+ }
85
+ }
86
+ async listModels() {
87
+ try {
88
+ const response = await this.client.get('/api/tags');
89
+ return response.data.models?.map((m) => m.name) ?? [];
90
+ }
91
+ catch (error) {
92
+ logger.error(`Could not list Ollama models: ${error}`);
93
+ return [];
94
+ }
95
+ }
96
+ close() {
97
+ logger.info('Ollama client closed.');
98
+ }
99
+ }
100
+ // Factory
101
+ export function createOllama(options) {
102
+ return new Ollama(options);
103
+ }
104
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * OpenAI Provider
3
+ *
4
+ * Direct API access to OpenAI models. No massive SDKs, just axios calls.
5
+ */
6
+ import { BaseChatModel, Message, ChatResponse, ToolDefinition, ResponseFormat, StreamChunk } from '../core/types.js';
7
+ export declare class OpenAI implements BaseChatModel {
8
+ readonly supportsTools = true;
9
+ readonly supportsStructuredOutput = true;
10
+ private client;
11
+ private defaultModel;
12
+ constructor(apiKey?: string, defaultModel?: string, options?: {
13
+ baseURL?: string;
14
+ timeout?: number;
15
+ });
16
+ private preparePayload;
17
+ invoke(messages: Message[], options?: {
18
+ model?: string;
19
+ tools?: ToolDefinition[];
20
+ responseFormat?: ResponseFormat;
21
+ temperature?: number;
22
+ maxTokens?: number;
23
+ topP?: number;
24
+ frequencyPenalty?: number;
25
+ presencePenalty?: number;
26
+ stop?: string | string[];
27
+ }): Promise<ChatResponse>;
28
+ stream(messages: Message[], options?: {
29
+ model?: string;
30
+ temperature?: number;
31
+ maxTokens?: number;
32
+ topP?: number;
33
+ stop?: string[];
34
+ }): AsyncGenerator<StreamChunk>;
35
+ close(): void;
36
+ ainvoke(messages: Message[], options?: {
37
+ model?: string;
38
+ tools?: ToolDefinition[];
39
+ responseFormat?: ResponseFormat;
40
+ temperature?: number;
41
+ maxTokens?: number;
42
+ topP?: number;
43
+ }): Promise<ChatResponse>;
44
+ }
45
+ export declare function createOpenAI(apiKey?: string, defaultModel?: string): OpenAI;
46
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,aAAa,EACb,OAAO,EACP,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,kBAAkB,CAAC;AA6F1B,qBAAa,MAAO,YAAW,aAAa;IAC1C,QAAQ,CAAC,aAAa,QAAQ;IAC9B,QAAQ,CAAC,wBAAwB,QAAQ;IAEzC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAG3B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,SAAW,EACvB,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb;IAoBR,OAAO,CAAC,cAAc;IAmChB,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;QACzB,cAAc,CAAC,EAAE,cAAc,CAAC;QAChC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACrB,GACL,OAAO,CAAC,YAAY,CAAC;IAwDjB,MAAM,CACX,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACZ,GACL,cAAc,CAAC,WAAW,CAAC;IA2C9B,KAAK,IAAI,IAAI;IAKP,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;QACzB,cAAc,CAAC,EAAE,cAAc,CAAC;QAChC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,YAAY,CAAC;CAG1B;AAMD,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3E"}