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,23 @@
1
+ /**
2
+ * RAG Chain - Retrieval-Augmented Generation
3
+ */
4
+ import { BaseChatModel, BaseRetriever, Document } from '../core/types.js';
5
+ export declare class RetrievalQAChain {
6
+ private llm;
7
+ private retriever;
8
+ private promptTemplate;
9
+ constructor(options: {
10
+ llm: BaseChatModel;
11
+ retriever: BaseRetriever;
12
+ promptTemplate?: string;
13
+ });
14
+ invoke(query: string): Promise<{
15
+ text: string;
16
+ documents: Document[];
17
+ }>;
18
+ }
19
+ /**
20
+ * Factory function for RAG chain
21
+ */
22
+ export declare function createRetrievalChain(llm: BaseChatModel, retriever: BaseRetriever): RetrievalQAChain;
23
+ //# sourceMappingURL=rag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.d.ts","sourceRoot":"","sources":["../../src/chains/rag.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAY1E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE;QACnB,GAAG,EAAE,aAAa,CAAC;QACnB,SAAS,EAAE,aAAa,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;IAMK,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;CAuB9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,aAAa,GACvB,gBAAgB,CAElB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * RAG Chain - Retrieval-Augmented Generation
3
+ */
4
+ import { logger } from '../utils/logger.js';
5
+ const DEFAULT_PROMPT = `You are a helpful assistant. Use the following context to answer the query.
6
+
7
+ Context:
8
+ {context}
9
+
10
+ Query: {query}
11
+
12
+ Answer:`;
13
+ export class RetrievalQAChain {
14
+ llm;
15
+ retriever;
16
+ promptTemplate;
17
+ constructor(options) {
18
+ this.llm = options.llm;
19
+ this.retriever = options.retriever;
20
+ this.promptTemplate = options.promptTemplate ?? DEFAULT_PROMPT;
21
+ }
22
+ async invoke(query) {
23
+ const docs = await this.retriever.getRelevantDocuments(query);
24
+ // Combine documents into context
25
+ const contextParts = docs.map(doc => doc.pageContent);
26
+ const context = contextParts.join('\n\n---\n\n');
27
+ // Format prompt
28
+ const prompt = this.promptTemplate
29
+ .replace('{context}', context)
30
+ .replace('{query}', query);
31
+ logger.debug(`[RetrievalQAChain] Retrieved ${docs.length} documents. Invoking LLM.`);
32
+ const response = await this.llm.invoke([
33
+ { role: 'user', content: prompt }
34
+ ]);
35
+ return {
36
+ text: response.content,
37
+ documents: docs,
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * Factory function for RAG chain
43
+ */
44
+ export function createRetrievalChain(llm, retriever) {
45
+ return new RetrievalQAChain({ llm, retriever });
46
+ }
47
+ //# sourceMappingURL=rag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.js","sourceRoot":"","sources":["../../src/chains/rag.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,cAAc,GAAG;;;;;;;QAOf,CAAC;AAET,MAAM,OAAO,gBAAgB;IACnB,GAAG,CAAgB;IACnB,SAAS,CAAgB;IACzB,cAAc,CAAS;IAE/B,YAAY,OAIX;QACC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAE9D,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjD,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc;aAC/B,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7B,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE7B,MAAM,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,2BAA2B,CAAC,CAAC;QAErF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YACrC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAClC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAkB,EAClB,SAAwB;IAExB,OAAO,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Lazlo Core Types & Protocols
3
+ *
4
+ * The foundation of Lazlo - protocol definitions that any LLM, tool, or memory
5
+ * implementation must satisfy. No massive base classes, just duck typing.
6
+ */
7
+ export interface Message {
8
+ role: 'system' | 'user' | 'assistant' | 'tool';
9
+ content: string;
10
+ name?: string;
11
+ tool_call_id?: string;
12
+ }
13
+ export interface ToolCall {
14
+ id: string;
15
+ type: 'function';
16
+ function: {
17
+ name: string;
18
+ arguments: string | Record<string, unknown>;
19
+ };
20
+ }
21
+ export interface ChatResponse {
22
+ content: string;
23
+ tool_calls?: ToolCall[];
24
+ usage?: {
25
+ prompt_tokens: number;
26
+ completion_tokens: number;
27
+ total_tokens: number;
28
+ };
29
+ model?: string;
30
+ finish_reason?: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
31
+ }
32
+ export interface StreamChunk {
33
+ delta: string;
34
+ finish_reason?: string;
35
+ index?: number;
36
+ }
37
+ export interface BaseLLM {
38
+ invoke(prompt: string, options?: LLMInvokeOptions): Promise<string>;
39
+ ainvoke(prompt: string, options?: LLMInvokeOptions): Promise<string>;
40
+ stream?(prompt: string, options?: LLMInvokeOptions): AsyncGenerator<string>;
41
+ astream?(prompt: string, options?: LLMInvokeOptions): AsyncGenerator<string>;
42
+ }
43
+ export interface BaseChatModel {
44
+ readonly supportsTools: boolean;
45
+ readonly supportsStructuredOutput: boolean;
46
+ invoke(messages: Message[], options?: ChatInvokeOptions): Promise<ChatResponse>;
47
+ ainvoke?(messages: Message[], options?: ChatInvokeOptions): Promise<ChatResponse>;
48
+ stream?(messages: Message[], options?: ChatInvokeOptions): AsyncGenerator<StreamChunk>;
49
+ astream?(messages: Message[], options?: ChatInvokeOptions): AsyncGenerator<StreamChunk>;
50
+ }
51
+ export interface BaseTool {
52
+ name: string;
53
+ description: string;
54
+ argsSchema?: Record<string, unknown>;
55
+ invoke(input: string | Record<string, unknown>): Promise<string>;
56
+ ainvoke?(input: string | Record<string, unknown>): Promise<string>;
57
+ }
58
+ export interface BaseMemory {
59
+ loadMemoryVariables(inputs: Record<string, unknown>): Promise<Record<string, unknown>>;
60
+ saveContext(inputs: Record<string, unknown>, outputs: Record<string, string>): Promise<void>;
61
+ clear(): Promise<void>;
62
+ }
63
+ export interface BaseRetriever {
64
+ getRelevantDocuments(query: string): Promise<Document[]>;
65
+ }
66
+ export interface BaseVectorStore {
67
+ addTexts(texts: string[], metadatas?: Record<string, unknown>[]): Promise<string[]>;
68
+ similaritySearch(query: string, k?: number): Promise<Document[]>;
69
+ addDocuments?(documents: Document[]): Promise<string[]>;
70
+ }
71
+ export interface BaseEmbeddings {
72
+ embedQuery(text: string): Promise<number[]>;
73
+ embedDocuments(texts: string[]): Promise<number[][]>;
74
+ }
75
+ export interface Document {
76
+ pageContent: string;
77
+ metadata: Record<string, unknown>;
78
+ }
79
+ export interface LLMInvokeOptions {
80
+ model?: string;
81
+ temperature?: number;
82
+ maxTokens?: number;
83
+ topP?: number;
84
+ frequencyPenalty?: number;
85
+ presencePenalty?: number;
86
+ stop?: string | string[];
87
+ [key: string]: unknown;
88
+ }
89
+ export interface ChatInvokeOptions extends LLMInvokeOptions {
90
+ tools?: ToolDefinition[];
91
+ responseFormat?: ResponseFormat;
92
+ }
93
+ export interface ToolDefinition {
94
+ type: 'function';
95
+ function: {
96
+ name: string;
97
+ description: string;
98
+ parameters: Record<string, unknown>;
99
+ };
100
+ }
101
+ export interface ResponseFormat {
102
+ type: 'text' | 'json_object' | 'json_schema';
103
+ json_schema?: {
104
+ name: string;
105
+ schema: Record<string, unknown>;
106
+ strict?: boolean;
107
+ };
108
+ }
109
+ export interface ChainInputs {
110
+ [key: string]: unknown;
111
+ }
112
+ export interface ChainOutputs {
113
+ [key: string]: unknown;
114
+ }
115
+ export interface Chain {
116
+ invoke(inputs: ChainInputs): Promise<ChainOutputs>;
117
+ ainvoke?(inputs: ChainInputs): Promise<ChainOutputs>;
118
+ }
119
+ export interface ModelPricing {
120
+ input: number;
121
+ output: number;
122
+ }
123
+ export type JsonPrimitive = string | number | boolean | null;
124
+ export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
125
+ export interface JsonObject {
126
+ [key: string]: JsonValue;
127
+ }
128
+ export interface JsonArray extends Array<JsonValue> {
129
+ }
130
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Lazlo Core Types & Protocols
3
+ *
4
+ * The foundation of Lazlo - protocol definitions that any LLM, tool, or memory
5
+ * implementation must satisfy. No massive base classes, just duck typing.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Document Loaders
3
+ *
4
+ * Load documents from various sources: PDF, text, CSV, JSON, HTML
5
+ */
6
+ export interface Document {
7
+ pageContent: string;
8
+ metadata: Record<string, unknown>;
9
+ }
10
+ export interface BaseLoader {
11
+ load(): Promise<Document[]>;
12
+ loadSync(): Document[];
13
+ }
14
+ /**
15
+ * Text File Loader
16
+ */
17
+ export declare class TextLoader implements BaseLoader {
18
+ private filePath;
19
+ constructor(filePath: string);
20
+ load(): Promise<Document[]>;
21
+ loadSync(): Document[];
22
+ private parseContent;
23
+ }
24
+ /**
25
+ * CSV File Loader
26
+ */
27
+ export declare class CSVLoader implements BaseLoader {
28
+ private filePath;
29
+ private options;
30
+ constructor(filePath: string, options?: {
31
+ delimiter?: string;
32
+ headers?: string[];
33
+ skipEmptyLines?: boolean;
34
+ });
35
+ load(): Promise<Document[]>;
36
+ loadSync(): Document[];
37
+ private parseCSV;
38
+ private parseLine;
39
+ }
40
+ /**
41
+ * JSON File Loader
42
+ */
43
+ export declare class JSONLoader implements BaseLoader {
44
+ private filePath;
45
+ private options;
46
+ constructor(filePath: string, options?: {
47
+ key?: string;
48
+ });
49
+ load(): Promise<Document[]>;
50
+ loadSync(): Document[];
51
+ private parseJSON;
52
+ }
53
+ /**
54
+ * Auto-detect file type and load
55
+ */
56
+ export declare function loadDocument(filePath: string, options?: any): Promise<Document[]>;
57
+ /**
58
+ * Load multiple files
59
+ */
60
+ export declare function loadDocuments(filePaths: string[], options?: any): Promise<Document[]>;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/document_loaders/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5B,QAAQ,IAAI,QAAQ,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAC/B,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAE9B,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKjC,QAAQ,IAAI,QAAQ,EAAE;IAKtB,OAAO,CAAC,YAAY;CASrB;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IAExC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBADP,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,cAAc,CAAC,EAAE,OAAO,CAAC;KACrB;IAGF,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKjC,QAAQ,IAAI,QAAQ,EAAE;IAKtB,OAAO,CAAC,QAAQ;IAiChB,OAAO,CAAC,SAAS;CAkBlB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAEzC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBADP,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACT;IAGF,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKjC,QAAQ,IAAI,QAAQ,EAAE;IAKtB,OAAO,CAAC,SAAS;CAqClB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAmBvF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,QAAQ,EAAE,CAAC,CASrB"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Document Loaders
3
+ *
4
+ * Load documents from various sources: PDF, text, CSV, JSON, HTML
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { readFileSync } from 'fs';
8
+ import { extname } from 'path';
9
+ /**
10
+ * Text File Loader
11
+ */
12
+ export class TextLoader {
13
+ filePath;
14
+ constructor(filePath) {
15
+ this.filePath = filePath;
16
+ }
17
+ async load() {
18
+ const content = await readFile(this.filePath, 'utf-8');
19
+ return this.parseContent(content);
20
+ }
21
+ loadSync() {
22
+ const content = readFileSync(this.filePath, 'utf-8');
23
+ return this.parseContent(content);
24
+ }
25
+ parseContent(content) {
26
+ return [{
27
+ pageContent: content,
28
+ metadata: {
29
+ source: this.filePath,
30
+ type: 'text',
31
+ },
32
+ }];
33
+ }
34
+ }
35
+ /**
36
+ * CSV File Loader
37
+ */
38
+ export class CSVLoader {
39
+ filePath;
40
+ options;
41
+ constructor(filePath, options = {}) {
42
+ this.filePath = filePath;
43
+ this.options = options;
44
+ }
45
+ async load() {
46
+ const content = await readFile(this.filePath, 'utf-8');
47
+ return this.parseCSV(content);
48
+ }
49
+ loadSync() {
50
+ const content = readFileSync(this.filePath, 'utf-8');
51
+ return this.parseCSV(content);
52
+ }
53
+ parseCSV(content) {
54
+ const delimiter = this.options.delimiter || ',';
55
+ const lines = content.split('\n').filter(line => line.trim());
56
+ if (lines.length === 0)
57
+ return [];
58
+ const headers = this.options.headers || this.parseLine(lines[0], delimiter);
59
+ const documents = [];
60
+ const startIndex = this.options.headers ? 0 : 1;
61
+ for (let i = startIndex; i < lines.length; i++) {
62
+ const values = this.parseLine(lines[i], delimiter);
63
+ if (this.options.skipEmptyLines && values.every(v => !v.trim()))
64
+ continue;
65
+ const obj = {};
66
+ headers.forEach((header, idx) => {
67
+ obj[header.trim()] = values[idx] || '';
68
+ });
69
+ documents.push({
70
+ pageContent: JSON.stringify(obj),
71
+ metadata: {
72
+ source: this.filePath,
73
+ type: 'csv',
74
+ row: i - startIndex + 1,
75
+ },
76
+ });
77
+ }
78
+ return documents;
79
+ }
80
+ parseLine(line, delimiter) {
81
+ const result = [];
82
+ let current = '';
83
+ let inQuotes = false;
84
+ for (const char of line) {
85
+ if (char === '"') {
86
+ inQuotes = !inQuotes;
87
+ }
88
+ else if (char === delimiter && !inQuotes) {
89
+ result.push(current);
90
+ current = '';
91
+ }
92
+ else {
93
+ current += char;
94
+ }
95
+ }
96
+ result.push(current);
97
+ return result;
98
+ }
99
+ }
100
+ /**
101
+ * JSON File Loader
102
+ */
103
+ export class JSONLoader {
104
+ filePath;
105
+ options;
106
+ constructor(filePath, options = {}) {
107
+ this.filePath = filePath;
108
+ this.options = options;
109
+ }
110
+ async load() {
111
+ const content = await readFile(this.filePath, 'utf-8');
112
+ return this.parseJSON(content);
113
+ }
114
+ loadSync() {
115
+ const content = readFileSync(this.filePath, 'utf-8');
116
+ return this.parseJSON(content);
117
+ }
118
+ parseJSON(content) {
119
+ const data = JSON.parse(content);
120
+ if (this.options.key) {
121
+ const array = data[this.options.key];
122
+ if (Array.isArray(array)) {
123
+ return array.map((item, idx) => ({
124
+ pageContent: typeof item === 'string' ? item : JSON.stringify(item),
125
+ metadata: {
126
+ source: this.filePath,
127
+ type: 'json',
128
+ key: this.options.key,
129
+ index: idx,
130
+ },
131
+ }));
132
+ }
133
+ }
134
+ if (Array.isArray(data)) {
135
+ return data.map((item, idx) => ({
136
+ pageContent: typeof item === 'string' ? item : JSON.stringify(item),
137
+ metadata: {
138
+ source: this.filePath,
139
+ type: 'json',
140
+ index: idx,
141
+ },
142
+ }));
143
+ }
144
+ return [{
145
+ pageContent: JSON.stringify(data),
146
+ metadata: {
147
+ source: this.filePath,
148
+ type: 'json',
149
+ },
150
+ }];
151
+ }
152
+ }
153
+ /**
154
+ * Auto-detect file type and load
155
+ */
156
+ export async function loadDocument(filePath, options) {
157
+ const ext = extname(filePath).toLowerCase();
158
+ switch (ext) {
159
+ case '.txt':
160
+ case '.md':
161
+ case '.text':
162
+ return new TextLoader(filePath).load();
163
+ case '.csv':
164
+ return new CSVLoader(filePath, options?.csv).load();
165
+ case '.json':
166
+ return new JSONLoader(filePath, options?.json).load();
167
+ default:
168
+ // Default to text loader
169
+ return new TextLoader(filePath).load();
170
+ }
171
+ }
172
+ /**
173
+ * Load multiple files
174
+ */
175
+ export async function loadDocuments(filePaths, options) {
176
+ const documents = [];
177
+ for (const filePath of filePaths) {
178
+ const docs = await loadDocument(filePath, options);
179
+ documents.push(...docs);
180
+ }
181
+ return documents;
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/document_loaders/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Google Embeddings
3
+ *
4
+ * Google AI Gemini embeddings for text vectorization
5
+ */
6
+ export interface GoogleEmbeddingsOptions {
7
+ apiKey?: string;
8
+ model?: string;
9
+ taskType?: 'RETRIEVAL_QUERY' | 'RETRIEVAL_DOCUMENT' | 'SEMANTIC_SIMILARITY' | 'CLASSIFICATION' | 'CLUSTERING';
10
+ title?: string;
11
+ }
12
+ export interface EmbeddingResponse {
13
+ embedding: {
14
+ values: number[];
15
+ };
16
+ }
17
+ /**
18
+ * Google Embeddings
19
+ *
20
+ * Uses Google's Generative Language API for embeddings
21
+ */
22
+ export declare class GoogleEmbeddings {
23
+ readonly model: string;
24
+ readonly taskType: string;
25
+ readonly title?: string;
26
+ private apiKey;
27
+ private apiUrl;
28
+ constructor(options?: GoogleEmbeddingsOptions);
29
+ /**
30
+ * Embed a single text
31
+ */
32
+ embedQuery(text: string): Promise<number[]>;
33
+ /**
34
+ * Embed multiple texts
35
+ */
36
+ embedDocuments(texts: string[]): Promise<number[][]>;
37
+ private embed;
38
+ }
39
+ /**
40
+ * Factory function
41
+ */
42
+ export declare function createGoogleEmbeddings(options?: GoogleEmbeddingsOptions): GoogleEmbeddings;
43
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/embeddings/google.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAC9G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAsD;gBAExD,OAAO,GAAE,uBAA4B;IAWjD;;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;YAI5C,KAAK;CAoDpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAE1F"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Google Embeddings
3
+ *
4
+ * Google AI Gemini embeddings for text vectorization
5
+ */
6
+ import axios from 'axios';
7
+ import { logger } from '../utils/logger.js';
8
+ /**
9
+ * Google Embeddings
10
+ *
11
+ * Uses Google's Generative Language API for embeddings
12
+ */
13
+ export class GoogleEmbeddings {
14
+ model;
15
+ taskType;
16
+ title;
17
+ apiKey;
18
+ apiUrl = 'https://generativelanguage.googleapis.com/v1beta';
19
+ constructor(options = {}) {
20
+ this.apiKey = options.apiKey || (typeof process !== 'undefined' ? process.env?.GEMINI_API_KEY : '') || '';
21
+ this.model = options.model || 'text-embedding-004';
22
+ this.taskType = options.taskType || 'RETRIEVAL_DOCUMENT';
23
+ this.title = options.title;
24
+ if (!this.apiKey) {
25
+ logger.warn('[GoogleEmbeddings] No API key provided. Set GEMINI_API_KEY env var or pass apiKey option.');
26
+ }
27
+ }
28
+ /**
29
+ * Embed a single text
30
+ */
31
+ async embedQuery(text) {
32
+ return this.embed([text]).then(res => res[0]);
33
+ }
34
+ /**
35
+ * Embed multiple texts
36
+ */
37
+ async embedDocuments(texts) {
38
+ return this.embed(texts);
39
+ }
40
+ async embed(texts) {
41
+ if (!this.apiKey) {
42
+ throw new Error('Google API key required. Set GEMINI_API_KEY or pass apiKey option.');
43
+ }
44
+ const embeddings = [];
45
+ // Google API allows up to 100 inputs per request
46
+ const batchSize = 100;
47
+ for (let i = 0; i < texts.length; i += batchSize) {
48
+ const batch = texts.slice(i, i + batchSize);
49
+ try {
50
+ const requests = batch.map((content, idx) => ({
51
+ model: `models/${this.model}`,
52
+ content: { role: 'user', parts: [{ text: content }] },
53
+ taskType: this.taskType,
54
+ title: this.title,
55
+ }));
56
+ const response = await axios.post(`${this.apiUrl}/embedContent:batchEmbedContents?key=${this.apiKey}`, { requests }, {
57
+ headers: { 'Content-Type': 'application/json' },
58
+ timeout: 60000,
59
+ });
60
+ const results = response.data.embeddings || [];
61
+ for (let j = 0; j < results.length; j++) {
62
+ const result = results[j];
63
+ if (result.embedding?.values) {
64
+ embeddings.push(result.embedding.values);
65
+ }
66
+ else {
67
+ // Fallback: generate random embedding
68
+ logger.warn(`[GoogleEmbeddings] Empty embedding for batch ${Math.floor(i / batchSize)}, index ${j}`);
69
+ embeddings.push(new Array(768).fill(0));
70
+ }
71
+ }
72
+ }
73
+ catch (error) {
74
+ logger.error(`[GoogleEmbeddings] Error embedding batch: ${error.message}`);
75
+ // Return zero embeddings on error
76
+ for (let j = 0; j < batch.length; j++) {
77
+ embeddings.push(new Array(768).fill(0));
78
+ }
79
+ }
80
+ }
81
+ return embeddings;
82
+ }
83
+ }
84
+ /**
85
+ * Factory function
86
+ */
87
+ export function createGoogleEmbeddings(options) {
88
+ return new GoogleEmbeddings(options);
89
+ }
90
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/embeddings/google.ts"],"names":[],"mappings":"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"}