@node-llm/orm 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +210 -57
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/dist/BaseChat.d.ts +66 -0
- package/dist/BaseChat.d.ts.map +1 -0
- package/dist/BaseChat.js +110 -0
- package/dist/adapters/prisma/Chat.d.ts +62 -0
- package/dist/adapters/prisma/Chat.d.ts.map +1 -0
- package/dist/adapters/prisma/Chat.js +260 -0
- package/dist/adapters/prisma/index.d.ts +27 -0
- package/dist/adapters/prisma/index.d.ts.map +1 -0
- package/dist/adapters/prisma/index.js +25 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/package.json +8 -8
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,64 +1,217 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
5
|
+
## [1.6.1] - 2026-01-19 (@node-llm/core)
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
### Documentation & Examples
|
|
8
|
+
|
|
9
|
+
- **Example Reorganization**: Better structure for examples, separating full applications from scripts.
|
|
10
|
+
- **Improved READMEs**: Updated examples to use absolute GitHub URLs for better compatibility with npm.
|
|
11
|
+
- **ORM Integration**: Added references to the new `@node-llm/orm` package.
|
|
12
|
+
- **Test Stability**: Fixed integration test paths for vision and audio examples after reorganization.
|
|
13
|
+
|
|
14
|
+
## [0.1.1] - 2026-01-19 (@node-llm/orm)
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Broken Links**: Corrected documentation and example links in README.
|
|
19
|
+
|
|
20
|
+
## [0.1.0] - 2026-01-18 (@node-llm/orm)
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Initial Release**: Comprehensive persistence layer for NodeLLM using Prisma.
|
|
25
|
+
- **Chat Persistence**: Automatic tracking of chat sessions, messages, and history.
|
|
26
|
+
- **Streaming Support**: `chat.askStream()` with automatic token persistence.
|
|
27
|
+
- **Tool Audit Trail**: Tracking of every tool execution, parameters, and results.
|
|
28
|
+
- **API Metrics**: Automatic logging of latency, token usage, and cost.
|
|
29
|
+
|
|
30
|
+
## [1.6.0] - 2026-01-16 (@node-llm/core)
|
|
31
|
+
|
|
32
|
+
### Major Changes
|
|
33
|
+
|
|
34
|
+
- **Rename LLM to NodeLLM**: Standardized naming across the library. `createLLM` now returns a `NodeLLM` instance.
|
|
35
|
+
- **Singleton Removal**: Moved away from global singleton patterns to support multiple independent LLM instances.
|
|
36
|
+
- **Improved Factory Pattern**: Refactored `createLLM()` for better provider initialization and type safety.
|
|
37
|
+
|
|
38
|
+
## [1.5.4] - 2026-01-15
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- **Async I/O Safety**: Refactored internal file loading utilities (`Binary.ts`, `FileLoader.ts`) to strictly use non-blocking `fs.promises` for all file operations, eliminating potential event loop blocking in high-throughput node servers.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- **Centralized Logging**: Replaced scattered `console.log/error/warn` calls with a unified `Logger` adapter. All internal library logs now respect `NODELLM_DEBUG=true` configuration and use a consistent format, preventing log pollution in production environments.
|
|
47
|
+
|
|
48
|
+
## [1.5.3] - 2026-01-15
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- **Multi-turn Tool Loop State Loss (CRITICAL)**: Fixed a critical bug where `response_format` (Structured Outputs), `temperature`, `max_tokens`, and provider-specific `params` were being dropped after the first tool call in agentic workflows. This caused the model to revert to plain text or markdown in subsequent turns, resulting in empty or malformed data when using `withSchema()`. The fix ensures all configuration state is maintained across all tool-calling turns in `Chat.ask()`.
|
|
53
|
+
- **ToolHandler Serialization**: Ensuring tool return values are always stringified before being sent back to the LLM. This fixes issues where tools returning objects would cause provider errors, enabling better "AI Self-Correction" workflows where the model sees the raw object data.
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- **AbortSignal Support**: Added proper cancellation support for long-running LLM requests via `signal?: AbortSignal` in `AskOptions`. Users can now abort requests using standard `AbortController`, enabling proper cleanup in interactive applications and server environments. The signal is propagated through all tool-calling turns and underlying fetch requests.
|
|
58
|
+
|
|
59
|
+
## [1.5.2] - 2026-01-15
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **ESM & Dotenv Safety**: Implemented lazy initialization for all environment-backed configuration (like `OPENAI_API_KEY`). This resolves race conditions where `process.env` might be accessed before `dotenv.config()` is called in ESM modules.
|
|
64
|
+
- **OpenAI o1/o3-mini Compatibility**: Automatically map `max_tokens` to `max_completion_tokens` for OpenAI reasoning models, which are required for these specific models.
|
|
65
|
+
- **withProvider Inheritance**: Fixed a bug where scoped instances created via `withProvider()` failed to inherit global defaults due to getter-based property enumeration.
|
|
66
|
+
- **Process Lifecycle Protection**: Added unreferenced timers and explicit exit handling to prevent Node.js processes from hanging after completion.
|
|
67
|
+
- **Ollama Base URL**: Fixed a typo in the `ollamaApiBase` configuration setter.
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- **Reasoning Content Capture**: Support for capturing and returning `reasoning_content` (thinking text) from OpenAI reasoning models.
|
|
72
|
+
- **Enhanced Usage Tracking**: Precise capture of `reasoning_tokens` and `cached_tokens` in usage metadata for supported providers.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- **Internal Architecture Cleanup**: Refactored shared validation and tool execution logic between `Chat.ask()` and `Chat.stream()` for 100% feature parity and better maintainability.
|
|
77
|
+
- **Configuration Snapshotting**: Enhanced the internal configuration system to support dynamic property discovery and cloning for custom providers.
|
|
78
|
+
|
|
79
|
+
## [1.5.0] - 2026-01-12
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
|
|
83
|
+
- **🚦 Tool Execution Policies**: Introduced granular control over tool execution with three modes:
|
|
84
|
+
- `auto` (default): Tools execute automatically as proposed by the LLM
|
|
85
|
+
- `confirm`: Human-in-the-loop approval via `onConfirmToolCall` hook before each tool execution
|
|
86
|
+
- `dry-run`: Model proposes tools but execution is prevented, returning the plan for inspection
|
|
87
|
+
- **ToolExecutionMode Enum**: New exported enum for type-safe execution mode configuration
|
|
88
|
+
- **Tool Call Inspection**: Added `tool_calls` property to `ChatResponseString` for inspecting proposed tool executions
|
|
89
|
+
- **Enhanced Observability**: New audit hooks for comprehensive tool execution tracking:
|
|
90
|
+
- `onToolCallStart`: Triggered when a tool call begins
|
|
91
|
+
- `onToolCallEnd`: Triggered when a tool call completes successfully
|
|
92
|
+
- `onToolCallError`: Triggered when a tool call fails
|
|
93
|
+
- **Security Documentation**: New comprehensive [Security & Compliance](https://node-llm.eshaiju.com/advanced/security.html) guide covering:
|
|
94
|
+
- Smart Context Isolation
|
|
95
|
+
- Content Policy Hooks
|
|
96
|
+
- Tool Execution Policies
|
|
97
|
+
- Observability as Security
|
|
98
|
+
- Loop Protection & Resource Limits (new section)
|
|
99
|
+
- **🛡️ Request Timeout Security**: Comprehensive timeout protection across all API operations
|
|
100
|
+
- Global `requestTimeout` configuration (default: 30 seconds)
|
|
101
|
+
- Per-chat and per-request timeout overrides
|
|
102
|
+
- Applies to: chat, streaming, image generation, transcription, embeddings, and moderation
|
|
103
|
+
- Prevents DoS attacks, hanging requests, and resource exhaustion
|
|
104
|
+
- **🛡️ Global MaxTokens Configuration**: Cost control and output limiting for text generation
|
|
105
|
+
- Global `maxTokens` configuration (default: 4096 tokens)
|
|
106
|
+
- Per-chat and per-request token limit overrides
|
|
107
|
+
- Prevents excessive output generation and cost overruns
|
|
108
|
+
- Resolution order: per-request → chat-level → global config → default
|
|
109
|
+
- **🛡️ Complete Security Framework**: Four-pillar defense-in-depth protection
|
|
110
|
+
- `requestTimeout`: DoS protection (new)
|
|
111
|
+
- `maxRetries`: Retry storm prevention
|
|
112
|
+
- `maxToolCalls`: Infinite loop prevention
|
|
113
|
+
- `maxTokens`: Cost control (new)
|
|
114
|
+
- **Custom Provider Timeout Support**: Updated custom provider documentation with `fetchWithTimeout` utility guidance
|
|
115
|
+
- **Real-World Example**: Added `examples/security-tool-policies.mjs` demonstrating human-in-the-loop security patterns
|
|
116
|
+
|
|
117
|
+
### Changed
|
|
118
|
+
|
|
119
|
+
- **Deprecated Hook Aliases**: `onToolCall` and `onToolResult` now internally map to `onToolCallStart` and `onToolCallEnd` for backward compatibility
|
|
120
|
+
|
|
121
|
+
### Documentation
|
|
122
|
+
|
|
123
|
+
- Updated configuration guide with security limits section
|
|
124
|
+
- Enhanced security documentation with Loop Protection & Resource Limits section
|
|
125
|
+
- Updated README with four-pillar security framework
|
|
126
|
+
- Added timeout handling to custom provider guide
|
|
127
|
+
- Updated tool calling documentation with execution policy examples
|
|
128
|
+
- Added tool execution policies to security documentation
|
|
129
|
+
- Enhanced README with observability and security features
|
|
130
|
+
- Added comprehensive security examples to documentation site
|
|
131
|
+
|
|
132
|
+
## [1.4.0] - 2026-01-06
|
|
133
|
+
|
|
134
|
+
### Added
|
|
135
|
+
|
|
136
|
+
- **Plugin System for Custom Providers**: Introduced `NodeLLM.registerProvider()` and exported `BaseProvider`, allowing developers to easily add proprietary or custom LLM services at runtime.
|
|
137
|
+
- **Improved Extensibility Documentation**: Dedicated "Custom Providers" guide with real-world patterns for handling provider-specific configurations and extra fields.
|
|
138
|
+
- **Community Health Patterns**: Added standardized GitHub issue templates (`bug_report.yml`, `feature_request.yml`), contributing guide, and pull request templates.
|
|
139
|
+
|
|
140
|
+
## [1.3.0] - 2026-01-05
|
|
141
|
+
|
|
142
|
+
### Added
|
|
143
|
+
|
|
144
|
+
- **Class-based Tool DSL**: Official documentation and examples for creating tools using a clean, class-based syntax extending `Tool`.
|
|
145
|
+
- **Enhanced Example Library**: Added missing runnable examples to the documentation, covering embeddings, usage tracking, and provider-specific features.
|
|
146
|
+
- **Improved Documentation Navigation**: Fixed internal linking and integrated all examples directly into the documentation site.
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
|
|
150
|
+
- **Documentation Imports**: Updated all documentation and examples to recommend importing `z` directly from `@node-llm/core` instead of `zod`, promoting a more unified API surface.
|
|
151
|
+
- **Example Paths**: Converted all example file paths in the documentation into direct GitHub links for easier access.
|
|
152
|
+
- **Provider Consistency**: Ensured all providers (OpenAI, Gemini, Anthropic, DeepSeek) have a consistent set of documented examples.
|
|
153
|
+
|
|
154
|
+
## [1.2.0] - 2026-01-04
|
|
155
|
+
|
|
156
|
+
### Added
|
|
157
|
+
|
|
158
|
+
- **🚀 Streaming with Tool Calling**: Revolutionary feature enabling automatic tool execution during streaming across all providers (OpenAI, Anthropic, Gemini, DeepSeek). Tools are executed transparently and the stream continues with the model's final response.
|
|
159
|
+
- **🔍 Comprehensive Debug Logging**: Added detailed HTTP request/response logging for every feature and provider. Enable with `NODELLM_DEBUG=true` to see method, URL, status, and full payloads.
|
|
160
|
+
- Coverage: Chat, Streaming, Images, Embeddings, Transcription, Moderation
|
|
161
|
+
- Providers: OpenAI, Anthropic, Gemini, DeepSeek, Ollama
|
|
162
|
+
- **Enhanced Logger**: New `logRequest()` and `logResponse()` methods for structured logging
|
|
163
|
+
- **Tool Event Handlers in Streaming**: `onToolCall()` and `onToolResult()` now work seamlessly during streaming
|
|
164
|
+
- **Comprehensive Examples**: Added streaming + tools examples for all providers
|
|
165
|
+
|
|
166
|
+
### Changed
|
|
167
|
+
|
|
168
|
+
- Updated `ChatChunk` interface to support `tool_calls` field
|
|
169
|
+
- Enhanced `ChatStream` to handle multi-round tool execution loops
|
|
170
|
+
- All streaming providers now parse and yield tool calls
|
|
171
|
+
|
|
172
|
+
### Documentation
|
|
173
|
+
|
|
174
|
+
- Updated streaming documentation with tool calling examples
|
|
175
|
+
- Enhanced tools documentation to highlight streaming support
|
|
176
|
+
- Improved debugging documentation with comprehensive coverage details
|
|
177
|
+
- Updated README with streaming + tools examples and debug logging section
|
|
178
|
+
|
|
179
|
+
## [1.0.0] - 2026-01-03
|
|
180
|
+
|
|
181
|
+
### Added
|
|
182
|
+
|
|
183
|
+
- **Major Stable Release**: Consolidated architectural foundation for production-ready LLM integrations.
|
|
184
|
+
- **Advanced Streaming API**: Introduced a powerful global `Stream` utility supporting `.tee()`, `.toArray()`, and native `.abort()`.
|
|
185
|
+
- **Comprehensive Model Registry**: Synchronized with `models.dev` for verified models across OpenAI, Anthropic, Gemini, DeepSeek, OpenRouter, and Ollama.
|
|
186
|
+
- **First-class OpenRouter Support**: High-performance implementation with automated capability detection and discovery.
|
|
187
|
+
- **Enhanced Local LLM Support**: Deep integration with Ollama, including vision and tool-calling models.
|
|
188
|
+
- **Rich Documentation**: Complete documentation overhaul with dedicated provider guides, examples, and architectural deep-dives.
|
|
189
|
+
|
|
190
|
+
### Changed
|
|
191
|
+
|
|
192
|
+
- Refactored `Chat.stream()` to return the advanced `Stream` object.
|
|
193
|
+
- Standardized provider registration and error handling architecture.
|
|
194
|
+
|
|
195
|
+
## [0.8.0] - 2026-01-02
|
|
196
|
+
|
|
197
|
+
### Added
|
|
198
|
+
|
|
199
|
+
- **Ollama Provider**: Native support for local inference via Ollama.
|
|
200
|
+
- **Model Discovery**: Ability to list and inspect local models using `NodeLLM.listModels()`.
|
|
201
|
+
- **DeepSeek V3 and R1**: Full support for DeepSeek's latest chat and reasoning models.
|
|
202
|
+
- **Enhanced Model Registry**: Now includes Gemini 1.5 Flash 8B and popular local models with accurate pricing and capabilities.
|
|
203
|
+
- **Rich Documentation**: New guides and examples for local integration, vision, and tool-calling.
|
|
204
|
+
|
|
205
|
+
## [0.7.0] - 2026-01-02
|
|
206
|
+
|
|
207
|
+
### Added
|
|
208
|
+
|
|
209
|
+
- Unified configuration system via `NodeLLM.configure`.
|
|
210
|
+
- Better support for custom endpoints.
|
|
211
|
+
|
|
212
|
+
## [0.6.0] - 2026-01-01
|
|
9
213
|
|
|
10
214
|
### Added
|
|
11
215
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- **Custom Fields Support**: Pass additional fields (e.g., `userId`, `projectId`) directly to `createChat()` - they're automatically spread into the Prisma create call
|
|
15
|
-
- **Native JSON Metadata**: Metadata passed as-is to support native `Json`/`JSONB` database types for efficient querying
|
|
16
|
-
- **Optional Persistence Configuration**: New `persistence` option allows selective disabling of tool call and request tracking
|
|
17
|
-
- `persistence.toolCalls`: Enable/disable tool call persistence (default: `true`)
|
|
18
|
-
- `persistence.requests`: Enable/disable API request metrics (default: `true`)
|
|
19
|
-
- **Tool Call Tracking**: Audit log of every tool execution with arguments and results
|
|
20
|
-
- **API Request Metrics**: Track latency, tokens, and cost for every API call
|
|
21
|
-
- **Custom Table Names**: Support for custom Prisma table names
|
|
22
|
-
- **Comprehensive Tests**: 24 unit tests covering all features
|
|
23
|
-
- **Example Application**: Complete HR Chatbot RAG example demonstrating all ORM features
|
|
24
|
-
- **TypeScript Support**: Full type safety with Prisma and TypeScript
|
|
25
|
-
- **Prisma Adapter**: Production-ready adapter for Prisma ORM
|
|
26
|
-
|
|
27
|
-
### Example Usage
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
// Custom fields
|
|
31
|
-
const chat = await createChat(prisma, llm, {
|
|
32
|
-
model: "gpt-4",
|
|
33
|
-
userId: "user_123",
|
|
34
|
-
projectId: "proj_456",
|
|
35
|
-
metadata: { source: "web-ui", tags: ["support"] }
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// Optional persistence
|
|
39
|
-
const chat = await createChat(prisma, llm, {
|
|
40
|
-
model: "gpt-4",
|
|
41
|
-
persistence: {
|
|
42
|
-
toolCalls: false, // Skip tool call tracking
|
|
43
|
-
requests: true // Keep request metrics
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Streaming with persistence
|
|
48
|
-
for await (const token of chat.askStream("Hello")) {
|
|
49
|
-
process.stdout.write(token);
|
|
50
|
-
}
|
|
51
|
-
// Messages automatically persisted after stream completes
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## [Unreleased]
|
|
55
|
-
|
|
56
|
-
### Planned
|
|
57
|
-
|
|
58
|
-
- Support for custom message types
|
|
59
|
-
- Batch operations for message history
|
|
60
|
-
- Advanced query helpers
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
[0.1.0]: https://github.com/node-llm/node-llm/releases/tag/orm-v0.1.0
|
|
216
|
+
- Initial support for DeepSeek R1 reasoning.
|
|
217
|
+
- Enhanced tool execution logic.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NodeLLM contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
> Database persistence layer for NodeLLM. Automatically tracks chats, messages, tool calls, and API requests.
|
|
9
9
|
|
|
10
|
-
**[Read the Full Documentation](https://node-llm.
|
|
10
|
+
**[Read the Full Documentation](https://node-llm.eshaiju.com/orm/prisma)** | **[View Example App](https://github.com/node-llm/node-llm/tree/main/examples/applications/hr-chatbot-rag)**
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface ChatRecord {
|
|
2
|
+
id: string;
|
|
3
|
+
model?: string | null;
|
|
4
|
+
provider?: string | null;
|
|
5
|
+
instructions?: string | null;
|
|
6
|
+
metadata?: string | null;
|
|
7
|
+
createdAt: Date;
|
|
8
|
+
updatedAt: Date;
|
|
9
|
+
}
|
|
10
|
+
export interface ChatOptions {
|
|
11
|
+
model?: string;
|
|
12
|
+
provider?: string;
|
|
13
|
+
instructions?: string;
|
|
14
|
+
metadata?: Record<string, any>;
|
|
15
|
+
debug?: boolean;
|
|
16
|
+
persistence?: {
|
|
17
|
+
toolCalls?: boolean;
|
|
18
|
+
requests?: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface UserHooks {
|
|
22
|
+
onToolCallStart: ((call: any) => void | Promise<void>)[];
|
|
23
|
+
onToolCallEnd: ((call: any, result: any) => void | Promise<void>)[];
|
|
24
|
+
afterResponse: ((resp: any) => any | Promise<any>)[];
|
|
25
|
+
onNewMessage: (() => void | Promise<void>)[];
|
|
26
|
+
onEndMessage: ((message: any) => void | Promise<void>)[];
|
|
27
|
+
onToolCallError: ((call: any, error: Error) => any | Promise<any>)[];
|
|
28
|
+
onConfirmToolCall: ((call: any) => boolean | Promise<boolean>)[];
|
|
29
|
+
onBeforeRequest: ((messages: any[]) => any | Promise<any>)[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* BaseChat - A generic base class for ORM chat implementations.
|
|
33
|
+
*/
|
|
34
|
+
export declare abstract class BaseChat<R extends ChatRecord = ChatRecord, O extends ChatOptions = ChatOptions> {
|
|
35
|
+
record: R;
|
|
36
|
+
options: O;
|
|
37
|
+
id: string;
|
|
38
|
+
protected localOptions: any;
|
|
39
|
+
protected customTools: any[];
|
|
40
|
+
protected userHooks: UserHooks;
|
|
41
|
+
constructor(record: R, options?: O);
|
|
42
|
+
protected log(...args: any[]): void;
|
|
43
|
+
withInstructions(instruction: string, options?: {
|
|
44
|
+
replace?: boolean;
|
|
45
|
+
}): this;
|
|
46
|
+
system(instruction: string, options?: {
|
|
47
|
+
replace?: boolean;
|
|
48
|
+
}): this;
|
|
49
|
+
withTemperature(temp: number): this;
|
|
50
|
+
withModel(model: string): this;
|
|
51
|
+
withProvider(provider: string): this;
|
|
52
|
+
withTools(tools: any[]): this;
|
|
53
|
+
withTool(tool: any): this;
|
|
54
|
+
use(tool: any): this;
|
|
55
|
+
withSchema(schema: any): this;
|
|
56
|
+
withParams(params: Record<string, any>): this;
|
|
57
|
+
onToolCallStart(callback: (call: any) => void | Promise<void>): this;
|
|
58
|
+
onToolCall(callback: (call: any) => void | Promise<void>): this;
|
|
59
|
+
onToolCallEnd(callback: (call: any, result: any) => void | Promise<void>): this;
|
|
60
|
+
onToolResult(callback: (result: any) => void | Promise<void>): this;
|
|
61
|
+
afterResponse(callback: (resp: any) => any | Promise<any>): this;
|
|
62
|
+
onBeforeRequest(callback: (messages: any[]) => any | Promise<any>): this;
|
|
63
|
+
onNewMessage(callback: () => void | Promise<void>): this;
|
|
64
|
+
onEndMessage(callback: (message: any) => void | Promise<void>): this;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=BaseChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseChat.d.ts","sourceRoot":"","sources":["../src/BaseChat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACpE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACrD,YAAY,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC7C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACrE,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACjE,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CAC9D;AAED;;GAEG;AACH,8BAAsB,QAAQ,CAC5B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,WAAW,GAAG,WAAW;IAiB1B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IAhBZ,EAAE,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,YAAY,EAAE,GAAG,CAAM;IACjC,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAM;IAClC,SAAS,CAAC,SAAS,EAAE,SAAS,CAS5B;gBAGO,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,CAAW;IAU7B,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ5B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAS5E,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAIlE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI;IAK7B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAKzB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIpB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO7C,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKpE,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/D,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAK/E,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAInE,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKhE,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKxE,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKxD,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAIrE"}
|
package/dist/BaseChat.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
/**
|
|
3
|
+
* BaseChat - A generic base class for ORM chat implementations.
|
|
4
|
+
*/
|
|
5
|
+
export class BaseChat {
|
|
6
|
+
record;
|
|
7
|
+
options;
|
|
8
|
+
id;
|
|
9
|
+
localOptions = {};
|
|
10
|
+
customTools = [];
|
|
11
|
+
userHooks = {
|
|
12
|
+
onToolCallStart: [],
|
|
13
|
+
onToolCallEnd: [],
|
|
14
|
+
afterResponse: [],
|
|
15
|
+
onNewMessage: [],
|
|
16
|
+
onEndMessage: [],
|
|
17
|
+
onToolCallError: [],
|
|
18
|
+
onConfirmToolCall: [],
|
|
19
|
+
onBeforeRequest: []
|
|
20
|
+
};
|
|
21
|
+
constructor(record, options = {}) {
|
|
22
|
+
this.record = record;
|
|
23
|
+
this.options = options;
|
|
24
|
+
this.id = record.id;
|
|
25
|
+
// Initialize local options from record/options
|
|
26
|
+
this.localOptions.instructions = options.instructions || record.instructions;
|
|
27
|
+
this.localOptions.model = options.model || record.model;
|
|
28
|
+
this.localOptions.provider = options.provider || record.provider;
|
|
29
|
+
}
|
|
30
|
+
log(...args) {
|
|
31
|
+
if (this.options?.debug) {
|
|
32
|
+
console.log(`[@node-llm/orm]`, ...args);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// --- Fluent Configuration Methods ---
|
|
36
|
+
withInstructions(instruction, options) {
|
|
37
|
+
if (options?.replace) {
|
|
38
|
+
this.localOptions.instructions = instruction;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.localOptions.instructions = (this.localOptions.instructions || "") + "\n" + instruction;
|
|
42
|
+
}
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
system(instruction, options) {
|
|
46
|
+
return this.withInstructions(instruction, options);
|
|
47
|
+
}
|
|
48
|
+
withTemperature(temp) {
|
|
49
|
+
this.localOptions.temperature = temp;
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
withModel(model) {
|
|
53
|
+
this.localOptions.model = model;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
withProvider(provider) {
|
|
57
|
+
this.localOptions.provider = provider;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
withTools(tools) {
|
|
61
|
+
this.customTools.push(...tools);
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
withTool(tool) {
|
|
65
|
+
this.customTools.push(tool);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
use(tool) {
|
|
69
|
+
return this.withTool(tool);
|
|
70
|
+
}
|
|
71
|
+
withSchema(schema) {
|
|
72
|
+
this.localOptions.schema = schema;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
withParams(params) {
|
|
76
|
+
this.localOptions.params = { ...(this.localOptions.params || {}), ...params };
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
// --- Hook Registration ---
|
|
80
|
+
onToolCallStart(callback) {
|
|
81
|
+
this.userHooks.onToolCallStart.push(callback);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
onToolCall(callback) {
|
|
85
|
+
return this.onToolCallStart(callback);
|
|
86
|
+
}
|
|
87
|
+
onToolCallEnd(callback) {
|
|
88
|
+
this.userHooks.onToolCallEnd.push(callback);
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
onToolResult(callback) {
|
|
92
|
+
return this.onToolCallEnd((_call, result) => callback(result));
|
|
93
|
+
}
|
|
94
|
+
afterResponse(callback) {
|
|
95
|
+
this.userHooks.afterResponse.push(callback);
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
onBeforeRequest(callback) {
|
|
99
|
+
this.userHooks.onBeforeRequest.push(callback);
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
onNewMessage(callback) {
|
|
103
|
+
this.userHooks.onNewMessage.push(callback);
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
onEndMessage(callback) {
|
|
107
|
+
this.userHooks.onEndMessage.push(callback);
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { PrismaClient } from "@prisma/client";
|
|
2
|
+
import type { NodeLLMCore } from "@node-llm/core";
|
|
3
|
+
import { BaseChat, type ChatRecord, type ChatOptions } from "../../BaseChat.js";
|
|
4
|
+
export { type ChatRecord, type ChatOptions };
|
|
5
|
+
export interface MessageRecord {
|
|
6
|
+
id: string;
|
|
7
|
+
chatId: string;
|
|
8
|
+
role: string;
|
|
9
|
+
content: string | null;
|
|
10
|
+
contentRaw: string | null;
|
|
11
|
+
reasoning: string | null;
|
|
12
|
+
inputTokens: number | null;
|
|
13
|
+
outputTokens: number | null;
|
|
14
|
+
modelId: string | null;
|
|
15
|
+
provider: string | null;
|
|
16
|
+
createdAt: Date;
|
|
17
|
+
}
|
|
18
|
+
export interface TableNames {
|
|
19
|
+
chat?: string;
|
|
20
|
+
message?: string;
|
|
21
|
+
toolCall?: string;
|
|
22
|
+
request?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Prisma-based Chat Implementation.
|
|
26
|
+
*/
|
|
27
|
+
export declare class Chat extends BaseChat {
|
|
28
|
+
private prisma;
|
|
29
|
+
private llm;
|
|
30
|
+
private tables;
|
|
31
|
+
private persistenceConfig;
|
|
32
|
+
constructor(prisma: PrismaClient, llm: NodeLLMCore, record: ChatRecord, options?: ChatOptions, tableNames?: TableNames);
|
|
33
|
+
/**
|
|
34
|
+
* Internal prep for core Chat instance with persistence hooks.
|
|
35
|
+
*/
|
|
36
|
+
private prepareCoreChat;
|
|
37
|
+
/**
|
|
38
|
+
* Send a message and persist the conversation.
|
|
39
|
+
*/
|
|
40
|
+
ask(input: string): Promise<MessageRecord>;
|
|
41
|
+
/**
|
|
42
|
+
* Stream a response and persist the conversation.
|
|
43
|
+
*/
|
|
44
|
+
askStream(input: string): AsyncGenerator<string, MessageRecord, undefined>;
|
|
45
|
+
/**
|
|
46
|
+
* Get all messages for this chat.
|
|
47
|
+
*/
|
|
48
|
+
messages(): Promise<MessageRecord[]>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convenience method to create a new chat session.
|
|
52
|
+
*/
|
|
53
|
+
export declare function createChat<T = Record<string, any>>(prisma: PrismaClient, llm: NodeLLMCore, options?: ChatOptions & {
|
|
54
|
+
tableNames?: TableNames;
|
|
55
|
+
} & T): Promise<Chat>;
|
|
56
|
+
/**
|
|
57
|
+
* Convenience method to load an existing chat session.
|
|
58
|
+
*/
|
|
59
|
+
export declare function loadChat(prisma: PrismaClient, llm: NodeLLMCore, chatId: string, options?: ChatOptions & {
|
|
60
|
+
tableNames?: TableNames;
|
|
61
|
+
}): Promise<Chat | null>;
|
|
62
|
+
//# sourceMappingURL=Chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/Chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,IAAK,SAAQ,QAAQ;IAK9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IALb,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,iBAAiB,CAAoD;gBAGnE,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,WAAgB,EACzB,UAAU,GAAE,UAAe;IAgB7B;;OAEG;YACW,eAAe;IAmH7B;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0ChD;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC;IAuDjF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAO3C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,CAAa,GACjE,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAQtB"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { BaseChat } from "../../BaseChat.js";
|
|
2
|
+
/**
|
|
3
|
+
* Prisma-based Chat Implementation.
|
|
4
|
+
*/
|
|
5
|
+
export class Chat extends BaseChat {
|
|
6
|
+
prisma;
|
|
7
|
+
llm;
|
|
8
|
+
tables;
|
|
9
|
+
persistenceConfig;
|
|
10
|
+
constructor(prisma, llm, record, options = {}, tableNames = {}) {
|
|
11
|
+
super(record, options);
|
|
12
|
+
this.prisma = prisma;
|
|
13
|
+
this.llm = llm;
|
|
14
|
+
this.tables = {
|
|
15
|
+
chat: tableNames.chat || "chat",
|
|
16
|
+
message: tableNames.message || "message",
|
|
17
|
+
toolCall: tableNames.toolCall || "toolCall",
|
|
18
|
+
request: tableNames.request || "assistantRequest"
|
|
19
|
+
};
|
|
20
|
+
this.persistenceConfig = {
|
|
21
|
+
toolCalls: options.persistence?.toolCalls ?? true,
|
|
22
|
+
requests: options.persistence?.requests ?? true
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Internal prep for core Chat instance with persistence hooks.
|
|
27
|
+
*/
|
|
28
|
+
async prepareCoreChat(history = [], assistantMessageId) {
|
|
29
|
+
const provider = this.localOptions.provider || this.record.provider;
|
|
30
|
+
const model = this.localOptions.model || this.record.model;
|
|
31
|
+
const llmInstance = provider ? this.llm.withProvider(provider) : this.llm;
|
|
32
|
+
const coreChat = llmInstance.chat(model || undefined, {
|
|
33
|
+
messages: history,
|
|
34
|
+
...this.localOptions
|
|
35
|
+
});
|
|
36
|
+
// Register tools
|
|
37
|
+
if (this.customTools.length > 0) {
|
|
38
|
+
coreChat.withTools(this.customTools);
|
|
39
|
+
}
|
|
40
|
+
// --- Persistence Hooks ---
|
|
41
|
+
coreChat.onToolCallStart(async (call) => {
|
|
42
|
+
// Only persist if toolCalls persistence is enabled
|
|
43
|
+
if (this.persistenceConfig.toolCalls) {
|
|
44
|
+
const toolCallModel = this.tables.toolCall;
|
|
45
|
+
await this.prisma[toolCallModel].create({
|
|
46
|
+
data: {
|
|
47
|
+
messageId: assistantMessageId,
|
|
48
|
+
toolCallId: call.id,
|
|
49
|
+
name: call.function?.name || "unknown",
|
|
50
|
+
arguments: JSON.stringify(call.function?.arguments || {}),
|
|
51
|
+
thought: call.thought || null
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// User hooks
|
|
56
|
+
for (const h of this.userHooks.onToolCallStart)
|
|
57
|
+
await h(call);
|
|
58
|
+
});
|
|
59
|
+
coreChat.onToolCallEnd(async (call, result) => {
|
|
60
|
+
// Only persist if toolCalls persistence is enabled
|
|
61
|
+
if (this.persistenceConfig.toolCalls) {
|
|
62
|
+
const toolCallModel = this.tables.toolCall;
|
|
63
|
+
const resString = typeof result === "string" ? result : JSON.stringify(result);
|
|
64
|
+
await this.prisma[toolCallModel].update({
|
|
65
|
+
where: { messageId_toolCallId: { messageId: assistantMessageId, toolCallId: call.id } },
|
|
66
|
+
data: {
|
|
67
|
+
result: resString,
|
|
68
|
+
thought: call.thought || null
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// User hooks
|
|
73
|
+
for (const h of this.userHooks.onToolCallEnd)
|
|
74
|
+
await h(call, result);
|
|
75
|
+
});
|
|
76
|
+
coreChat.afterResponse(async (finalResp) => {
|
|
77
|
+
this.log(`Internal afterResponse triggered. Calling ${this.userHooks.afterResponse.length} user hooks.`);
|
|
78
|
+
// User hooks
|
|
79
|
+
for (const h of this.userHooks.afterResponse) {
|
|
80
|
+
const modified = await h(finalResp);
|
|
81
|
+
if (modified)
|
|
82
|
+
finalResp = modified;
|
|
83
|
+
}
|
|
84
|
+
// Only persist if requests persistence is enabled
|
|
85
|
+
if (this.persistenceConfig.requests) {
|
|
86
|
+
const modelName = this.tables.request;
|
|
87
|
+
await this.prisma[modelName].create({
|
|
88
|
+
data: {
|
|
89
|
+
chatId: this.id,
|
|
90
|
+
messageId: assistantMessageId,
|
|
91
|
+
provider: finalResp.provider || provider || "unknown",
|
|
92
|
+
model: finalResp.model || model || "unknown",
|
|
93
|
+
statusCode: 200,
|
|
94
|
+
duration: finalResp.latency || 0,
|
|
95
|
+
inputTokens: finalResp.usage?.input_tokens || 0,
|
|
96
|
+
outputTokens: finalResp.usage?.output_tokens || 0,
|
|
97
|
+
cost: finalResp.usage?.cost || 0
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return finalResp;
|
|
102
|
+
});
|
|
103
|
+
// Other core hooks
|
|
104
|
+
if (this.userHooks.onNewMessage.length > 0) {
|
|
105
|
+
coreChat.onNewMessage(async () => {
|
|
106
|
+
for (const h of this.userHooks.onNewMessage)
|
|
107
|
+
await h();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (this.userHooks.onEndMessage.length > 0) {
|
|
111
|
+
coreChat.onEndMessage(async (msg) => {
|
|
112
|
+
for (const h of this.userHooks.onEndMessage)
|
|
113
|
+
await h(msg);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (this.userHooks.onBeforeRequest.length > 0) {
|
|
117
|
+
coreChat.beforeRequest(async (msgs) => {
|
|
118
|
+
let current = msgs;
|
|
119
|
+
for (const h of this.userHooks.onBeforeRequest) {
|
|
120
|
+
const mod = await h(current);
|
|
121
|
+
if (mod)
|
|
122
|
+
current = mod;
|
|
123
|
+
}
|
|
124
|
+
return current;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return coreChat;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Send a message and persist the conversation.
|
|
131
|
+
*/
|
|
132
|
+
async ask(input) {
|
|
133
|
+
const messageModel = this.tables.message;
|
|
134
|
+
const userMessage = await this.prisma[messageModel].create({
|
|
135
|
+
data: { chatId: this.id, role: "user", content: input }
|
|
136
|
+
});
|
|
137
|
+
const assistantMessage = await this.prisma[messageModel].create({
|
|
138
|
+
data: { chatId: this.id, role: "assistant", content: null }
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
const historyRecords = await this.prisma[messageModel].findMany({
|
|
142
|
+
where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
|
|
143
|
+
orderBy: { createdAt: "asc" }
|
|
144
|
+
});
|
|
145
|
+
const history = historyRecords.map((m) => ({
|
|
146
|
+
role: m.role,
|
|
147
|
+
content: m.content || ""
|
|
148
|
+
}));
|
|
149
|
+
const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
|
|
150
|
+
const response = await coreChat.ask(input);
|
|
151
|
+
return await this.prisma[messageModel].update({
|
|
152
|
+
where: { id: assistantMessage.id },
|
|
153
|
+
data: {
|
|
154
|
+
content: response.content,
|
|
155
|
+
contentRaw: JSON.stringify(response.meta),
|
|
156
|
+
inputTokens: response.usage?.input_tokens || 0,
|
|
157
|
+
outputTokens: response.usage?.output_tokens || 0,
|
|
158
|
+
modelId: response.model || null,
|
|
159
|
+
provider: response.provider || null
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
|
|
165
|
+
// await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Stream a response and persist the conversation.
|
|
171
|
+
*/
|
|
172
|
+
async *askStream(input) {
|
|
173
|
+
const messageModel = this.tables.message;
|
|
174
|
+
const userMessage = await this.prisma[messageModel].create({
|
|
175
|
+
data: { chatId: this.id, role: "user", content: input }
|
|
176
|
+
});
|
|
177
|
+
const assistantMessage = await this.prisma[messageModel].create({
|
|
178
|
+
data: { chatId: this.id, role: "assistant", content: null }
|
|
179
|
+
});
|
|
180
|
+
try {
|
|
181
|
+
const historyRecords = await this.prisma[messageModel].findMany({
|
|
182
|
+
where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
|
|
183
|
+
orderBy: { createdAt: "asc" }
|
|
184
|
+
});
|
|
185
|
+
const history = historyRecords.map((m) => ({
|
|
186
|
+
role: m.role,
|
|
187
|
+
content: m.content || ""
|
|
188
|
+
}));
|
|
189
|
+
const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
|
|
190
|
+
const stream = coreChat.stream(input);
|
|
191
|
+
let fullContent = "";
|
|
192
|
+
let metadata = {};
|
|
193
|
+
for await (const chunk of stream) {
|
|
194
|
+
if (chunk.content) {
|
|
195
|
+
fullContent += chunk.content;
|
|
196
|
+
yield chunk.content;
|
|
197
|
+
}
|
|
198
|
+
if (chunk.usage) {
|
|
199
|
+
metadata = { ...metadata, ...chunk.usage };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return await this.prisma[messageModel].update({
|
|
203
|
+
where: { id: assistantMessage.id },
|
|
204
|
+
data: {
|
|
205
|
+
content: fullContent,
|
|
206
|
+
contentRaw: JSON.stringify(metadata),
|
|
207
|
+
inputTokens: metadata.input_tokens || 0,
|
|
208
|
+
outputTokens: metadata.output_tokens || 0,
|
|
209
|
+
modelId: coreChat.model || null,
|
|
210
|
+
provider: coreChat.provider?.id || null
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
|
|
216
|
+
// await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all messages for this chat.
|
|
222
|
+
*/
|
|
223
|
+
async messages() {
|
|
224
|
+
const messageModel = this.tables.message;
|
|
225
|
+
return await this.prisma[messageModel].findMany({
|
|
226
|
+
where: { chatId: this.id },
|
|
227
|
+
orderBy: { createdAt: "asc" }
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Convenience method to create a new chat session.
|
|
233
|
+
*/
|
|
234
|
+
export async function createChat(prisma, llm, options = {}) {
|
|
235
|
+
const chatTable = options.tableNames?.chat || "chat";
|
|
236
|
+
// Extract known options so we don't double-pass them or pass them incorrectly
|
|
237
|
+
const { model, provider, instructions, metadata, tableNames, debug, persistence, ...extras } = options;
|
|
238
|
+
const record = await prisma[chatTable].create({
|
|
239
|
+
data: {
|
|
240
|
+
model,
|
|
241
|
+
provider,
|
|
242
|
+
instructions,
|
|
243
|
+
metadata: metadata ?? null,
|
|
244
|
+
...extras
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return new Chat(prisma, llm, record, options, options.tableNames);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Convenience method to load an existing chat session.
|
|
251
|
+
*/
|
|
252
|
+
export async function loadChat(prisma, llm, chatId, options = {}) {
|
|
253
|
+
const chatTable = options.tableNames?.chat || "chat";
|
|
254
|
+
const record = await prisma[chatTable].findUnique({
|
|
255
|
+
where: { id: chatId }
|
|
256
|
+
});
|
|
257
|
+
if (!record)
|
|
258
|
+
return null;
|
|
259
|
+
return new Chat(prisma, llm, record, options, options.tableNames);
|
|
260
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @node-llm/orm/prisma
|
|
3
|
+
*
|
|
4
|
+
* Prisma adapter for NodeLLM ORM.
|
|
5
|
+
* Provides automatic persistence of chats, messages, tool calls, and API requests.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { PrismaClient } from '@prisma/client';
|
|
10
|
+
* import { createLLM } from '@node-llm/core';
|
|
11
|
+
* import { createChat } from '@node-llm/orm/prisma';
|
|
12
|
+
*
|
|
13
|
+
* const prisma = new PrismaClient();
|
|
14
|
+
* const llm = createLLM({ provider: 'openai' });
|
|
15
|
+
*
|
|
16
|
+
* const chat = await createChat(prisma, llm, {
|
|
17
|
+
* model: 'gpt-4',
|
|
18
|
+
* instructions: 'You are a helpful assistant.'
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const response = await chat.ask('Hello!');
|
|
22
|
+
* console.log(response.content);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export { Chat, createChat, loadChat } from "./Chat.js";
|
|
26
|
+
export type { ChatRecord, MessageRecord, ChatOptions, TableNames } from "./Chat.js";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @node-llm/orm/prisma
|
|
3
|
+
*
|
|
4
|
+
* Prisma adapter for NodeLLM ORM.
|
|
5
|
+
* Provides automatic persistence of chats, messages, tool calls, and API requests.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { PrismaClient } from '@prisma/client';
|
|
10
|
+
* import { createLLM } from '@node-llm/core';
|
|
11
|
+
* import { createChat } from '@node-llm/orm/prisma';
|
|
12
|
+
*
|
|
13
|
+
* const prisma = new PrismaClient();
|
|
14
|
+
* const llm = createLLM({ provider: 'openai' });
|
|
15
|
+
*
|
|
16
|
+
* const chat = await createChat(prisma, llm, {
|
|
17
|
+
* model: 'gpt-4',
|
|
18
|
+
* instructions: 'You are a helpful assistant.'
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const response = await chat.ask('Hello!');
|
|
22
|
+
* console.log(response.content);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export { Chat, createChat, loadChat } from "./Chat.js";
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @node-llm/orm
|
|
3
|
+
*
|
|
4
|
+
* Database persistence layer for NodeLLM.
|
|
5
|
+
* Automatically tracks chats, messages, tool calls, and API requests.
|
|
6
|
+
*
|
|
7
|
+
* ## Quick Start
|
|
8
|
+
*
|
|
9
|
+
* 1. Copy `schema.prisma` from this package into your project
|
|
10
|
+
* 2. Run `npx prisma migrate dev`
|
|
11
|
+
* 3. Use the ORM:
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createChat } from '@node-llm/orm/prisma';
|
|
15
|
+
* import { prisma } from './db.js';
|
|
16
|
+
* import { llm } from './llm.js';
|
|
17
|
+
*
|
|
18
|
+
* const chat = await createChat(prisma, llm, {
|
|
19
|
+
* model: 'gpt-4',
|
|
20
|
+
* instructions: 'You are a helpful assistant.'
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* await chat.ask('Hello!');
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Adapters
|
|
27
|
+
*
|
|
28
|
+
* - `@node-llm/orm/prisma` - Prisma adapter (recommended)
|
|
29
|
+
*
|
|
30
|
+
* ## Schema
|
|
31
|
+
*
|
|
32
|
+
* The ORM tracks four core entities:
|
|
33
|
+
* - **Chat** - Session container (model, provider, instructions)
|
|
34
|
+
* - **Message** - User/Assistant conversation history
|
|
35
|
+
* - **ToolCall** - Tool executions (name, arguments, results)
|
|
36
|
+
* - **Request** - API call metrics (tokens, latency, cost)
|
|
37
|
+
*/
|
|
38
|
+
export * from "./adapters/prisma/index.js";
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,cAAc,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @node-llm/orm
|
|
3
|
+
*
|
|
4
|
+
* Database persistence layer for NodeLLM.
|
|
5
|
+
* Automatically tracks chats, messages, tool calls, and API requests.
|
|
6
|
+
*
|
|
7
|
+
* ## Quick Start
|
|
8
|
+
*
|
|
9
|
+
* 1. Copy `schema.prisma` from this package into your project
|
|
10
|
+
* 2. Run `npx prisma migrate dev`
|
|
11
|
+
* 3. Use the ORM:
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createChat } from '@node-llm/orm/prisma';
|
|
15
|
+
* import { prisma } from './db.js';
|
|
16
|
+
* import { llm } from './llm.js';
|
|
17
|
+
*
|
|
18
|
+
* const chat = await createChat(prisma, llm, {
|
|
19
|
+
* model: 'gpt-4',
|
|
20
|
+
* instructions: 'You are a helpful assistant.'
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* await chat.ask('Hello!');
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Adapters
|
|
27
|
+
*
|
|
28
|
+
* - `@node-llm/orm/prisma` - Prisma adapter (recommended)
|
|
29
|
+
*
|
|
30
|
+
* ## Schema
|
|
31
|
+
*
|
|
32
|
+
* The ORM tracks four core entities:
|
|
33
|
+
* - **Chat** - Session container (model, provider, instructions)
|
|
34
|
+
* - **Message** - User/Assistant conversation history
|
|
35
|
+
* - **ToolCall** - Tool executions (name, arguments, results)
|
|
36
|
+
* - **Request** - API call metrics (tokens, latency, cost)
|
|
37
|
+
*/
|
|
38
|
+
// Re-export Prisma adapter as default
|
|
39
|
+
export * from "./adapters/prisma/index.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-llm/orm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Database persistence layer for NodeLLM - Chat, Message, and ToolCall tracking with streaming support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,11 +18,6 @@
|
|
|
18
18
|
"types": "./dist/adapters/prisma/index.d.ts"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "tsc",
|
|
23
|
-
"test": "vitest run",
|
|
24
|
-
"test:watch": "vitest"
|
|
25
|
-
},
|
|
26
21
|
"keywords": [
|
|
27
22
|
"llm",
|
|
28
23
|
"orm",
|
|
@@ -68,5 +63,10 @@
|
|
|
68
63
|
"typescript": "^5.0.0",
|
|
69
64
|
"vitest": "^1.0.0"
|
|
70
65
|
},
|
|
71
|
-
"dependencies": {}
|
|
72
|
-
|
|
66
|
+
"dependencies": {},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"build": "tsc",
|
|
69
|
+
"test": "vitest run",
|
|
70
|
+
"test:watch": "vitest"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.full.d.ts","./src/BaseChat.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/@prisma/client/runtime/library.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/.prisma/client/default.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/@prisma/client/default.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Role.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Tool.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Content.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/Provider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatResponse.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Message.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/schema/Schema.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/constants.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatOptions.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/streaming/Stream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatStream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/image/GeneratedImage.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/types.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/ModelRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/PricingRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/transcription/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/moderation/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/embedding/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/config.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/llm.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/anthropic/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/BaseProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/GeminiProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/DeepSeekProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Capabilities.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Streaming.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Image.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/OpenAIProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/OllamaProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/OpenRouterProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/registry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/model_aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/index.d.ts","./src/adapters/prisma/Chat.ts","./src/adapters/prisma/index.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/index.d.ts"],"fileIdsList":[[65,137,183],[66,137,183],[137,183],[137,180,183],[137,182,183],[183],[137,183,188,216],[137,183,184,189,194,202,213,224],[137,183,184,185,194,202],[132,133,134,137,183],[137,183,186,225],[137,183,187,188,195,203],[137,183,188,213,221],[137,183,189,191,194,202],[137,182,183,190],[137,183,191,192],[137,183,193,194],[137,182,183,194],[137,183,194,195,196,213,224],[137,183,194,195,196,209,213,216],[137,183,191,194,197,202,213,224],[137,183,194,195,197,198,202,213,221,224],[137,183,197,199,213,221,224],[135,136,137,138,139,140,141,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[137,183,194,200],[137,183,201,224,229],[137,183,191,194,202,213],[137,183,203],[137,183,204],[137,182,183,205],[137,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[137,183,207],[137,183,208],[137,183,194,209,210],[137,183,209,211,225,227],[137,183,194,213,214,216],[137,183,215,216],[137,183,213,214],[137,183,216],[137,183,217],[137,180,183,213,218],[137,183,194,219,220],[137,183,219,220],[137,183,188,202,213,221],[137,183,222],[137,183,202,223],[137,183,197,208,224],[137,183,188,225],[137,183,213,226],[137,183,201,227],[137,183,228],[137,178,183],[137,178,183,194,196,205,213,216,224,227,229],[137,183,213,230],[82,83,84,85,86,87,88,89,90,91,137,183],[83,85,86,87,88,89,137,183],[83,85,137,183],[84,85,87,90,91,92,137,183],[68,83,84,85,86,137,183],[82,137,183],[89,137,183],[85,137,183],[85,137,183,213],[82,83,84,86,87,88,89,90,91,92,93,101,102,105,125,126,127,137,183],[85,90,92,94,96,97,98,99,100,101,137,183],[95,137,183],[85,87,137,183],[83,87,137,183],[85,105,137,183],[108,109,110,111,137,183],[106,137,183],[120,137,183],[121,137,183],[85,120,137,183],[85,95,137,183],[85,105,113,114,115,116,117,118,119,137,183],[123,137,183],[85,101,103,104,107,112,122,124,137,183],[137,150,154,183,224],[137,150,183,213,224],[137,145,183],[137,147,150,183,221,224],[137,183,202,221],[137,183,231],[137,145,183,231],[137,147,150,183,202,224],[137,142,143,146,149,183,194,213,224],[137,150,157,183],[137,142,148,183],[137,150,171,172,183],[137,146,150,183,216,224,231],[137,171,183,231],[137,144,145,183,231],[137,150,183],[137,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,172,173,174,175,176,177,183],[137,150,165,183],[137,150,157,158,183],[137,148,150,158,159,183],[137,149,183],[137,142,145,150,183],[137,150,154,158,159,183],[137,154,183],[137,148,150,153,183,224],[137,142,147,150,157,183],[137,183,213],[137,145,150,171,183,229,231],[81,137,183],[69,70,71,137,183],[72,73,137,183],[69,70,72,74,75,80,137,183],[70,72,137,183],[80,137,183],[72,137,183],[69,70,72,75,76,77,78,79,137,183],[64,67,128,137,183],[129,137,183],[130,137,183]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"98960981691b4cc6066cf92f932b06affe78ededa9873d5ecb60389bd075b740","signature":"ff3ea4421cb6ccb7121d5e39367cea179ef8a6760657d4da4da71725f5d389dd","impliedFormat":99},{"version":"21247c958d397091ec30e63b27294baa1d1434c333da4fda697743190311dc62","impliedFormat":1},{"version":"71df692065d79c5b044002f8a68eba33e934859859094bab2f334f64a467f428","impliedFormat":1},{"version":"51ebca098538b252953b1ef83c165f25b52271bfb6049cd09d197dddd4cd43c5","impliedFormat":1},{"version":"df41e12c868eac7a8eae373906cb60e9c6128f91b8f0c49e3311488d5c20bdde","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"85054db69473c5f3011329758e39480d5a1e177ef09c035fc54614aa98fd74f4","impliedFormat":99},{"version":"f78d61c966023b8e1808ee8644b983541c5c08b10d501171fdaa3b59ced89c32","impliedFormat":99},{"version":"9328f8ce11ce74072988669e69eb40326f1486c244a806034e8c7dfbdd88eaac","impliedFormat":99},{"version":"3b44e9e63ddfec2be4917454293ed956bd6cbafcc92f071340cb4446c965c281","impliedFormat":99},{"version":"f7963c9a812222c2436c2cf084125877e58a0909c6f82af8529b9c8aa785d110","impliedFormat":99},{"version":"58cac8e1268a9047d6c1f8bae7fd330b4896df5b7da6b4ecb576ac9763588853","impliedFormat":99},{"version":"45924327d47f4d6f4bc923d8c2df1e73d16f3c511ff8662eaf1d01b7c46e2506","impliedFormat":99},{"version":"8d2ee15310498f68cb0c585d5cb0e14a4393e70f1780508a853541c757f6932d","impliedFormat":99},{"version":"571f2a23b4d8db490894c3f06039ba8a4a05cfd46ce74f8d8e8b9ac92e505150","impliedFormat":99},{"version":"bca2816969296a8fdf7735ff7b6500f88573ca4c5ef790cc989967b2479169fd","impliedFormat":99},{"version":"5b26dc2f18cf265e1b044c269263ae45da16f2f19a350fb14af98d61b8468aec","impliedFormat":99},{"version":"a58ac9509800c7eb6f69e770ff8fca99f6caf8532faac75cffdd62b8564a99c7","impliedFormat":99},{"version":"9c653bd35750be294edb51b8a16b0fc25b7234ac9ac5f89f5138942d7222152e","impliedFormat":99},{"version":"b5c3f80141815dd5910090c4ce28cd98db342605f4a7cfb48814fb20565bcce8","impliedFormat":99},{"version":"9fdf07bf69bbba5041b81761bc5333176bd90fba388014869151ec47769ecb44","impliedFormat":99},{"version":"e05a7b9152a1a20cffbcfec9ffd16619f33e50d97c3c82354d4a18c5e5550e56","impliedFormat":99},{"version":"4169b5a94f1812cafeb891b190d8f59c8734b79c12050eea812d85dca83bff92","impliedFormat":99},{"version":"074f511000dd9c28a83a1fd65a929fea666524b062e1400b50d305b379d096a3","impliedFormat":99},{"version":"39c0fd3809411a5bd0ed4a2b9cf776526db2ec7f7b37cc5caadfe34e1927c5a4","impliedFormat":99},{"version":"bebe305c5c17e5f4a541e83f6394e0531500b4a2a552a384d07577d0dabf2f51","impliedFormat":99},{"version":"69192e09da8a319a76f4084a19ac77ef4db23465e3dc42d28c99d8af5a14a42b","impliedFormat":99},{"version":"d4c2dd8ce9a021c8f7dbb00e9508c7085ac5c3e8b60bc7c92bf4b787845c3ea8","impliedFormat":99},{"version":"8bad90fd5b485d6ea772717835dc60692ab7572819383a47ef8e97e674f8df48","impliedFormat":99},{"version":"16b9d3c3fe7c4f508e2431a439cdb2c32f2783ae7adad023451b5b1518622173","impliedFormat":99},{"version":"e7c8fee70a3e9f8df00d74de3d258ea8b961c9bace2c485075b9e04025ea4382","impliedFormat":99},{"version":"9016e349de895461db3bb28a342e46e36b539c40877ef9c805fa62db0692b8f2","impliedFormat":99},{"version":"bcc1345f4449ec15100221ebfb8dbd59538f5ccafddf2469d1519c071cd4dae8","impliedFormat":99},{"version":"7b962f5ac4599c2c8300c84fec82cfa4e611b6bfef81b73068d11219761eb7ef","impliedFormat":99},{"version":"b734844adc45e90266d347e0039d21dadc30cdc858e8529566691a1a0d20848a","impliedFormat":99},{"version":"aab3fca58b163bc67f2209c0b3b445f05cb98f6aee142e5b0399917f3b3108cc","impliedFormat":99},{"version":"1c856e1c497470497a253102fbff5bf9bc64312cd241e2ddd623112e2865d2bf","impliedFormat":99},{"version":"1fc29969ce8facb1c332b6b2779f31a402b4107b97a75505d01fa7fcc152f4da","impliedFormat":99},{"version":"2539181da1a9d49b9632cd8355be866ffe0a0a118a3c0e698d9ee96d1363a72b","impliedFormat":99},{"version":"a78ca3ad50d3c0d8fbd9df9cd5ebdd93251eb5b1910860f7522687d79e08dd63","impliedFormat":99},{"version":"56030521b956d964325edb08949b6d4dbd97ed7d36af0526964ad0c7ffa20379","impliedFormat":99},{"version":"8e8abb1fd13e3656120960984d8c57ff78cfd2811f0fc338b81770d5b76204d5","impliedFormat":99},{"version":"6ff021084f4b397df86d9f83a344eb5b41adf015fa6a1d8911642e49c10bf40b","impliedFormat":99},{"version":"4e97ea793c63e62836381a529896c89d6e153cf8671cd80216aa786cd67b39c1","impliedFormat":99},{"version":"d471a3803f7e8136dea84fbfbb17d24e61ceeb6812226940889848d733c35e02","impliedFormat":99},{"version":"d82997f65bf4f33cedbf3c742646649a13728a6fd5b13b582b09b06eb1c7de5a","impliedFormat":99},{"version":"1de667d4ff0329ccb886144c2bb7bba64ed7780df99ea5ec49a7bd2d020344a6","impliedFormat":99},{"version":"127e20c67d325cab272200948a849d1fb83c066cadc3852f778bbc39915fa79a","impliedFormat":99},{"version":"883acf44b6127ddf60b92c39e52688fcc8a415c484d3939b71f046c703127aae","impliedFormat":99},{"version":"f6a80a9c380ee91f1434fb4a46b29ef9c4fce4abe4b9187415110e6a2cdaec92","impliedFormat":99},{"version":"88e2d31be26c636f6d9a878040865a2dd2b046ef6f4cdb6c1a9c1809f7c639b4","impliedFormat":99},{"version":"f7f77fec273802b239c5b9aff3b6123764692ca9e9f16f1ccd3ae1e42cfe7005","impliedFormat":99},{"version":"05234561759dabe2d43786bbd175f98b14fb43a0c22abc50cf07f2c81cd3ae2e","signature":"014961606ef96d04899a1f6716b527678e20cf69c08bd16c3086a9b0c28d792f","impliedFormat":99},{"version":"0c71dcff28ef103af2b6cd1354e85c0fc7c2842b011748ad7dfce0d660187215","signature":"9afa8d4286367147b5f00fd220257afa3d6daa625d5371136a143ec9911e4919","impliedFormat":99},{"version":"80a3876c6ffa07a29aca0ac468a92db73847cc561bb283c60d3917d2dfad20f9","signature":"27ea85f1fbb701f6e6e3520c3388615c6d9e2b1f598cda7251d8f5516ed47e04","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e456fd5b101271183d99a9087875a282323e3a3ff0d7bcf1881537eaa8b8e63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"ddc734b4fae82a01d247e9e342d020976640b5e93b4e9b3a1e30e5518883a060","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[64,[129,131]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"noImplicitAny":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[66,1],[67,2],[65,3],[180,4],[181,4],[182,5],[137,6],[183,7],[184,8],[185,9],[132,3],[135,10],[133,3],[134,3],[186,11],[187,12],[188,13],[189,14],[190,15],[191,16],[192,16],[193,17],[194,18],[195,19],[196,20],[138,3],[136,3],[197,21],[198,22],[199,23],[231,24],[200,25],[201,26],[202,27],[203,28],[204,29],[205,30],[206,31],[207,32],[208,33],[209,34],[210,34],[211,35],[212,3],[213,36],[215,37],[214,38],[216,39],[217,40],[218,41],[219,42],[220,43],[221,44],[222,45],[223,46],[224,47],[225,48],[226,49],[227,50],[228,51],[139,3],[140,3],[141,3],[179,52],[229,53],[230,54],[127,3],[92,55],[90,56],[86,57],[93,58],[84,3],[87,59],[68,3],[83,60],[101,61],[89,3],[100,62],[94,63],[128,64],[102,65],[126,3],[96,66],[97,66],[95,3],[99,62],[105,67],[85,68],[104,3],[111,66],[109,62],[108,69],[110,62],[112,70],[106,69],[107,71],[121,72],[122,73],[113,74],[119,62],[116,62],[115,75],[118,62],[120,76],[114,74],[117,62],[103,3],[123,72],[124,77],[125,78],[88,60],[91,3],[98,62],[61,3],[62,3],[12,3],[10,3],[11,3],[16,3],[15,3],[2,3],[17,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[24,3],[3,3],[25,3],[26,3],[4,3],[27,3],[31,3],[28,3],[29,3],[30,3],[32,3],[33,3],[34,3],[5,3],[35,3],[36,3],[37,3],[38,3],[6,3],[42,3],[39,3],[40,3],[41,3],[43,3],[7,3],[44,3],[49,3],[50,3],[45,3],[46,3],[47,3],[48,3],[8,3],[54,3],[51,3],[52,3],[53,3],[55,3],[9,3],[56,3],[63,3],[57,3],[58,3],[60,3],[59,3],[1,3],[14,3],[13,3],[157,79],[167,80],[156,79],[177,81],[148,82],[147,83],[176,84],[170,85],[175,86],[150,87],[164,88],[149,89],[173,90],[145,91],[144,84],[174,92],[146,93],[151,94],[152,3],[155,94],[142,3],[178,95],[168,96],[159,97],[160,98],[162,99],[158,100],[161,101],[171,84],[153,102],[154,103],[163,104],[143,105],[166,96],[165,94],[169,3],[172,106],[82,107],[72,108],[74,109],[81,110],[76,3],[77,3],[75,111],[78,112],[69,3],[70,3],[71,107],[73,113],[79,3],[80,114],[64,3],[129,115],[130,116],[131,117]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}
|