{"code":"import * as tslib_1 from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs';\r\nimport * as socketProxy from 'socket.io-client';\r\nimport { DEFAULT_CLIENT_HYPERPARAMS, deserializeVar, Events, serializeVars } from './common';\r\nimport { FederatedClientTfModel, isFederatedClientModel } from './models';\r\nvar socketio = socketProxy.default || socketProxy;\r\nvar CONNECTION_TIMEOUT = 10 * 1000;\r\nvar UPLOAD_TIMEOUT = 5 * 1000;\r\nvar COOKIE_NAME = 'federated-learner-uuid';\r\nvar YEAR_IN_MS = 365 * 24 * 60 * 60 * 1000;\r\nvar Client = (function () {\r\n    function Client(server, model, config) {\r\n        var _this = this;\r\n        this.server = server;\r\n        if (isFederatedClientModel(model)) {\r\n            this.model = model;\r\n        }\r\n        else {\r\n            var compileConfig = (config || {}).modelCompileConfig || {};\r\n            this.model = new FederatedClientTfModel(model, compileConfig);\r\n        }\r\n        this.uploadCallbacks = [];\r\n        this.versionCallbacks = [function (v1, v2) {\r\n                _this.log(\"Updated model: \" + v1 + \" -> \" + v2);\r\n            }];\r\n        this.versionUpdateCounts = {};\r\n        this.verbose = (config || {}).verbose;\r\n        this.sendMetrics = (config || {}).sendMetrics;\r\n        if ((config || {}).clientId) {\r\n            this.clientId = config.clientId;\r\n        }\r\n        else if (getCookie(COOKIE_NAME)) {\r\n            this.clientId = getCookie(COOKIE_NAME);\r\n        }\r\n        else {\r\n            this.clientId = uuid();\r\n            setCookie(COOKIE_NAME, this.clientId);\r\n        }\r\n        this.hyperparams = (config || {}).hyperparams || {};\r\n    }\r\n    Client.prototype.modelVersion = function () {\r\n        return this.msg == null ? 'unsynced' : this.msg.model.version;\r\n    };\r\n    Client.prototype.onNewVersion = function (callback) {\r\n        this.versionCallbacks.push(callback);\r\n    };\r\n    Client.prototype.onUpload = function (callback) {\r\n        this.uploadCallbacks.push(callback);\r\n    };\r\n    Client.prototype.setup = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var newVersion;\r\n            var _this = this;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4, this.time('Initial model setup', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n                            return tslib_1.__generator(this, function (_a) {\r\n                                switch (_a.label) {\r\n                                    case 0: return [4, this.model.setup()];\r\n                                    case 1:\r\n                                        _a.sent();\r\n                                        return [2];\r\n                                }\r\n                            });\r\n                        }); })];\r\n                    case 1:\r\n                        _a.sent();\r\n                        this.x = tf.tensor([], [0].concat(this.model.inputShape));\r\n                        this.y = tf.tensor([], [0].concat(this.model.outputShape));\r\n                        return [4, this.time('Download weights from server', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n                                var _a;\r\n                                return tslib_1.__generator(this, function (_b) {\r\n                                    switch (_b.label) {\r\n                                        case 0:\r\n                                            _a = this;\r\n                                            return [4, this.connectTo(this.server)];\r\n                                        case 1:\r\n                                            _a.msg = _b.sent();\r\n                                            return [2];\r\n                                    }\r\n                                });\r\n                            }); })];\r\n                    case 2:\r\n                        _a.sent();\r\n                        this.setVars(this.msg.model.vars);\r\n                        newVersion = this.modelVersion();\r\n                        this.versionUpdateCounts[newVersion] = 0;\r\n                        this.versionCallbacks.forEach(function (cb) { return cb(null, newVersion); });\r\n                        this.socket.on(Events.Download, function (msg) {\r\n                            var oldVersion = _this.modelVersion();\r\n                            var newVersion = msg.model.version;\r\n                            _this.msg = msg;\r\n                            _this.setVars(msg.model.vars);\r\n                            _this.versionUpdateCounts[newVersion] = 0;\r\n                            _this.versionCallbacks.forEach(function (cb) { return cb(oldVersion, newVersion); });\r\n                        });\r\n                        return [2];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    Client.prototype.dispose = function () {\r\n        this.socket.disconnect();\r\n        this.log('Disconnected');\r\n    };\r\n    Client.prototype.federatedUpdate = function (x, y) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var xNew, yNew, examplesPerUpdate, _loop_1, this_1;\r\n            var _this = this;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        xNew = addRows(this.x, x, this.model.inputShape);\r\n                        yNew = addRows(this.y, y, this.model.outputShape);\r\n                        tf.dispose([this.x, this.y]);\r\n                        this.x = xNew;\r\n                        this.y = yNew;\r\n                        examplesPerUpdate = this.hyperparam('examplesPerUpdate');\r\n                        _loop_1 = function () {\r\n                            var modelVersion, xTrain, yTrain, fitConfig, metrics, stdDev, newVars, newTensors, uploadMsg, xRest, yRest;\r\n                            return tslib_1.__generator(this, function (_a) {\r\n                                switch (_a.label) {\r\n                                    case 0:\r\n                                        modelVersion = this_1.modelVersion();\r\n                                        xTrain = sliceWithEmptyTensors(this_1.x, 0, examplesPerUpdate);\r\n                                        yTrain = sliceWithEmptyTensors(this_1.y, 0, examplesPerUpdate);\r\n                                        fitConfig = {\r\n                                            epochs: this_1.hyperparam('epochs'),\r\n                                            batchSize: this_1.hyperparam('batchSize'),\r\n                                            learningRate: this_1.hyperparam('learningRate')\r\n                                        };\r\n                                        metrics = null;\r\n                                        if (this_1.sendMetrics) {\r\n                                            metrics = this_1.model.evaluate(xTrain, yTrain);\r\n                                        }\r\n                                        return [4, this_1.time('Fit model', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n                                                var err_1;\r\n                                                return tslib_1.__generator(this, function (_a) {\r\n                                                    switch (_a.label) {\r\n                                                        case 0:\r\n                                                            _a.trys.push([0, 2, , 3]);\r\n                                                            return [4, this.model.fit(xTrain, yTrain, fitConfig)];\r\n                                                        case 1:\r\n                                                            _a.sent();\r\n                                                            return [3, 3];\r\n                                                        case 2:\r\n                                                            err_1 = _a.sent();\r\n                                                            console.error(err_1);\r\n                                                            throw err_1;\r\n                                                        case 3: return [2];\r\n                                                    }\r\n                                                });\r\n                                            }); })];\r\n                                    case 1:\r\n                                        _a.sent();\r\n                                        stdDev = this_1.hyperparam('weightNoiseStddev');\r\n                                        newVars = void 0;\r\n                                        if (!stdDev) return [3, 3];\r\n                                        newTensors = tf.tidy(function () {\r\n                                            return _this.model.getVars().map(function (v) {\r\n                                                return v.add(tf.randomNormal(v.shape, 0, stdDev));\r\n                                            });\r\n                                        });\r\n                                        return [4, serializeVars(newTensors)];\r\n                                    case 2:\r\n                                        newVars = _a.sent();\r\n                                        tf.dispose(newTensors);\r\n                                        return [3, 5];\r\n                                    case 3: return [4, serializeVars(this_1.model.getVars())];\r\n                                    case 4:\r\n                                        newVars = _a.sent();\r\n                                        _a.label = 5;\r\n                                    case 5:\r\n                                        this_1.setVars(this_1.msg.model.vars);\r\n                                        uploadMsg = {\r\n                                            model: { version: modelVersion, vars: newVars },\r\n                                            clientId: this_1.clientId,\r\n                                        };\r\n                                        if (this_1.sendMetrics) {\r\n                                            uploadMsg.metrics = metrics;\r\n                                        }\r\n                                        return [4, this_1.time('Upload weights to server', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n                                                return tslib_1.__generator(this, function (_a) {\r\n                                                    switch (_a.label) {\r\n                                                        case 0: return [4, this.uploadVars(uploadMsg)];\r\n                                                        case 1:\r\n                                                            _a.sent();\r\n                                                            return [2];\r\n                                                    }\r\n                                                });\r\n                                            }); })];\r\n                                    case 6:\r\n                                        _a.sent();\r\n                                        this_1.uploadCallbacks.forEach(function (cb) { return cb(uploadMsg); });\r\n                                        this_1.versionUpdateCounts[modelVersion] += 1;\r\n                                        tf.dispose([xTrain, yTrain]);\r\n                                        xRest = sliceWithEmptyTensors(this_1.x, examplesPerUpdate);\r\n                                        yRest = sliceWithEmptyTensors(this_1.y, examplesPerUpdate);\r\n                                        tf.dispose([this_1.x, this_1.y]);\r\n                                        this_1.x = xRest;\r\n                                        this_1.y = yRest;\r\n                                        return [2];\r\n                                }\r\n                            });\r\n                        };\r\n                        this_1 = this;\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        if (!(this.x.shape[0] >= examplesPerUpdate)) return [3, 3];\r\n                        return [5, _loop_1()];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [3, 1];\r\n                    case 3: return [2];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    Client.prototype.evaluate = function (x, y) {\r\n        return this.model.evaluate(x, y);\r\n    };\r\n    Client.prototype.predict = function (x) {\r\n        return this.model.predict(x);\r\n    };\r\n    Object.defineProperty(Client.prototype, \"inputShape\", {\r\n        get: function () {\r\n            return this.model.inputShape;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Client.prototype, \"outputShape\", {\r\n        get: function () {\r\n            return this.model.outputShape;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Client.prototype.numUpdates = function () {\r\n        var _this = this;\r\n        var numTotal = 0;\r\n        Object.keys(this.versionUpdateCounts).forEach(function (k) {\r\n            numTotal += _this.versionUpdateCounts[k];\r\n        });\r\n        return numTotal;\r\n    };\r\n    Client.prototype.numVersions = function () {\r\n        return Object.keys(this.versionUpdateCounts).length;\r\n    };\r\n    Client.prototype.numExamples = function () {\r\n        return this.x.shape[0];\r\n    };\r\n    Client.prototype.hyperparam = function (key) {\r\n        return (this.hyperparams[key] || this.msg.hyperparams[key] ||\r\n            DEFAULT_CLIENT_HYPERPARAMS[key]);\r\n    };\r\n    Client.prototype.numExamplesPerUpdate = function () {\r\n        return this.hyperparam('examplesPerUpdate');\r\n    };\r\n    Client.prototype.numExamplesRemaining = function () {\r\n        return this.numExamplesPerUpdate() - this.numExamples();\r\n    };\r\n    Client.prototype.uploadVars = function (msg) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var prom;\r\n            var _this = this;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                prom = new Promise(function (resolve, reject) {\r\n                    var rejectTimer = setTimeout(function () { return reject(\"uploadVars timed out\"); }, UPLOAD_TIMEOUT);\r\n                    _this.socket.emit(Events.Upload, msg, function () {\r\n                        clearTimeout(rejectTimer);\r\n                        resolve();\r\n                    });\r\n                });\r\n                return [2, prom];\r\n            });\r\n        });\r\n    };\r\n    Client.prototype.setVars = function (newVars) {\r\n        var _this = this;\r\n        tf.tidy(function () {\r\n            _this.model.setVars(newVars.map(function (v) { return deserializeVar(v); }));\r\n        });\r\n    };\r\n    Client.prototype.connectTo = function (server) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                if (typeof server === 'string') {\r\n                    this.socket = socketio(server);\r\n                }\r\n                else {\r\n                    this.socket = server();\r\n                }\r\n                return [2, fromEvent(this.socket, Events.Download, CONNECTION_TIMEOUT)];\r\n            });\r\n        });\r\n    };\r\n    Client.prototype.log = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        if (this.verbose) {\r\n            console.log.apply(console, ['Federated Client:'].concat(args));\r\n        }\r\n    };\r\n    Client.prototype.time = function (msg, action) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var t1, t2;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        t1 = new Date().getTime();\r\n                        return [4, action()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        t2 = new Date().getTime();\r\n                        this.log(msg + \" took \" + (t2 - t1) + \"ms\");\r\n                        return [2];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return Client;\r\n}());\r\nexport { Client };\r\nfunction fromEvent(emitter, eventName, timeout) {\r\n    return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n        return tslib_1.__generator(this, function (_a) {\r\n            return [2, new Promise(function (resolve, reject) {\r\n                    var rejectTimer = setTimeout(function () { return reject(eventName + \" event timed out\"); }, timeout);\r\n                    var listener = function (evtArgs) {\r\n                        emitter.removeListener(eventName, listener);\r\n                        clearTimeout(rejectTimer);\r\n                        resolve(evtArgs);\r\n                    };\r\n                    emitter.on(eventName, listener);\r\n                })];\r\n        });\r\n    });\r\n}\r\nfunction concatWithEmptyTensors(a, b) {\r\n    if (a.shape[0] === 0) {\r\n        return b.clone();\r\n    }\r\n    else if (b.shape[0] === 0) {\r\n        return a.clone();\r\n    }\r\n    else {\r\n        return a.concat(b);\r\n    }\r\n}\r\nfunction sliceWithEmptyTensors(a, begin, size) {\r\n    if (begin >= a.shape[0]) {\r\n        return tf.tensor([], [0].concat(a.shape.slice(1)));\r\n    }\r\n    else {\r\n        return a.slice(begin, size);\r\n    }\r\n}\r\nfunction addRows(existing, newEls, unitShape) {\r\n    if (tf.util.arraysEqual(newEls.shape, unitShape)) {\r\n        return tf.tidy(function () { return concatWithEmptyTensors(existing, tf.expandDims(newEls)); });\r\n    }\r\n    else {\r\n        tf.util.assertShapesMatch(newEls.shape.slice(1), unitShape);\r\n        return tf.tidy(function () { return concatWithEmptyTensors(existing, newEls); });\r\n    }\r\n}\r\nfunction getCookie(name) {\r\n    if (typeof document === 'undefined') {\r\n        return null;\r\n    }\r\n    var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');\r\n    return v ? v[2] : null;\r\n}\r\nfunction setCookie(name, value) {\r\n    if (typeof document === 'undefined') {\r\n        return;\r\n    }\r\n    var d = new Date();\r\n    d.setTime(d.getTime() + YEAR_IN_MS);\r\n    document.cookie = name + '=' + value + ';path=/;expires=' + d.toUTCString();\r\n}\r\nfunction uuid() {\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n        var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n        return v.toString(16);\r\n    });\r\n}\r\n//# sourceMappingURL=client.js.map","map":"{\"version\":3,\"file\":\"client.js\",\"sourceRoot\":\"\",\"sources\":[\"client.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/usr/local/google/home/asross/federated-learning/src/client/client.d.ts","text":"/// <reference types=\"socket.io-client\" />\r\nimport * as tf from '@tensorflow/tfjs';\r\nimport { AsyncTfModel, ClientHyperparams, FederatedCompileConfig, SerializedVariable, UploadCallback, VersionCallback } from './common';\r\nimport { FederatedClientModel } from './models';\r\ndeclare type SocketCallback = () => SocketIOClient.Socket;\r\nexport declare type FederatedClientConfig = {\r\n    modelCompileConfig?: FederatedCompileConfig;\r\n    hyperparams?: ClientHyperparams;\r\n    verbose?: boolean;\r\n    clientId?: string;\r\n    sendMetrics?: boolean;\r\n};\r\nexport declare class Client {\r\n    private msg;\r\n    private model;\r\n    private socket;\r\n    private versionCallbacks;\r\n    private uploadCallbacks;\r\n    private x;\r\n    private y;\r\n    private versionUpdateCounts;\r\n    private server;\r\n    private verbose;\r\n    private sendMetrics;\r\n    hyperparams: ClientHyperparams;\r\n    clientId: string;\r\n    constructor(server: string | SocketCallback, model: FederatedClientModel | AsyncTfModel, config?: FederatedClientConfig);\r\n    modelVersion(): string;\r\n    onNewVersion(callback: VersionCallback): void;\r\n    onUpload(callback: UploadCallback): void;\r\n    setup(): Promise<void>;\r\n    dispose(): void;\r\n    federatedUpdate(x: tf.Tensor, y: tf.Tensor): Promise<void>;\r\n    evaluate(x: tf.Tensor, y: tf.Tensor): number[];\r\n    predict(x: tf.Tensor): tf.Tensor;\r\n    readonly inputShape: number[];\r\n    readonly outputShape: number[];\r\n    numUpdates(): number;\r\n    numVersions(): number;\r\n    numExamples(): number;\r\n    private hyperparam;\r\n    numExamplesPerUpdate(): number;\r\n    numExamplesRemaining(): number;\r\n    private uploadVars;\r\n    protected setVars(newVars: SerializedVariable[]): void;\r\n    private connectTo;\r\n    private log;\r\n    private time;\r\n}\r\nexport {};\r\n"}}
