**chore: remove outdated documentation and refactor Rollup configuration**

### Changes:
- Removed two documentation files:
  - `docs/build-time-augmentations.md`
  - `docs/llm-augmentation.md`
- Deleted `rollup.unified.js` and `rollup_config.js` configurations to streamline build setup.
- Introduced custom plugins for Node.js module shims and "this" reference fixes directly into the remaining Rollup setup.
- Updated Rollup configuration entry and build logic for increased maintainability:
  - Enabled `inlineDynamicImports` for unified builds.
  - Enhanced browser compatibility with global Buffer polyfill and environment detection (`isBrowser`, `isNode`, `isServerless`).
- Adjusted error logging for module fetch failures in browser environments.

### Purpose:
Cleaned outdated and redundant documentation to align with the system's current capabilities. Consolidated and optimized Rollup build setup, ensuring a modern and maintainable configuration while improving cross-environment compatibility and error handling.
This commit is contained in:
David Snelling 2025-06-19 16:02:47 -07:00
parent c385f3fcff
commit ace8e0ec15
4 changed files with 0 additions and 912 deletions

View file

@ -1,217 +0,0 @@
<div align="center">
<img src="../brainy.png" alt="Brainy Logo" width="200"/>
# Build-Time Augmentation Registration
</div>
This document explains how to register custom augmentations at build time using the Brainy library's augmentation
registry system.
## Overview
Brainy provides a system for registering custom augmentations at build time, similar to Angular's pipeline. This allows
you to:
1. Define custom augmentations in your project
2. Register them with the Brainy library during the build process
3. Have them automatically available when your application runs
This approach has several advantages:
- Better performance as augmentations are available immediately at startup
- Improved tree-shaking and bundle optimization
- Type safety and better IDE support
- No need for dynamic imports or async loading
## Creating Custom Augmentations
To create a custom augmentation, you need to implement one of the augmentation interfaces provided by Brainy:
```typescript
// myTextSenseAugmentation.ts
import {
registerAugmentation,
AugmentationType,
BrainyAugmentations
} from 'brainy';
// Define a custom sense augmentation
class MyTextSenseAugmentation implements BrainyAugmentations.ISenseAugmentation {
name = 'MyTextSenseAugmentation';
enabled = true;
type = AugmentationType.SENSE;
// Required IAugmentation methods
async initialize() {
console.log('Initializing MyTextSenseAugmentation');
return true;
}
async shutDown() {
console.log('Shutting down MyTextSenseAugmentation');
return true;
}
getStatus() {
return {
name: this.name,
enabled: this.enabled,
type: this.type,
status: 'ready'
};
}
// ISenseAugmentation methods
async processRawData(rawData, dataType) {
console.log(`Processing ${dataType} data`);
// Your implementation here
return {
success: true,
data: { /* processed data */}
};
}
async listenToFeed(feedUrl, callback) {
console.log(`Listening to feed at ${feedUrl}`);
// Your implementation here
return {
success: true,
data: { /* feed info */}
};
}
}
// Register the augmentation with the registry
// This will make it available to the Brainy library at runtime
export const myTextSenseAugmentation = registerAugmentation(new MyTextSenseAugmentation());
```
## Registering Augmentations
There are two ways to register augmentations:
### 1. Manual Registration
You can manually register augmentations by calling `registerAugmentation()` in your code:
```typescript
import {registerAugmentation} from 'brainy';
import {MyCustomAugmentation} from './myCustomAugmentation';
// Register the augmentation
const myAugmentation = registerAugmentation(new MyCustomAugmentation());
// You can also export it for use elsewhere in your application
export {myAugmentation};
```
### 2. Automatic Registration with Build Tools
For larger projects, you can use build tools like webpack or rollup to automatically discover and register
augmentations:
#### With Webpack
```javascript
// webpack.config.js
const {createAugmentationRegistryPlugin} = require('brainy');
module.exports = {
// ... other webpack config
plugins: [
createAugmentationRegistryPlugin({
// Pattern to match files containing augmentations
pattern: /augmentation\.(js|ts)$/,
options: {
autoInitialize: true,
debug: true
}
})
]
};
```
#### With Rollup
```javascript
// rollup.config.js
import {createAugmentationRegistryRollupPlugin} from 'brainy';
export default {
// ... other rollup config
plugins: [
createAugmentationRegistryRollupPlugin({
pattern: /augmentation\.(js|ts)$/,
options: {
autoInitialize: true,
debug: true
}
})
]
};
```
## Using Registered Augmentations
Once augmentations are registered, they are automatically available to the Brainy library. You can use them through the
augmentation pipeline:
```typescript
import {BrainyData, augmentationPipeline, initializeAugmentationPipeline} from 'brainy';
// Create a new BrainyData instance
const db = new BrainyData();
await db.init();
// Initialize the augmentation pipeline with all registered augmentations
initializeAugmentationPipeline();
// Use the pipeline to execute augmentations
const senseResults = await augmentationPipeline.executeSensePipeline(
'processRawData',
['This is some example text to process', 'text']
);
// Process the results
for (const resultPromise of senseResults) {
const result = await resultPromise;
if (result.success) {
console.log('Processed data:', result.data);
}
}
```
## Best Practices
1. **Naming Convention**: Use a consistent naming convention for your augmentation files, such as ending them with
`augmentation.ts` or `augmentation.js`.
2. **File Organization**: Keep your augmentations organized in a dedicated directory, such as `src/augmentations/`.
3. **Type Safety**: Implement the appropriate interfaces for your augmentations to ensure type safety.
4. **Documentation**: Document your augmentations with JSDoc comments to provide clear usage instructions.
5. **Testing**: Write tests for your augmentations to ensure they work correctly.
## Troubleshooting
If your augmentations are not being registered or are not working as expected, check the following:
1. Make sure your augmentation implements all required methods from the interface.
2. Verify that your augmentation is being registered with `registerAugmentation()`.
3. If using build tools, check that your file naming matches the pattern specified in the plugin configuration.
4. Enable debug logging in the plugin options to see detailed information about the registration process.
5. Check the console for any error messages during initialization.
## Examples
For complete examples, see:
- [Basic Augmentation Registration](../examples/buildTimeRegistration.js)
- [Webpack Configuration](../examples/webpack.config.js)
- [Rollup Configuration](../examples/rollup.config.js)

