export {
initializeTrustformers,
enableWebGPU,
initWasm,
getWasmInstance,
createTensor,
deleteTensor,
getTensorData,
cleanupTensors,
addTensors,
matrixMultiply,
wasmState,
tensorStore,
memoryUsage,
isWasmReady,
tensorCount,
webGpuAvailable,
performanceMetrics,
tensorVisualization,
createTensorSubscription,
createReactiveTensorOp,
measureOperation,
createErrorHandler,
updateMemoryUsage
} from '../svelte_bindings.js';
export { default as TrustformersProvider } from './TrustformersProvider.svelte';
export { default as TensorVisualization } from './TensorVisualization.svelte';
export { default as TensorOperations } from './TensorOperations.svelte';
import { writable, derived, readable } from 'svelte/store';
export { writable, derived, readable };
export function svelteKitPlugin() {
return {
name: 'trustformers-wasm',
configureServer(server) {
server.middlewares.use('/trustformers-wasm', (req, res, next) => {
if (req.url.endsWith('.wasm')) {
res.setHeader('Content-Type', 'application/wasm');
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
}
next();
});
}
};
}
export const svelteUtils = {
createReactiveTensor(dependencies, computation) {
return derived(dependencies, (values) => {
try {
return computation(values);
} catch (error) {
console.error('Reactive tensor computation error:', error);
return null;
}
});
},
createManagedTensorStore(initialValue = null) {
const { subscribe, set, update } = writable(initialValue);
let currentTensorId = null;
return {
subscribe,
set: (value) => {
if (currentTensorId) {
deleteTensor(currentTensorId);
}
currentTensorId = value;
set(value);
},
update: (updater) => {
update((current) => {
if (current) {
deleteTensor(current);
}
const newValue = updater(current);
currentTensorId = newValue;
return newValue;
});
},
destroy: () => {
if (currentTensorId) {
deleteTensor(currentTensorId);
currentTensorId = null;
}
set(null);
}
};
},
async withTensorBatch(operations) {
const createdTensors = [];
try {
const results = await operations((shape, data) => {
const id = createTensor(shape, data);
createdTensors.push(id);
return id;
});
return results;
} finally {
createdTensors.forEach(id => {
try {
deleteTensor(id);
} catch (error) {
console.warn('Failed to cleanup tensor:', id, error);
}
});
}
},
withPerformanceTracking(name, fn) {
return measureOperation(name, fn);
}
};
export const types = {
Shape: null,
TensorData: null,
WasmState: null,
TensorInfo: null
};
export const defaultConfig = {
autoInitialize: true,
enableWebGPU: false,
maxTensors: 100,
memoryThreshold: 100 * 1024 * 1024, performanceLogging: false,
errorReporting: true
};
export const config = writable(defaultConfig);
export const globalErrorHandler = createErrorHandler('TrustformersGlobal');
export async function initializeWithConfig(userConfig = {}) {
const finalConfig = { ...defaultConfig, ...userConfig };
config.set(finalConfig);
try {
if (finalConfig.autoInitialize) {
await initializeTrustformers();
if (finalConfig.enableWebGPU) {
try {
await enableWebGPU();
} catch (error) {
if (finalConfig.errorReporting) {
console.warn('WebGPU initialization failed:', error);
}
}
}
}
return true;
} catch (error) {
globalErrorHandler.handle(error, 'initialization');
throw error;
}
}
export const version = '1.0.0';
export const buildInfo = {
version,
buildDate: new Date().toISOString(),
features: [
'wasm',
'webgpu',
'svelte',
'typescript',
'reactive-stores'
]
};
export const dev = {
enableStoreLogging() {
if (typeof window !== 'undefined' && window.location.hostname === 'localhost') {
wasmState.subscribe(state => console.log('WASM State:', state));
tensorStore.subscribe(tensors => console.log('Tensors:', tensors.size));
memoryUsage.subscribe(usage => console.log('Memory:', usage));
}
},
enablePerformanceLogging() {
performanceMetrics.subscribe(metrics => {
console.log('Performance Metrics:', metrics);
});
},
logTensorInfo(tensorId) {
try {
const data = getTensorData(tensorId);
console.log(`Tensor ${tensorId}:`, {
shape: data.shape,
size: data.data.length,
memory: data.data.byteLength,
preview: Array.from(data.data.slice(0, 10))
});
} catch (error) {
console.error(`Failed to log tensor ${tensorId}:`, error);
}
}
};
export const lifecycle = {
onMount: async (options = {}) => {
await initializeWithConfig(options);
},
onDestroy: () => {
cleanupTensors();
},
onNavigate: () => {
cleanupTensors();
}
};
export default {
initializeTrustformers,
enableWebGPU,
createTensor,
deleteTensor,
addTensors,
matrixMultiply,
cleanupTensors,
wasmState,
tensorStore,
memoryUsage,
isWasmReady,
tensorCount,
webGpuAvailable,
performanceMetrics,
TrustformersProvider: () => import('./TrustformersProvider.svelte'),
TensorVisualization: () => import('./TensorVisualization.svelte'),
TensorOperations: () => import('./TensorOperations.svelte'),
svelteUtils,
config,
globalErrorHandler,
initializeWithConfig,
svelteKitPlugin,
version,
buildInfo,
dev,
lifecycle
};