View file

@ -1,443 +0,0 @@
<div align="center">
<img src="../brainy.png" alt="Brainy Logo" width="200"/>
# LLM Augmentation for Brainy
</div>
This document describes the LLM (Language Learning Model) augmentation for Brainy, which enables creating, training, testing, exporting, and deploying language models from the data in Brainy's graph database.
## Overview
The LLM augmentation extends Brainy with the ability to create and train language models using the nouns and verbs stored in the graph database. It leverages TensorFlow.js to provide cross-platform compatibility, working in both browser and Node.js environments.
The augmentation consists of two main components:
1. **LLMCognitionAugmentation**: A cognition augmentation that provides the core functionality for creating, training, testing, exporting, and deploying LLM models.
2. **LLMActivationAugmentation**: An activation augmentation that provides action triggers for the LLM functionality, making it accessible through the augmentation pipeline.
## Features
- **Create LLM Models**: Create simple sequence models or transformer models with customizable parameters.
- **Train Models**: Train models on the nouns and verbs in Brainy's database with configurable training options.
- **Test Models**: Evaluate model performance and generate sample predictions.
- **Export Models**: Export trained models in various formats (TFJS, JSON) for use in different environments.
- **Deploy Models**: Deploy models to browser, Node.js, or cloud environments.
- **Generate Text**: Use trained models to generate text based on input prompts.
## Installation
The LLM augmentation is included as an optional component in the Brainy package. No additional installation is required if you have already installed Brainy.
```bash
npm install @soulcraft/brainy --legacy-peer-deps
```
## Usage
### Simplified Usage (Recommended for New Users)
```javascript
import { BrainyData, augmentationPipeline } from '@soulcraft/brainy'
import { createLLMAugmentations } from '@soulcraft/brainy/src/augmentations/llmAugmentations.js'
// Initialize Brainy
const db = new BrainyData()
await db.init()
// Create LLM augmentations
const { cognition, activation } = await createLLMAugmentations({
cognitionName: 'my-llm-cognition',
activationName: 'my-llm-activation',
brainyDb: db
})
// Register augmentations with the pipeline
augmentationPipeline.register(cognition)
augmentationPipeline.register(activation)
// Create a model using a preset (tiny, small, medium, large)
const createResult = await cognition.createModelFromPreset('small', 'my-model')
const modelId = createResult.data.modelId
// Train the model with simplified options (quick, standard, thorough)
await cognition.trainModelSimple(modelId, 'standard')
// Generate text with simplified creativity options (conservative, balanced, creative)
const generateResult = await cognition.generateTextSimple(modelId, 'What is a', 'balanced')
console.log(`Generated text: ${generateResult.data.text}`)
```
### Advanced Usage
```javascript
import { BrainyData, augmentationPipeline } from '@soulcraft/brainy'
import { createLLMAugmentations } from '@soulcraft/brainy/src/augmentations/llmAugmentations.js'
// Initialize Brainy
const db = new BrainyData()
await db.init()
// Create LLM augmentations
const { cognition, activation } = await createLLMAugmentations({
cognitionName: 'my-llm-cognition',
activationName: 'my-llm-activation',
brainyDb: db
})
// Register augmentations with the pipeline
augmentationPipeline.register(cognition)
augmentationPipeline.register(activation)
// Create a model with advanced configuration
const createResult = await cognition.createModel({
name: 'my-model',
modelType: 'simple',
vocabSize: 5000,
embeddingDim: 64,
hiddenDim: 128,
numLayers: 1
})
const modelId = createResult.data.modelId
// Train the model with advanced options
await cognition.trainModel(modelId, {
maxSamples: 100,
validationSplit: 0.2
})
// Generate text with advanced options
const generateResult = await cognition.generateText(modelId, 'What is a', {
temperature: 0.7
})
console.log(`Generated text: ${generateResult.data.text}`)
```
### Using the Augmentation Pipeline
```javascript
// Create a model through the pipeline
const pipelineCreateResult = await augmentationPipeline.executeCognitionPipeline(
'createModel',
[{
name: 'pipeline-model',
modelType: 'transformer',
numHeads: 2,
numLayers: 1
}]
)
if (pipelineCreateResult[0] && (await pipelineCreateResult[0]).success) {
const pipelineModelId = (await pipelineCreateResult[0]).data.modelId
// Train the model through the pipeline
await augmentationPipeline.executeCognitionPipeline(
'trainModel',
[pipelineModelId, { maxSamples: 50 }]
)
}
```
## CLI Usage
The LLM functionality is also available through the Brainy CLI. The CLI provides both simplified and advanced commands for working with LLM models.
### Simplified CLI Commands (Recommended for New Users)
```bash
# Create a model using a preset (tiny, small, medium, large)
brainy llm create-simple [preset] --name my-model
# Train a model with simplified options (quick, standard, thorough)
brainy llm train-simple <modelId> [level]
# Generate text with simplified creativity options (conservative, balanced, creative)
brainy llm generate-simple <modelId> "Your prompt here" [creativity]
```
### Advanced CLI Commands
```bash
# Create a model with advanced configuration
brainy llm create --name my-model --type simple --vocab-size 5000
# Train a model with advanced options
brainy llm train <modelId> --max-samples 100 --epochs 10
# Test a model
brainy llm test <modelId> --generate-samples
# Export a model
brainy llm export <modelId> --format json --include-metadata
# Deploy a model
brainy llm deploy <modelId> --target browser
# Generate text with advanced options
brainy llm generate <modelId> "Your prompt here" --temperature 0.7
```
## API Reference
### LLMCognitionAugmentation
#### Simplified Methods (Recommended for New Users)
##### Creating Models with Presets
```javascript
createModelFromPreset(presetName: string = 'small', customName?: string): Promise<AugmentationResponse<{ modelId: string, metadata: LLMModelMetadata }>>
```
Creates a new LLM model using a predefined preset.
**Parameters:**
- `presetName`: Name of the preset to use ('tiny', 'small', 'medium', 'large')
- `customName`: Optional custom name for the model
**Returns:**
- `modelId`: Unique identifier for the created model
- `metadata`: Metadata about the model
**Preset Details:**
- `tiny`: Simple model with minimal parameters, fast but less accurate
- `small`: Simple model with balanced parameters, good for most use cases
- `medium`: Transformer model with moderate parameters, better accuracy
- `large`: Transformer model with more parameters, best accuracy but slower
##### Training Models with Simplified Options
```javascript
trainModelSimple(modelId: string, trainingLevel: 'quick' | 'standard' | 'thorough' = 'standard'): Promise<AugmentationResponse<{ modelId: string, metadata: LLMModelMetadata, trainingHistory: tf.History, metrics?: { loss: number, accuracy: number, epochs: number } }>>
```
Trains an LLM model with simplified options.
**Parameters:**
- `modelId`: ID of the model to train
- `trainingLevel`: Training level ('quick', 'standard', 'thorough')
**Returns:**
- `modelId`: ID of the trained model
- `metadata`: Updated metadata about the model
- `trainingHistory`: Training history with metrics
- `metrics`: Training metrics (loss, accuracy, epochs)
**Training Level Details:**
- `quick`: Faster training with fewer samples (100 samples, 5 epochs)
- `standard`: Balanced training (500 samples, 10 epochs)
- `thorough`: More thorough training for better results (1000 samples, 20 epochs)
##### Generating Text with Simplified Creativity Options
```javascript
generateTextSimple(modelId: string, prompt: string, creativity: 'conservative' | 'balanced' | 'creative' = 'balanced'): Promise<AugmentationResponse<{ text: string, tokens?: number, timeMs?: number }>>
```
Generates text using the LLM model with simplified creativity options.
**Parameters:**
- `modelId`: ID of the model to use
- `prompt`: Input prompt for text generation
- `creativity`: Creativity level ('conservative', 'balanced', 'creative')
**Returns:**
- `text`: Generated text
- `tokens`: Number of tokens generated (if available)
- `timeMs`: Generation time in milliseconds (if available)
**Creativity Level Details:**
- `conservative`: More predictable, focused output (temperature: 0.3, topK: 3)
- `balanced`: Mix of predictability and creativity (temperature: 0.7, topK: 5)
- `creative`: More varied, unexpected output (temperature: 1.0, topK: 10)
#### Advanced Methods
##### Creating Models
```javascript
createModel(config: Partial<LLMModelConfig>): Promise<AugmentationResponse<{ modelId: string, metadata: LLMModelMetadata }>>
```
Creates a new LLM model with the specified configuration.
**Parameters:**
- `config`: Configuration options for the model
- `name`: Name of the model (optional, auto-generated if not provided)
- `description`: Description of the model (optional)
- `modelType`: Type of model to create ('simple', 'transformer', or 'custom')
- `vocabSize`: Size of the vocabulary (default: 10000)
- `embeddingDim`: Dimension of the embedding vectors (default: 128)
- `hiddenDim`: Dimension of the hidden layers (default: 256)
- `numLayers`: Number of layers in the model (default: 2)
- `numHeads`: Number of attention heads for transformer models (default: 4)
- `dropoutRate`: Dropout rate for regularization (default: 0.1)
- `maxSequenceLength`: Maximum sequence length for input (default: 100)
- `learningRate`: Learning rate for training (default: 0.001)
- `batchSize`: Batch size for training (default: 32)
- `epochs`: Number of training epochs (default: 10)
- `customModelPath`: Path to a custom model (required for 'custom' modelType)
**Returns:**
- `modelId`: Unique identifier for the created model
- `metadata`: Metadata about the model
#### Training Models
```javascript
trainModel(modelId: string, options: LLMTrainingOptions): Promise<AugmentationResponse<{ modelId: string, metadata: LLMModelMetadata, trainingHistory: tf.History }>>
```
Trains an LLM model on Brainy data.
**Parameters:**
- `modelId`: ID of the model to train
- `options`: Training options
- `nounTypes`: Types of nouns to include in training (default: all)
- `verbTypes`: Types of verbs to include in training (default: all)
- `maxSamples`: Maximum number of training samples (default: all)
- `validationSplit`: Fraction of data to use for validation (default: 0.2)
- `includeMetadata`: Whether to include metadata in training (default: false)
- `includeEmbeddings`: Whether to include embeddings in training (default: false)
- `augmentData`: Whether to augment training data (default: false)
- `earlyStoppingPatience`: Number of epochs with no improvement before stopping (default: 3)
**Returns:**
- `modelId`: ID of the trained model
- `metadata`: Updated metadata about the model
- `trainingHistory`: Training history with metrics
#### Testing Models
```javascript
testModel(modelId: string, options: LLMTestingOptions): Promise<AugmentationResponse<{ modelId: string, metrics: Record<string, number>, samples?: Array<{ input: string, expected: string, generated: string }> }>>
```
Tests an LLM model on Brainy data.
**Parameters:**
- `modelId`: ID of the model to test
- `options`: Testing options
- `testSize`: Number of test samples (default: 100)
- `randomSeed`: Random seed for reproducibility (optional)
- `metrics`: Metrics to calculate (default: ['accuracy', 'loss'])
- `generateSamples`: Whether to generate sample predictions (default: false)
- `sampleCount`: Number of samples to generate (default: 5)
**Returns:**
- `modelId`: ID of the tested model
- `metrics`: Test metrics (accuracy, loss, etc.)
- `samples`: Sample predictions (if generateSamples is true)
#### Exporting Models
```javascript
exportModel(modelId: string, options: LLMExportOptions): Promise<AugmentationResponse<{ modelId: string, format: string, exportPath?: string, modelJSON?: string }>>
```
Exports an LLM model for deployment.
**Parameters:**
- `modelId`: ID of the model to export
- `options`: Export options
- `format`: Export format ('tfjs', 'onnx', 'savedmodel', 'json')
- `quantize`: Whether to quantize the model (default: false)
- `outputPath`: Path to save the exported model (optional)
- `includeMetadata`: Whether to include metadata (default: false)
- `includeVocab`: Whether to include vocabulary (default: false)
**Returns:**
- `modelId`: ID of the exported model
- `format`: Export format
- `exportPath`: Path where the model was saved (if outputPath was provided)
- `modelJSON`: JSON representation of the model (if outputPath was not provided)
#### Deploying Models
```javascript
deployModel(modelId: string, options: LLMDeploymentOptions): Promise<AugmentationResponse<{ modelId: string, deploymentTarget: string, deploymentUrl?: string, status: string }>>
```
Deploys an LLM model to the specified target.
**Parameters:**
- `modelId`: ID of the model to deploy
- `options`: Deployment options
- `target`: Deployment target ('browser', 'node', 'cloud')
- `cloudProvider`: Cloud provider for cloud deployment ('aws', 'gcp', 'azure')
- `endpoint`: Endpoint URL for cloud deployment
- `apiKey`: API key for cloud deployment
- `region`: Region for cloud deployment
- `containerize`: Whether to containerize the model (default: false)
- `autoScale`: Whether to enable auto-scaling (default: false)
- `memory`: Memory allocation for deployment
- `cpu`: CPU allocation for deployment
**Returns:**
- `modelId`: ID of the deployed model
- `deploymentTarget`: Target where the model was deployed
- `deploymentUrl`: URL where the model is accessible (for cloud deployments)
- `status`: Deployment status
#### Generating Text
```javascript
generateText(modelId: string, prompt: string, options: { maxLength?: number, temperature?: number, topK?: number }): Promise<AugmentationResponse<string>>
```
Generates text using the LLM model.
**Parameters:**
- `modelId`: ID of the model to use
- `prompt`: Input prompt for text generation
- `options`: Generation options
- `maxLength`: Maximum length of generated text (default: model-dependent)
- `temperature`: Temperature for sampling (default: 1.0)
- `topK`: Number of top tokens to consider (default: all)
**Returns:**
- Generated text
### LLMActivationAugmentation
The activation augmentation provides action triggers for the LLM functionality, making it accessible through the augmentation pipeline. It supports the following actions:
- `createModel`: Creates a new LLM model
- `trainModel`: Trains an LLM model
- `testModel`: Tests an LLM model
- `exportModel`: Exports an LLM model
- `deployModel`: Deploys an LLM model
- `generateText`: Generates text using an LLM model
## Model Types
### Simple Sequence Model
A simple sequence model with an embedding layer, LSTM layers, and a dense output layer. This model is suitable for simpler language modeling tasks and requires less computational resources.
### Transformer Model
A transformer model with multi-head attention, suitable for more complex language modeling tasks. This model can capture longer-range dependencies in text but requires more computational resources.
## Limitations
- The current implementation is focused on training small language models suitable for specific domains rather than large general-purpose models.
- Training large models in the browser may be limited by available memory and computational resources.
- Cloud deployment functionality is a placeholder and requires additional implementation for specific cloud providers.
- ONNX export is not implemented in the current version.
## Examples
See the [llmAugmentationExample.js](../examples/llmAugmentationExample.js) file for a complete example of using the LLM augmentation.
## Future Enhancements
- Support for larger model architectures
- Improved training efficiency for browser environments
- Full implementation of cloud deployment options
- Support for ONNX export
- Fine-tuning of pre-trained models
- More advanced text generation capabilities

View file

@ -1,154 +0,0 @@
import typescript from '@rollup/plugin-typescript';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import { terser } from 'rollup-plugin-terser';
import replace from '@rollup/plugin-replace';
// Custom plugin to provide empty shims for Node.js built-in modules in browser environments
const nodeModuleShims = () => {
return {
name: 'node-module-shims',
resolveId(source) {
// List of Node.js built-in modules to shim
const nodeBuiltins = [
'fs', 'path', 'util', 'crypto', 'os', 'stream',
'http', 'http2', 'https', 'zlib', 'child_process'
];
if (nodeBuiltins.includes(source)) {
// Return a virtual module ID for the shim
return `\0${source}-shim`;
}
return null;
},
load(id) {
// If this is one of our shims, return an empty module
if (id.startsWith('\0') && id.endsWith('-shim')) {
console.log(`Providing empty shim for Node.js module: ${id.slice(1, -5)}`);
return 'export default {}; export const promises = {};';
}
return null;
}
};
};
// Custom plugin to fix 'this' references in specific files
const fixThisReferences = () => {
return {
name: 'fix-this-references',
transform(code, id) {
// Only transform the specific files that have issues with 'this'
if (id.includes('@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js')) {
// Replace 'this' with 'globalThis' in the problematic code
return {
code: code.replace(/\bthis\b/g, 'globalThis'),
map: { mappings: '' } // Provide an empty sourcemap to avoid warnings
};
}
return null; // Return null to let Rollup handle other files normally
}
};
};
export default {
input: 'src/unified.ts', // Use the unified entry point
inlineDynamicImports: true,
output: [
{
file: 'dist/unified.js',
format: 'es',
sourcemap: true,
intro: `
// Environment detection
const isBrowser = typeof window !== 'undefined';
const isNode = typeof process !== 'undefined' && process.versions && process.versions.node;
const isServerless = !isBrowser && !isNode;
// Global Buffer polyfill for browser environments
if (isBrowser) {
try {
// Import Buffer from the buffer package
import('buffer').then(({ Buffer }) => {
globalThis.Buffer = Buffer;
}).catch(err => {
console.warn('Failed to load Buffer polyfill:', err);
});
} catch (e) {
console.warn('Failed to import buffer package:', e);
}
}
// Global variable to store environment
globalThis.__ENV__ = {
isBrowser,
isNode,
isServerless
};
`
},
{
file: 'dist/unified.min.js',
format: 'es',
sourcemap: true,
plugins: [terser()],
intro: `
// Environment detection
const isBrowser = typeof window !== 'undefined';
const isNode = typeof process !== 'undefined' && process.versions && process.versions.node;
const isServerless = !isBrowser && !isNode;
// Global Buffer polyfill for browser environments
if (isBrowser) {
try {
// Import Buffer from the buffer package
import('buffer').then(({ Buffer }) => {
globalThis.Buffer = Buffer;
}).catch(err => {
console.warn('Failed to load Buffer polyfill:', err);
});
} catch (e) {
console.warn('Failed to import buffer package:', e);
}
}
// Global variable to store environment
globalThis.__ENV__ = {
isBrowser,
isNode,
isServerless
};
`
}
],
plugins: [
// Add environment replacement
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify('production')
}),
// Add our custom plugins
fixThisReferences(),
nodeModuleShims(),
resolve({
browser: true,
preferBuiltins: false
}),
commonjs({
transformMixedEsModules: true
}),
json(),
typescript({
tsconfig: './tsconfig.unified.json',
declaration: true,
declarationMap: true
})
],
external: [
// Add any dependencies you want to exclude from the bundle
'@aws-sdk/client-s3',
'@smithy/util-stream',
'@smithy/node-http-handler',
'@aws-crypto/crc32c'
]
};

View file

@ -1,98 +0,0 @@
import typescript from '@rollup/plugin-typescript'
import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import json from '@rollup/plugin-json'
import { terser } from 'rollup-plugin-terser'
// Custom plugin to fix 'this' references in specific files
const fixThisReferences = () => {
return {
name: 'fix-this-references',
transform(code, id) {
// Only transform the specific files that have issues with 'this'
if (id.includes('@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js')) {
// Replace 'this' with 'globalThis' in the problematic code
return {
code: code.replace(/\bthis\b/g, 'globalThis'),
map: { mappings: '' } // Provide an empty sourcemap to avoid warnings
};
}
return null; // Return null to let Rollup handle other files normally
}
};
};
// Custom plugin to provide empty shims for Node.js built-in modules
const nodeModuleShims = () => {
return {
name: 'node-module-shims',
resolveId(source) {
// List of Node.js built-in modules to shim
const nodeBuiltins = [
'fs', 'path', 'util', 'crypto', 'os', 'stream',
'http', 'http2', 'https', 'zlib', 'child_process'
];
if (nodeBuiltins.includes(source)) {
// Return a virtual module ID for the shim
return `\0${source}-shim`;
}
return null;
},
load(id) {
// If this is one of our shims, return an empty module
if (id.startsWith('\0') && id.endsWith('-shim')) {
console.log(`Providing empty shim for Node.js module: ${id.slice(1, -5)}`);
return 'export default {}; export const promises = {};';
}
return null;
}
};
};
export default {
input: 'examples/browser_compatible_exports.ts', // Browser-compatible entry point
inlineDynamicImports: true,
output: [
{
file: 'dist/brainy.js',
format: 'es',
sourcemap: true,
intro: 'var global = typeof window !== "undefined" ? window : this;',
},
{
file: 'dist/brainy.min.js',
format: 'es',
sourcemap: true,
intro: 'var global = typeof window !== "undefined" ? window : this;',
plugins: [terser()]
}
],
plugins: [
// Add our custom plugins first to ensure they run before other transformations
fixThisReferences(),
nodeModuleShims(),
resolve({
browser: true,
preferBuiltins: false
}),
commonjs({
transformMixedEsModules: true
}),
json(),
typescript({
tsconfig: './tsconfig.browser.json',
declaration: false,
declarationMap: false
})
],
external: [
// Add any dependencies you want to exclude from the bundle
// AWS SDK modules with circular dependencies
'@aws-sdk/client-s3',
'@smithy/util-stream',
'@smithy/node-http-handler',
'@aws-crypto/crc32c'
// Node.js built-ins are now handled by the nodeModuleShims plugin
]
}