diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,203 @@
+Copyright 2016 The TensorFlow Authors.  All rights reserved.
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2016, The TensorFlow Authors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,17 @@
+-- Copyright 2016 TensorFlow authors.
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+import Data.ProtoLens.Setup
+
+main = defaultMainGeneratingProtos "third_party/tensorflow"
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/AllocationDescription.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/AllocationDescription.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/AllocationDescription.hs
@@ -0,0 +1,220 @@
+{- This file was auto-generated from tensorflow/core/framework/allocation_description.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.AllocationDescription where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data AllocationDescription = AllocationDescription{_AllocationDescription'requestedBytes
+                                                   :: !Data.Int.Int64,
+                                                   _AllocationDescription'allocatedBytes ::
+                                                   !Data.Int.Int64,
+                                                   _AllocationDescription'allocatorName ::
+                                                   !Data.Text.Text,
+                                                   _AllocationDescription'allocationId ::
+                                                   !Data.Int.Int64,
+                                                   _AllocationDescription'hasSingleReference ::
+                                                   !Prelude.Bool,
+                                                   _AllocationDescription'ptr :: !Data.Word.Word64}
+                           deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "requestedBytes" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocationDescription'requestedBytes
+              (\ x__ y__ -> x__{_AllocationDescription'requestedBytes = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocatedBytes" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocationDescription'allocatedBytes
+              (\ x__ y__ -> x__{_AllocationDescription'allocatedBytes = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocatorName" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocationDescription'allocatorName
+              (\ x__ y__ -> x__{_AllocationDescription'allocatorName = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocationId" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocationDescription'allocationId
+              (\ x__ y__ -> x__{_AllocationDescription'allocationId = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "hasSingleReference" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _AllocationDescription'hasSingleReference
+              (\ x__ y__ -> x__{_AllocationDescription'hasSingleReference = y__})
+
+instance (a ~ Data.Word.Word64, b ~ Data.Word.Word64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "ptr" f AllocationDescription
+           AllocationDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocationDescription'ptr
+              (\ x__ y__ -> x__{_AllocationDescription'ptr = y__})
+
+instance Data.Default.Class.Default AllocationDescription where
+        def
+          = AllocationDescription{_AllocationDescription'requestedBytes =
+                                    Data.ProtoLens.fieldDefault,
+                                  _AllocationDescription'allocatedBytes =
+                                    Data.ProtoLens.fieldDefault,
+                                  _AllocationDescription'allocatorName =
+                                    Data.ProtoLens.fieldDefault,
+                                  _AllocationDescription'allocationId = Data.ProtoLens.fieldDefault,
+                                  _AllocationDescription'hasSingleReference =
+                                    Data.ProtoLens.fieldDefault,
+                                  _AllocationDescription'ptr = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message AllocationDescription where
+        descriptor
+          = let requestedBytes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "requested_bytes"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional requestedBytes)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+                allocatedBytes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocated_bytes"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allocatedBytes)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+                allocatorName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocator_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allocatorName)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+                allocationId__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocation_id"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allocationId)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+                hasSingleReference__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "has_single_reference"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         hasSingleReference)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+                ptr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "ptr"
+                      (Data.ProtoLens.UInt64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional ptr)
+                      :: Data.ProtoLens.FieldDescriptor AllocationDescription
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, requestedBytes__field_descriptor),
+                    (Data.ProtoLens.Tag 2, allocatedBytes__field_descriptor),
+                    (Data.ProtoLens.Tag 3, allocatorName__field_descriptor),
+                    (Data.ProtoLens.Tag 4, allocationId__field_descriptor),
+                    (Data.ProtoLens.Tag 5, hasSingleReference__field_descriptor),
+                    (Data.ProtoLens.Tag 6, ptr__field_descriptor)])
+                (Data.Map.fromList
+                   [("requested_bytes", requestedBytes__field_descriptor),
+                    ("allocated_bytes", allocatedBytes__field_descriptor),
+                    ("allocator_name", allocatorName__field_descriptor),
+                    ("allocation_id", allocationId__field_descriptor),
+                    ("has_single_reference", hasSingleReference__field_descriptor),
+                    ("ptr", ptr__field_descriptor)])
+
+allocatedBytes ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "allocatedBytes" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+allocatedBytes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allocatedBytes")
+
+allocationId ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "allocationId" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+allocationId
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allocationId")
+
+allocatorName ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "allocatorName" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+allocatorName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allocatorName")
+
+hasSingleReference ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "hasSingleReference" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+hasSingleReference
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "hasSingleReference")
+
+ptr ::
+    forall f s t a b . (Lens.Labels.HasLens "ptr" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+ptr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "ptr")
+
+requestedBytes ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "requestedBytes" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+requestedBytes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "requestedBytes")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/AttrValue.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/AttrValue.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/AttrValue.hs
@@ -0,0 +1,783 @@
+{- This file was auto-generated from tensorflow/core/framework/attr_value.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.AttrValue where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.Tensor
+import qualified Proto.Tensorflow.Core.Framework.TensorShape
+import qualified Proto.Tensorflow.Core.Framework.Types
+
+data AttrValue = AttrValue{_AttrValue's ::
+                           !(Prelude.Maybe Data.ByteString.ByteString),
+                           _AttrValue'i :: !(Prelude.Maybe Data.Int.Int64),
+                           _AttrValue'f :: !(Prelude.Maybe Prelude.Float),
+                           _AttrValue'b :: !(Prelude.Maybe Prelude.Bool),
+                           _AttrValue'type' ::
+                           !(Prelude.Maybe Proto.Tensorflow.Core.Framework.Types.DataType),
+                           _AttrValue'shape ::
+                           !(Prelude.Maybe
+                               Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto),
+                           _AttrValue'tensor ::
+                           !(Prelude.Maybe
+                               Proto.Tensorflow.Core.Framework.Tensor.TensorProto),
+                           _AttrValue'list :: !(Prelude.Maybe AttrValue'ListValue),
+                           _AttrValue'func :: !(Prelude.Maybe NameAttrList),
+                           _AttrValue'placeholder :: !(Prelude.Maybe Data.Text.Text)}
+               deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "s" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe's
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.ByteString.ByteString,
+          b ~ Prelude.Maybe Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe's" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue's
+              (\ x__ y__ -> x__{_AttrValue's = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "i" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'i
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.Int.Int64,
+          b ~ Prelude.Maybe Data.Int.Int64, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'i" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'i
+              (\ x__ y__ -> x__{_AttrValue'i = y__})
+
+instance (a ~ Prelude.Float, b ~ Prelude.Float,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "f" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'f
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Prelude.Float,
+          b ~ Prelude.Maybe Prelude.Float, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'f" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'f
+              (\ x__ y__ -> x__{_AttrValue'f = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "b" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'b
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Prelude.Bool,
+          b ~ Prelude.Maybe Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'b" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'b
+              (\ x__ y__ -> x__{_AttrValue'b = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "type'" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'type'
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Prelude.Maybe Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'type'" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'type'
+              (\ x__ y__ -> x__{_AttrValue'type' = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~ Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "shape" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'shape
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'shape" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'shape
+              (\ x__ y__ -> x__{_AttrValue'shape = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          b ~ Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensor" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'tensor
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'tensor" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'tensor
+              (\ x__ y__ -> x__{_AttrValue'tensor = y__})
+
+instance (a ~ AttrValue'ListValue, b ~ AttrValue'ListValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "list" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'list
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe AttrValue'ListValue,
+          b ~ Prelude.Maybe AttrValue'ListValue, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'list" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'list
+              (\ x__ y__ -> x__{_AttrValue'list = y__})
+
+instance (a ~ NameAttrList, b ~ NameAttrList, Prelude.Functor f) =>
+         Lens.Labels.HasLens "func" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'func
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe NameAttrList,
+          b ~ Prelude.Maybe NameAttrList, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'func" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'func
+              (\ x__ y__ -> x__{_AttrValue'func = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "placeholder" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = (Prelude..) maybe'placeholder
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.Text.Text,
+          b ~ Prelude.Maybe Data.Text.Text, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'placeholder" f AttrValue AttrValue a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'placeholder
+              (\ x__ y__ -> x__{_AttrValue'placeholder = y__})
+
+instance Data.Default.Class.Default AttrValue where
+        def
+          = AttrValue{_AttrValue's = Prelude.Nothing,
+                      _AttrValue'i = Prelude.Nothing, _AttrValue'f = Prelude.Nothing,
+                      _AttrValue'b = Prelude.Nothing, _AttrValue'type' = Prelude.Nothing,
+                      _AttrValue'shape = Prelude.Nothing,
+                      _AttrValue'tensor = Prelude.Nothing,
+                      _AttrValue'list = Prelude.Nothing,
+                      _AttrValue'func = Prelude.Nothing,
+                      _AttrValue'placeholder = Prelude.Nothing}
+
+instance Data.ProtoLens.Message AttrValue where
+        descriptor
+          = let s__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "s"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.OptionalField maybe's)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                i__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "i"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.OptionalField maybe'i)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                f__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "f"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.OptionalField maybe'f)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                b__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "b"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.OptionalField maybe'b)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                type'__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.OptionalField maybe'type')
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                shape__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "shape"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto)
+                      (Data.ProtoLens.OptionalField maybe'shape)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                tensor__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Tensor.TensorProto)
+                      (Data.ProtoLens.OptionalField maybe'tensor)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                list__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "list"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor AttrValue'ListValue)
+                      (Data.ProtoLens.OptionalField maybe'list)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                func__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "func"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NameAttrList)
+                      (Data.ProtoLens.OptionalField maybe'func)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+                placeholder__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "placeholder"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.OptionalField maybe'placeholder)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 2, s__field_descriptor),
+                    (Data.ProtoLens.Tag 3, i__field_descriptor),
+                    (Data.ProtoLens.Tag 4, f__field_descriptor),
+                    (Data.ProtoLens.Tag 5, b__field_descriptor),
+                    (Data.ProtoLens.Tag 6, type'__field_descriptor),
+                    (Data.ProtoLens.Tag 7, shape__field_descriptor),
+                    (Data.ProtoLens.Tag 8, tensor__field_descriptor),
+                    (Data.ProtoLens.Tag 1, list__field_descriptor),
+                    (Data.ProtoLens.Tag 10, func__field_descriptor),
+                    (Data.ProtoLens.Tag 9, placeholder__field_descriptor)])
+                (Data.Map.fromList
+                   [("s", s__field_descriptor), ("i", i__field_descriptor),
+                    ("f", f__field_descriptor), ("b", b__field_descriptor),
+                    ("type", type'__field_descriptor),
+                    ("shape", shape__field_descriptor),
+                    ("tensor", tensor__field_descriptor),
+                    ("list", list__field_descriptor), ("func", func__field_descriptor),
+                    ("placeholder", placeholder__field_descriptor)])
+
+data AttrValue'ListValue = AttrValue'ListValue{_AttrValue'ListValue's
+                                               :: ![Data.ByteString.ByteString],
+                                               _AttrValue'ListValue'i :: ![Data.Int.Int64],
+                                               _AttrValue'ListValue'f :: ![Prelude.Float],
+                                               _AttrValue'ListValue'b :: ![Prelude.Bool],
+                                               _AttrValue'ListValue'type' ::
+                                               ![Proto.Tensorflow.Core.Framework.Types.DataType],
+                                               _AttrValue'ListValue'shape ::
+                                               ![Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto],
+                                               _AttrValue'ListValue'tensor ::
+                                               ![Proto.Tensorflow.Core.Framework.Tensor.TensorProto],
+                                               _AttrValue'ListValue'func :: ![NameAttrList]}
+                         deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [Data.ByteString.ByteString],
+          b ~ [Data.ByteString.ByteString], Prelude.Functor f) =>
+         Lens.Labels.HasLens "s" f AttrValue'ListValue AttrValue'ListValue a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue's
+              (\ x__ y__ -> x__{_AttrValue'ListValue's = y__})
+
+instance (a ~ [Data.Int.Int64], b ~ [Data.Int.Int64],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "i" f AttrValue'ListValue AttrValue'ListValue a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'i
+              (\ x__ y__ -> x__{_AttrValue'ListValue'i = y__})
+
+instance (a ~ [Prelude.Float], b ~ [Prelude.Float],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "f" f AttrValue'ListValue AttrValue'ListValue a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'f
+              (\ x__ y__ -> x__{_AttrValue'ListValue'f = y__})
+
+instance (a ~ [Prelude.Bool], b ~ [Prelude.Bool],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "b" f AttrValue'ListValue AttrValue'ListValue a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'b
+              (\ x__ y__ -> x__{_AttrValue'ListValue'b = y__})
+
+instance (a ~ [Proto.Tensorflow.Core.Framework.Types.DataType],
+          b ~ [Proto.Tensorflow.Core.Framework.Types.DataType],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "type'" f AttrValue'ListValue
+           AttrValue'ListValue
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'type'
+              (\ x__ y__ -> x__{_AttrValue'ListValue'type' = y__})
+
+instance (a ~
+            [Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto],
+          b ~ [Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "shape" f AttrValue'ListValue
+           AttrValue'ListValue
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'shape
+              (\ x__ y__ -> x__{_AttrValue'ListValue'shape = y__})
+
+instance (a ~ [Proto.Tensorflow.Core.Framework.Tensor.TensorProto],
+          b ~ [Proto.Tensorflow.Core.Framework.Tensor.TensorProto],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensor" f AttrValue'ListValue
+           AttrValue'ListValue
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'tensor
+              (\ x__ y__ -> x__{_AttrValue'ListValue'tensor = y__})
+
+instance (a ~ [NameAttrList], b ~ [NameAttrList],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "func" f AttrValue'ListValue
+           AttrValue'ListValue
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AttrValue'ListValue'func
+              (\ x__ y__ -> x__{_AttrValue'ListValue'func = y__})
+
+instance Data.Default.Class.Default AttrValue'ListValue where
+        def
+          = AttrValue'ListValue{_AttrValue'ListValue's = [],
+                                _AttrValue'ListValue'i = [], _AttrValue'ListValue'f = [],
+                                _AttrValue'ListValue'b = [], _AttrValue'ListValue'type' = [],
+                                _AttrValue'ListValue'shape = [], _AttrValue'ListValue'tensor = [],
+                                _AttrValue'ListValue'func = []}
+
+instance Data.ProtoLens.Message AttrValue'ListValue where
+        descriptor
+          = let s__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "s"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked s)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                i__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "i"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed i)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                f__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "f"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed f)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                b__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "b"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed b)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                type'__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed type')
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                shape__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "shape"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked shape)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                tensor__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Tensor.TensorProto)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked tensor)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+                func__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "func"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NameAttrList)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked func)
+                      :: Data.ProtoLens.FieldDescriptor AttrValue'ListValue
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 2, s__field_descriptor),
+                    (Data.ProtoLens.Tag 3, i__field_descriptor),
+                    (Data.ProtoLens.Tag 4, f__field_descriptor),
+                    (Data.ProtoLens.Tag 5, b__field_descriptor),
+                    (Data.ProtoLens.Tag 6, type'__field_descriptor),
+                    (Data.ProtoLens.Tag 7, shape__field_descriptor),
+                    (Data.ProtoLens.Tag 8, tensor__field_descriptor),
+                    (Data.ProtoLens.Tag 9, func__field_descriptor)])
+                (Data.Map.fromList
+                   [("s", s__field_descriptor), ("i", i__field_descriptor),
+                    ("f", f__field_descriptor), ("b", b__field_descriptor),
+                    ("type", type'__field_descriptor),
+                    ("shape", shape__field_descriptor),
+                    ("tensor", tensor__field_descriptor),
+                    ("func", func__field_descriptor)])
+
+data NameAttrList = NameAttrList{_NameAttrList'name ::
+                                 !Data.Text.Text,
+                                 _NameAttrList'attr :: !(Data.Map.Map Data.Text.Text AttrValue)}
+                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f NameAttrList NameAttrList a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NameAttrList'name
+              (\ x__ y__ -> x__{_NameAttrList'name = y__})
+
+instance (a ~ Data.Map.Map Data.Text.Text AttrValue,
+          b ~ Data.Map.Map Data.Text.Text AttrValue, Prelude.Functor f) =>
+         Lens.Labels.HasLens "attr" f NameAttrList NameAttrList a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NameAttrList'attr
+              (\ x__ y__ -> x__{_NameAttrList'attr = y__})
+
+instance Data.Default.Class.Default NameAttrList where
+        def
+          = NameAttrList{_NameAttrList'name = Data.ProtoLens.fieldDefault,
+                         _NameAttrList'attr = Data.Map.empty}
+
+instance Data.ProtoLens.Message NameAttrList where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor NameAttrList
+                attr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "attr"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NameAttrList'AttrEntry)
+                      (Data.ProtoLens.MapField key value attr)
+                      :: Data.ProtoLens.FieldDescriptor NameAttrList
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, attr__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor),
+                    ("attr", attr__field_descriptor)])
+
+data NameAttrList'AttrEntry = NameAttrList'AttrEntry{_NameAttrList'AttrEntry'key
+                                                     :: !Data.Text.Text,
+                                                     _NameAttrList'AttrEntry'value ::
+                                                     !(Prelude.Maybe AttrValue)}
+                            deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "key" f NameAttrList'AttrEntry
+           NameAttrList'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NameAttrList'AttrEntry'key
+              (\ x__ y__ -> x__{_NameAttrList'AttrEntry'key = y__})
+
+instance (a ~ AttrValue, b ~ AttrValue, Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f NameAttrList'AttrEntry
+           NameAttrList'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'value
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe AttrValue, b ~ Prelude.Maybe AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'value" f NameAttrList'AttrEntry
+           NameAttrList'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NameAttrList'AttrEntry'value
+              (\ x__ y__ -> x__{_NameAttrList'AttrEntry'value = y__})
+
+instance Data.Default.Class.Default NameAttrList'AttrEntry where
+        def
+          = NameAttrList'AttrEntry{_NameAttrList'AttrEntry'key =
+                                     Data.ProtoLens.fieldDefault,
+                                   _NameAttrList'AttrEntry'value = Prelude.Nothing}
+
+instance Data.ProtoLens.Message NameAttrList'AttrEntry where
+        descriptor
+          = let key__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "key"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
+                      :: Data.ProtoLens.FieldDescriptor NameAttrList'AttrEntry
+                value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor AttrValue)
+                      (Data.ProtoLens.OptionalField maybe'value)
+                      :: Data.ProtoLens.FieldDescriptor NameAttrList'AttrEntry
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
+                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
+                (Data.Map.fromList
+                   [("key", key__field_descriptor),
+                    ("value", value__field_descriptor)])
+
+attr ::
+     forall f s t a b . (Lens.Labels.HasLens "attr" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+attr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "attr")
+
+b ::
+  forall f s t a b . (Lens.Labels.HasLens "b" f s t a b) =>
+    Lens.Family2.LensLike f s t a b
+b = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "b")
+
+f ::
+  forall f s t a b . (Lens.Labels.HasLens "f" f s t a b) =>
+    Lens.Family2.LensLike f s t a b
+f = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "f")
+
+func ::
+     forall f s t a b . (Lens.Labels.HasLens "func" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+func
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "func")
+
+i ::
+  forall f s t a b . (Lens.Labels.HasLens "i" f s t a b) =>
+    Lens.Family2.LensLike f s t a b
+i = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "i")
+
+key ::
+    forall f s t a b . (Lens.Labels.HasLens "key" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+key
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")
+
+list ::
+     forall f s t a b . (Lens.Labels.HasLens "list" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+list
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "list")
+
+maybe'b ::
+        forall f s t a b . (Lens.Labels.HasLens "maybe'b" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+maybe'b
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'b")
+
+maybe'f ::
+        forall f s t a b . (Lens.Labels.HasLens "maybe'f" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+maybe'f
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'f")
+
+maybe'func ::
+           forall f s t a b . (Lens.Labels.HasLens "maybe'func" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+maybe'func
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'func")
+
+maybe'i ::
+        forall f s t a b . (Lens.Labels.HasLens "maybe'i" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+maybe'i
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'i")
+
+maybe'list ::
+           forall f s t a b . (Lens.Labels.HasLens "maybe'list" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+maybe'list
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'list")
+
+maybe'placeholder ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "maybe'placeholder" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+maybe'placeholder
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'placeholder")
+
+maybe's ::
+        forall f s t a b . (Lens.Labels.HasLens "maybe's" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+maybe's
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe's")
+
+maybe'shape ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'shape" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'shape")
+
+maybe'tensor ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "maybe'tensor" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+maybe'tensor
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'tensor")
+
+maybe'type' ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'type'" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'type'
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'type'")
+
+maybe'value ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'value" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
+
+placeholder ::
+            forall f s t a b . (Lens.Labels.HasLens "placeholder" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+placeholder
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "placeholder")
+
+s ::
+  forall f s t a b . (Lens.Labels.HasLens "s" f s t a b) =>
+    Lens.Family2.LensLike f s t a b
+s = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "s")
+
+shape ::
+      forall f s t a b . (Lens.Labels.HasLens "shape" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "shape")
+
+tensor ::
+       forall f s t a b . (Lens.Labels.HasLens "tensor" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+tensor
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tensor")
+
+type' ::
+      forall f s t a b . (Lens.Labels.HasLens "type'" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+type'
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "type'")
+
+value ::
+      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/CostGraph.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/CostGraph.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/CostGraph.hs
@@ -0,0 +1,574 @@
+{- This file was auto-generated from tensorflow/core/framework/cost_graph.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.CostGraph where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.TensorShape
+import qualified Proto.Tensorflow.Core.Framework.Types
+
+data CostGraphDef = CostGraphDef{_CostGraphDef'node ::
+                                 ![CostGraphDef'Node]}
+                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [CostGraphDef'Node], b ~ [CostGraphDef'Node],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "node" f CostGraphDef CostGraphDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'node
+              (\ x__ y__ -> x__{_CostGraphDef'node = y__})
+
+instance Data.Default.Class.Default CostGraphDef where
+        def = CostGraphDef{_CostGraphDef'node = []}
+
+instance Data.ProtoLens.Message CostGraphDef where
+        descriptor
+          = let node__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor CostGraphDef'Node)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked node)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, node__field_descriptor)])
+                (Data.Map.fromList [("node", node__field_descriptor)])
+
+data CostGraphDef'Node = CostGraphDef'Node{_CostGraphDef'Node'name
+                                           :: !Data.Text.Text,
+                                           _CostGraphDef'Node'device :: !Data.Text.Text,
+                                           _CostGraphDef'Node'id :: !Data.Int.Int32,
+                                           _CostGraphDef'Node'inputInfo ::
+                                           ![CostGraphDef'Node'InputInfo],
+                                           _CostGraphDef'Node'outputInfo ::
+                                           ![CostGraphDef'Node'OutputInfo],
+                                           _CostGraphDef'Node'temporaryMemorySize ::
+                                           !Data.Int.Int64,
+                                           _CostGraphDef'Node'computeCost :: !Data.Int.Int64,
+                                           _CostGraphDef'Node'isFinal :: !Prelude.Bool,
+                                           _CostGraphDef'Node'controlInput :: ![Data.Int.Int32]}
+                       deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f CostGraphDef'Node CostGraphDef'Node a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'name
+              (\ x__ y__ -> x__{_CostGraphDef'Node'name = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "device" f CostGraphDef'Node CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'device
+              (\ x__ y__ -> x__{_CostGraphDef'Node'device = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "id" f CostGraphDef'Node CostGraphDef'Node a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'id
+              (\ x__ y__ -> x__{_CostGraphDef'Node'id = y__})
+
+instance (a ~ [CostGraphDef'Node'InputInfo],
+          b ~ [CostGraphDef'Node'InputInfo], Prelude.Functor f) =>
+         Lens.Labels.HasLens "inputInfo" f CostGraphDef'Node
+           CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'inputInfo
+              (\ x__ y__ -> x__{_CostGraphDef'Node'inputInfo = y__})
+
+instance (a ~ [CostGraphDef'Node'OutputInfo],
+          b ~ [CostGraphDef'Node'OutputInfo], Prelude.Functor f) =>
+         Lens.Labels.HasLens "outputInfo" f CostGraphDef'Node
+           CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'outputInfo
+              (\ x__ y__ -> x__{_CostGraphDef'Node'outputInfo = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "temporaryMemorySize" f CostGraphDef'Node
+           CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _CostGraphDef'Node'temporaryMemorySize
+              (\ x__ y__ -> x__{_CostGraphDef'Node'temporaryMemorySize = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "computeCost" f CostGraphDef'Node
+           CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'computeCost
+              (\ x__ y__ -> x__{_CostGraphDef'Node'computeCost = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "isFinal" f CostGraphDef'Node CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'isFinal
+              (\ x__ y__ -> x__{_CostGraphDef'Node'isFinal = y__})
+
+instance (a ~ [Data.Int.Int32], b ~ [Data.Int.Int32],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "controlInput" f CostGraphDef'Node
+           CostGraphDef'Node
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'controlInput
+              (\ x__ y__ -> x__{_CostGraphDef'Node'controlInput = y__})
+
+instance Data.Default.Class.Default CostGraphDef'Node where
+        def
+          = CostGraphDef'Node{_CostGraphDef'Node'name =
+                                Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'device = Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'id = Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'inputInfo = [],
+                              _CostGraphDef'Node'outputInfo = [],
+                              _CostGraphDef'Node'temporaryMemorySize =
+                                Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'computeCost = Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'isFinal = Data.ProtoLens.fieldDefault,
+                              _CostGraphDef'Node'controlInput = []}
+
+instance Data.ProtoLens.Message CostGraphDef'Node where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                device__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional device)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                id__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "id"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional id)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                inputInfo__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "input_info"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor CostGraphDef'Node'InputInfo)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked inputInfo)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                outputInfo__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "output_info"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor CostGraphDef'Node'OutputInfo)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked outputInfo)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                temporaryMemorySize__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "temporary_memory_size"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         temporaryMemorySize)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                computeCost__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "compute_cost"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional computeCost)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                isFinal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "is_final"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional isFinal)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+                controlInput__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "control_input"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed controlInput)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, device__field_descriptor),
+                    (Data.ProtoLens.Tag 3, id__field_descriptor),
+                    (Data.ProtoLens.Tag 4, inputInfo__field_descriptor),
+                    (Data.ProtoLens.Tag 5, outputInfo__field_descriptor),
+                    (Data.ProtoLens.Tag 6, temporaryMemorySize__field_descriptor),
+                    (Data.ProtoLens.Tag 9, computeCost__field_descriptor),
+                    (Data.ProtoLens.Tag 7, isFinal__field_descriptor),
+                    (Data.ProtoLens.Tag 8, controlInput__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor),
+                    ("device", device__field_descriptor), ("id", id__field_descriptor),
+                    ("input_info", inputInfo__field_descriptor),
+                    ("output_info", outputInfo__field_descriptor),
+                    ("temporary_memory_size", temporaryMemorySize__field_descriptor),
+                    ("compute_cost", computeCost__field_descriptor),
+                    ("is_final", isFinal__field_descriptor),
+                    ("control_input", controlInput__field_descriptor)])
+
+data CostGraphDef'Node'InputInfo = CostGraphDef'Node'InputInfo{_CostGraphDef'Node'InputInfo'precedingNode
+                                                               :: !Data.Int.Int32,
+                                                               _CostGraphDef'Node'InputInfo'precedingPort
+                                                               :: !Data.Int.Int32}
+                                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "precedingNode" f CostGraphDef'Node'InputInfo
+           CostGraphDef'Node'InputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _CostGraphDef'Node'InputInfo'precedingNode
+              (\ x__ y__ ->
+                 x__{_CostGraphDef'Node'InputInfo'precedingNode = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "precedingPort" f CostGraphDef'Node'InputInfo
+           CostGraphDef'Node'InputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _CostGraphDef'Node'InputInfo'precedingPort
+              (\ x__ y__ ->
+                 x__{_CostGraphDef'Node'InputInfo'precedingPort = y__})
+
+instance Data.Default.Class.Default CostGraphDef'Node'InputInfo
+         where
+        def
+          = CostGraphDef'Node'InputInfo{_CostGraphDef'Node'InputInfo'precedingNode
+                                          = Data.ProtoLens.fieldDefault,
+                                        _CostGraphDef'Node'InputInfo'precedingPort =
+                                          Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message CostGraphDef'Node'InputInfo where
+        descriptor
+          = let precedingNode__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "preceding_node"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional precedingNode)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'InputInfo
+                precedingPort__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "preceding_port"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional precedingPort)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'InputInfo
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, precedingNode__field_descriptor),
+                    (Data.ProtoLens.Tag 2, precedingPort__field_descriptor)])
+                (Data.Map.fromList
+                   [("preceding_node", precedingNode__field_descriptor),
+                    ("preceding_port", precedingPort__field_descriptor)])
+
+data CostGraphDef'Node'OutputInfo = CostGraphDef'Node'OutputInfo{_CostGraphDef'Node'OutputInfo'size
+                                                                 :: !Data.Int.Int64,
+                                                                 _CostGraphDef'Node'OutputInfo'aliasInputPort
+                                                                 :: !Data.Int.Int64,
+                                                                 _CostGraphDef'Node'OutputInfo'shape
+                                                                 ::
+                                                                 !(Prelude.Maybe
+                                                                     Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto),
+                                                                 _CostGraphDef'Node'OutputInfo'dtype
+                                                                 ::
+                                                                 !Proto.Tensorflow.Core.Framework.Types.DataType}
+                                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "size" f CostGraphDef'Node'OutputInfo
+           CostGraphDef'Node'OutputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'OutputInfo'size
+              (\ x__ y__ -> x__{_CostGraphDef'Node'OutputInfo'size = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "aliasInputPort" f CostGraphDef'Node'OutputInfo
+           CostGraphDef'Node'OutputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _CostGraphDef'Node'OutputInfo'aliasInputPort
+              (\ x__ y__ ->
+                 x__{_CostGraphDef'Node'OutputInfo'aliasInputPort = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~ Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "shape" f CostGraphDef'Node'OutputInfo
+           CostGraphDef'Node'OutputInfo
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'shape
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'shape" f CostGraphDef'Node'OutputInfo
+           CostGraphDef'Node'OutputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'OutputInfo'shape
+              (\ x__ y__ -> x__{_CostGraphDef'Node'OutputInfo'shape = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "dtype" f CostGraphDef'Node'OutputInfo
+           CostGraphDef'Node'OutputInfo
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _CostGraphDef'Node'OutputInfo'dtype
+              (\ x__ y__ -> x__{_CostGraphDef'Node'OutputInfo'dtype = y__})
+
+instance Data.Default.Class.Default CostGraphDef'Node'OutputInfo
+         where
+        def
+          = CostGraphDef'Node'OutputInfo{_CostGraphDef'Node'OutputInfo'size =
+                                           Data.ProtoLens.fieldDefault,
+                                         _CostGraphDef'Node'OutputInfo'aliasInputPort =
+                                           Data.ProtoLens.fieldDefault,
+                                         _CostGraphDef'Node'OutputInfo'shape = Prelude.Nothing,
+                                         _CostGraphDef'Node'OutputInfo'dtype =
+                                           Data.Default.Class.def}
+
+instance Data.ProtoLens.Message CostGraphDef'Node'OutputInfo where
+        descriptor
+          = let size__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "size"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional size)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'OutputInfo
+                aliasInputPort__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "alias_input_port"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional aliasInputPort)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'OutputInfo
+                shape__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "shape"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto)
+                      (Data.ProtoLens.OptionalField maybe'shape)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'OutputInfo
+                dtype__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dtype"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional dtype)
+                      :: Data.ProtoLens.FieldDescriptor CostGraphDef'Node'OutputInfo
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, size__field_descriptor),
+                    (Data.ProtoLens.Tag 2, aliasInputPort__field_descriptor),
+                    (Data.ProtoLens.Tag 3, shape__field_descriptor),
+                    (Data.ProtoLens.Tag 4, dtype__field_descriptor)])
+                (Data.Map.fromList
+                   [("size", size__field_descriptor),
+                    ("alias_input_port", aliasInputPort__field_descriptor),
+                    ("shape", shape__field_descriptor),
+                    ("dtype", dtype__field_descriptor)])
+
+aliasInputPort ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "aliasInputPort" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+aliasInputPort
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "aliasInputPort")
+
+computeCost ::
+            forall f s t a b . (Lens.Labels.HasLens "computeCost" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+computeCost
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "computeCost")
+
+controlInput ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "controlInput" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+controlInput
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "controlInput")
+
+device ::
+       forall f s t a b . (Lens.Labels.HasLens "device" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+device
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "device")
+
+dtype ::
+      forall f s t a b . (Lens.Labels.HasLens "dtype" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+dtype
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "dtype")
+
+id ::
+   forall f s t a b . (Lens.Labels.HasLens "id" f s t a b) =>
+     Lens.Family2.LensLike f s t a b
+id
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "id")
+
+inputInfo ::
+          forall f s t a b . (Lens.Labels.HasLens "inputInfo" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+inputInfo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "inputInfo")
+
+isFinal ::
+        forall f s t a b . (Lens.Labels.HasLens "isFinal" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+isFinal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "isFinal")
+
+maybe'shape ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'shape" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'shape")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
+
+node ::
+     forall f s t a b . (Lens.Labels.HasLens "node" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+node
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "node")
+
+outputInfo ::
+           forall f s t a b . (Lens.Labels.HasLens "outputInfo" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+outputInfo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "outputInfo")
+
+precedingNode ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "precedingNode" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+precedingNode
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "precedingNode")
+
+precedingPort ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "precedingPort" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+precedingPort
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "precedingPort")
+
+shape ::
+      forall f s t a b . (Lens.Labels.HasLens "shape" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "shape")
+
+size ::
+     forall f s t a b . (Lens.Labels.HasLens "size" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+size
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "size")
+
+temporaryMemorySize ::
+                    forall f s t a b .
+                      (Lens.Labels.HasLens "temporaryMemorySize" f s t a b) =>
+                      Lens.Family2.LensLike f s t a b
+temporaryMemorySize
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "temporaryMemorySize")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Function.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Function.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Function.hs
@@ -0,0 +1,457 @@
+{- This file was auto-generated from tensorflow/core/framework/function.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Function where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.AttrValue
+import qualified Proto.Tensorflow.Core.Framework.NodeDef
+import qualified Proto.Tensorflow.Core.Framework.OpDef
+
+data FunctionDef = FunctionDef{_FunctionDef'signature ::
+                               !(Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef),
+                               _FunctionDef'attr ::
+                               !(Data.Map.Map Data.Text.Text
+                                   Proto.Tensorflow.Core.Framework.AttrValue.AttrValue),
+                               _FunctionDef'nodeDef ::
+                               ![Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+                               _FunctionDef'ret :: !(Data.Map.Map Data.Text.Text Data.Text.Text)}
+                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Proto.Tensorflow.Core.Framework.OpDef.OpDef,
+          b ~ Proto.Tensorflow.Core.Framework.OpDef.OpDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "signature" f FunctionDef FunctionDef a b
+         where
+        lensOf _
+          = (Prelude..) maybe'signature
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef,
+          b ~ Prelude.Maybe Proto.Tensorflow.Core.Framework.OpDef.OpDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'signature" f FunctionDef FunctionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'signature
+              (\ x__ y__ -> x__{_FunctionDef'signature = y__})
+
+instance (a ~
+            Data.Map.Map Data.Text.Text
+              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Data.Map.Map Data.Text.Text
+              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "attr" f FunctionDef FunctionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'attr
+              (\ x__ y__ -> x__{_FunctionDef'attr = y__})
+
+instance (a ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+          b ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "nodeDef" f FunctionDef FunctionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'nodeDef
+              (\ x__ y__ -> x__{_FunctionDef'nodeDef = y__})
+
+instance (a ~ Data.Map.Map Data.Text.Text Data.Text.Text,
+          b ~ Data.Map.Map Data.Text.Text Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "ret" f FunctionDef FunctionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'ret
+              (\ x__ y__ -> x__{_FunctionDef'ret = y__})
+
+instance Data.Default.Class.Default FunctionDef where
+        def
+          = FunctionDef{_FunctionDef'signature = Prelude.Nothing,
+                        _FunctionDef'attr = Data.Map.empty, _FunctionDef'nodeDef = [],
+                        _FunctionDef'ret = Data.Map.empty}
+
+instance Data.ProtoLens.Message FunctionDef where
+        descriptor
+          = let signature__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "signature"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.OpDef.OpDef)
+                      (Data.ProtoLens.OptionalField maybe'signature)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef
+                attr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "attr"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor FunctionDef'AttrEntry)
+                      (Data.ProtoLens.MapField key value attr)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef
+                nodeDef__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node_def"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.NodeDef.NodeDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked nodeDef)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef
+                ret__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "ret"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor FunctionDef'RetEntry)
+                      (Data.ProtoLens.MapField key value ret)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, signature__field_descriptor),
+                    (Data.ProtoLens.Tag 5, attr__field_descriptor),
+                    (Data.ProtoLens.Tag 3, nodeDef__field_descriptor),
+                    (Data.ProtoLens.Tag 4, ret__field_descriptor)])
+                (Data.Map.fromList
+                   [("signature", signature__field_descriptor),
+                    ("attr", attr__field_descriptor),
+                    ("node_def", nodeDef__field_descriptor),
+                    ("ret", ret__field_descriptor)])
+
+data FunctionDef'AttrEntry = FunctionDef'AttrEntry{_FunctionDef'AttrEntry'key
+                                                   :: !Data.Text.Text,
+                                                   _FunctionDef'AttrEntry'value ::
+                                                   !(Prelude.Maybe
+                                                       Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)}
+                           deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "key" f FunctionDef'AttrEntry
+           FunctionDef'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'AttrEntry'key
+              (\ x__ y__ -> x__{_FunctionDef'AttrEntry'key = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f FunctionDef'AttrEntry
+           FunctionDef'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'value
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'value" f FunctionDef'AttrEntry
+           FunctionDef'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'AttrEntry'value
+              (\ x__ y__ -> x__{_FunctionDef'AttrEntry'value = y__})
+
+instance Data.Default.Class.Default FunctionDef'AttrEntry where
+        def
+          = FunctionDef'AttrEntry{_FunctionDef'AttrEntry'key =
+                                    Data.ProtoLens.fieldDefault,
+                                  _FunctionDef'AttrEntry'value = Prelude.Nothing}
+
+instance Data.ProtoLens.Message FunctionDef'AttrEntry where
+        descriptor
+          = let key__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "key"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef'AttrEntry
+                value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)
+                      (Data.ProtoLens.OptionalField maybe'value)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef'AttrEntry
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
+                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
+                (Data.Map.fromList
+                   [("key", key__field_descriptor),
+                    ("value", value__field_descriptor)])
+
+data FunctionDef'RetEntry = FunctionDef'RetEntry{_FunctionDef'RetEntry'key
+                                                 :: !Data.Text.Text,
+                                                 _FunctionDef'RetEntry'value :: !Data.Text.Text}
+                          deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "key" f FunctionDef'RetEntry
+           FunctionDef'RetEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'RetEntry'key
+              (\ x__ y__ -> x__{_FunctionDef'RetEntry'key = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f FunctionDef'RetEntry
+           FunctionDef'RetEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDef'RetEntry'value
+              (\ x__ y__ -> x__{_FunctionDef'RetEntry'value = y__})
+
+instance Data.Default.Class.Default FunctionDef'RetEntry where
+        def
+          = FunctionDef'RetEntry{_FunctionDef'RetEntry'key =
+                                   Data.ProtoLens.fieldDefault,
+                                 _FunctionDef'RetEntry'value = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message FunctionDef'RetEntry where
+        descriptor
+          = let key__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "key"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef'RetEntry
+                value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional value)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDef'RetEntry
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
+                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
+                (Data.Map.fromList
+                   [("key", key__field_descriptor),
+                    ("value", value__field_descriptor)])
+
+data FunctionDefLibrary = FunctionDefLibrary{_FunctionDefLibrary'function
+                                             :: ![FunctionDef],
+                                             _FunctionDefLibrary'gradient :: ![GradientDef]}
+                        deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [FunctionDef], b ~ [FunctionDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "function" f FunctionDefLibrary
+           FunctionDefLibrary
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDefLibrary'function
+              (\ x__ y__ -> x__{_FunctionDefLibrary'function = y__})
+
+instance (a ~ [GradientDef], b ~ [GradientDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "gradient" f FunctionDefLibrary
+           FunctionDefLibrary
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _FunctionDefLibrary'gradient
+              (\ x__ y__ -> x__{_FunctionDefLibrary'gradient = y__})
+
+instance Data.Default.Class.Default FunctionDefLibrary where
+        def
+          = FunctionDefLibrary{_FunctionDefLibrary'function = [],
+                               _FunctionDefLibrary'gradient = []}
+
+instance Data.ProtoLens.Message FunctionDefLibrary where
+        descriptor
+          = let function__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "function"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor FunctionDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked function)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDefLibrary
+                gradient__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "gradient"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor GradientDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked gradient)
+                      :: Data.ProtoLens.FieldDescriptor FunctionDefLibrary
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, function__field_descriptor),
+                    (Data.ProtoLens.Tag 2, gradient__field_descriptor)])
+                (Data.Map.fromList
+                   [("function", function__field_descriptor),
+                    ("gradient", gradient__field_descriptor)])
+
+data GradientDef = GradientDef{_GradientDef'functionName ::
+                               !Data.Text.Text,
+                               _GradientDef'gradientFunc :: !Data.Text.Text}
+                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "functionName" f GradientDef GradientDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GradientDef'functionName
+              (\ x__ y__ -> x__{_GradientDef'functionName = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "gradientFunc" f GradientDef GradientDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GradientDef'gradientFunc
+              (\ x__ y__ -> x__{_GradientDef'gradientFunc = y__})
+
+instance Data.Default.Class.Default GradientDef where
+        def
+          = GradientDef{_GradientDef'functionName =
+                          Data.ProtoLens.fieldDefault,
+                        _GradientDef'gradientFunc = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message GradientDef where
+        descriptor
+          = let functionName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "function_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional functionName)
+                      :: Data.ProtoLens.FieldDescriptor GradientDef
+                gradientFunc__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "gradient_func"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional gradientFunc)
+                      :: Data.ProtoLens.FieldDescriptor GradientDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, functionName__field_descriptor),
+                    (Data.ProtoLens.Tag 2, gradientFunc__field_descriptor)])
+                (Data.Map.fromList
+                   [("function_name", functionName__field_descriptor),
+                    ("gradient_func", gradientFunc__field_descriptor)])
+
+attr ::
+     forall f s t a b . (Lens.Labels.HasLens "attr" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+attr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "attr")
+
+function ::
+         forall f s t a b . (Lens.Labels.HasLens "function" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+function
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "function")
+
+functionName ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "functionName" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+functionName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "functionName")
+
+gradient ::
+         forall f s t a b . (Lens.Labels.HasLens "gradient" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+gradient
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "gradient")
+
+gradientFunc ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "gradientFunc" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+gradientFunc
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "gradientFunc")
+
+key ::
+    forall f s t a b . (Lens.Labels.HasLens "key" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+key
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")
+
+maybe'signature ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "maybe'signature" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+maybe'signature
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'signature")
+
+maybe'value ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'value" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")
+
+nodeDef ::
+        forall f s t a b . (Lens.Labels.HasLens "nodeDef" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+nodeDef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeDef")
+
+ret ::
+    forall f s t a b . (Lens.Labels.HasLens "ret" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+ret
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "ret")
+
+signature ::
+          forall f s t a b . (Lens.Labels.HasLens "signature" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+signature
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "signature")
+
+value ::
+      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Graph.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Graph.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Graph.hs
@@ -0,0 +1,192 @@
+{- This file was auto-generated from tensorflow/core/framework/graph.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Graph where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.Function
+import qualified Proto.Tensorflow.Core.Framework.NodeDef
+import qualified Proto.Tensorflow.Core.Framework.Versions
+
+data GraphDef = GraphDef{_GraphDef'node ::
+                         ![Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+                         _GraphDef'versions ::
+                         !(Prelude.Maybe
+                             Proto.Tensorflow.Core.Framework.Versions.VersionDef),
+                         _GraphDef'version :: !Data.Int.Int32,
+                         _GraphDef'library ::
+                         !(Prelude.Maybe
+                             Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary)}
+              deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+          b ~ [Proto.Tensorflow.Core.Framework.NodeDef.NodeDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "node" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphDef'node
+              (\ x__ y__ -> x__{_GraphDef'node = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Versions.VersionDef,
+          b ~ Proto.Tensorflow.Core.Framework.Versions.VersionDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "versions" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = (Prelude..) maybe'versions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Versions.VersionDef,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Versions.VersionDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'versions" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphDef'versions
+              (\ x__ y__ -> x__{_GraphDef'versions = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "version" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphDef'version
+              (\ x__ y__ -> x__{_GraphDef'version = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary,
+          b ~ Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "library" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = (Prelude..) maybe'library
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'library" f GraphDef GraphDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphDef'library
+              (\ x__ y__ -> x__{_GraphDef'library = y__})
+
+instance Data.Default.Class.Default GraphDef where
+        def
+          = GraphDef{_GraphDef'node = [],
+                     _GraphDef'versions = Prelude.Nothing,
+                     _GraphDef'version = Data.ProtoLens.fieldDefault,
+                     _GraphDef'library = Prelude.Nothing}
+
+instance Data.ProtoLens.Message GraphDef where
+        descriptor
+          = let node__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.NodeDef.NodeDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked node)
+                      :: Data.ProtoLens.FieldDescriptor GraphDef
+                versions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "versions"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Versions.VersionDef)
+                      (Data.ProtoLens.OptionalField maybe'versions)
+                      :: Data.ProtoLens.FieldDescriptor GraphDef
+                version__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "version"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional version)
+                      :: Data.ProtoLens.FieldDescriptor GraphDef
+                library__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "library"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Function.FunctionDefLibrary)
+                      (Data.ProtoLens.OptionalField maybe'library)
+                      :: Data.ProtoLens.FieldDescriptor GraphDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, node__field_descriptor),
+                    (Data.ProtoLens.Tag 4, versions__field_descriptor),
+                    (Data.ProtoLens.Tag 3, version__field_descriptor),
+                    (Data.ProtoLens.Tag 2, library__field_descriptor)])
+                (Data.Map.fromList
+                   [("node", node__field_descriptor),
+                    ("versions", versions__field_descriptor),
+                    ("version", version__field_descriptor),
+                    ("library", library__field_descriptor)])
+
+library ::
+        forall f s t a b . (Lens.Labels.HasLens "library" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+library
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "library")
+
+maybe'library ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "maybe'library" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+maybe'library
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'library")
+
+maybe'versions ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "maybe'versions" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+maybe'versions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'versions")
+
+node ::
+     forall f s t a b . (Lens.Labels.HasLens "node" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+node
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "node")
+
+version ::
+        forall f s t a b . (Lens.Labels.HasLens "version" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+version
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "version")
+
+versions ::
+         forall f s t a b . (Lens.Labels.HasLens "versions" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+versions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "versions")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/NodeDef.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/NodeDef.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/NodeDef.hs
@@ -0,0 +1,258 @@
+{- This file was auto-generated from tensorflow/core/framework/node_def.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.NodeDef where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.AttrValue
+
+data NodeDef = NodeDef{_NodeDef'name :: !Data.Text.Text,
+                       _NodeDef'op :: !Data.Text.Text,
+                       _NodeDef'input :: ![Data.Text.Text],
+                       _NodeDef'device :: !Data.Text.Text,
+                       _NodeDef'attr ::
+                       !(Data.Map.Map Data.Text.Text
+                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)}
+             deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f NodeDef NodeDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'name
+              (\ x__ y__ -> x__{_NodeDef'name = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "op" f NodeDef NodeDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'op
+              (\ x__ y__ -> x__{_NodeDef'op = y__})
+
+instance (a ~ [Data.Text.Text], b ~ [Data.Text.Text],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "input" f NodeDef NodeDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'input
+              (\ x__ y__ -> x__{_NodeDef'input = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "device" f NodeDef NodeDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'device
+              (\ x__ y__ -> x__{_NodeDef'device = y__})
+
+instance (a ~
+            Data.Map.Map Data.Text.Text
+              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Data.Map.Map Data.Text.Text
+              Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "attr" f NodeDef NodeDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'attr
+              (\ x__ y__ -> x__{_NodeDef'attr = y__})
+
+instance Data.Default.Class.Default NodeDef where
+        def
+          = NodeDef{_NodeDef'name = Data.ProtoLens.fieldDefault,
+                    _NodeDef'op = Data.ProtoLens.fieldDefault, _NodeDef'input = [],
+                    _NodeDef'device = Data.ProtoLens.fieldDefault,
+                    _NodeDef'attr = Data.Map.empty}
+
+instance Data.ProtoLens.Message NodeDef where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef
+                op__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "op"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional op)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef
+                input__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "input"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked input)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef
+                device__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional device)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef
+                attr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "attr"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NodeDef'AttrEntry)
+                      (Data.ProtoLens.MapField key value attr)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, op__field_descriptor),
+                    (Data.ProtoLens.Tag 3, input__field_descriptor),
+                    (Data.ProtoLens.Tag 4, device__field_descriptor),
+                    (Data.ProtoLens.Tag 5, attr__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor), ("op", op__field_descriptor),
+                    ("input", input__field_descriptor),
+                    ("device", device__field_descriptor),
+                    ("attr", attr__field_descriptor)])
+
+data NodeDef'AttrEntry = NodeDef'AttrEntry{_NodeDef'AttrEntry'key
+                                           :: !Data.Text.Text,
+                                           _NodeDef'AttrEntry'value ::
+                                           !(Prelude.Maybe
+                                               Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)}
+                       deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "key" f NodeDef'AttrEntry NodeDef'AttrEntry a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'AttrEntry'key
+              (\ x__ y__ -> x__{_NodeDef'AttrEntry'key = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f NodeDef'AttrEntry NodeDef'AttrEntry a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'value
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'value" f NodeDef'AttrEntry
+           NodeDef'AttrEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeDef'AttrEntry'value
+              (\ x__ y__ -> x__{_NodeDef'AttrEntry'value = y__})
+
+instance Data.Default.Class.Default NodeDef'AttrEntry where
+        def
+          = NodeDef'AttrEntry{_NodeDef'AttrEntry'key =
+                                Data.ProtoLens.fieldDefault,
+                              _NodeDef'AttrEntry'value = Prelude.Nothing}
+
+instance Data.ProtoLens.Message NodeDef'AttrEntry where
+        descriptor
+          = let key__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "key"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef'AttrEntry
+                value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)
+                      (Data.ProtoLens.OptionalField maybe'value)
+                      :: Data.ProtoLens.FieldDescriptor NodeDef'AttrEntry
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
+                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
+                (Data.Map.fromList
+                   [("key", key__field_descriptor),
+                    ("value", value__field_descriptor)])
+
+attr ::
+     forall f s t a b . (Lens.Labels.HasLens "attr" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+attr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "attr")
+
+device ::
+       forall f s t a b . (Lens.Labels.HasLens "device" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+device
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "device")
+
+input ::
+      forall f s t a b . (Lens.Labels.HasLens "input" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+input
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "input")
+
+key ::
+    forall f s t a b . (Lens.Labels.HasLens "key" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+key
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")
+
+maybe'value ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'value" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
+
+op ::
+   forall f s t a b . (Lens.Labels.HasLens "op" f s t a b) =>
+     Lens.Family2.LensLike f s t a b
+op
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "op")
+
+value ::
+      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/OpDef.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/OpDef.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/OpDef.hs
@@ -0,0 +1,827 @@
+{- This file was auto-generated from tensorflow/core/framework/op_def.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.OpDef where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.AttrValue
+import qualified Proto.Tensorflow.Core.Framework.Types
+
+data OpDef = OpDef{_OpDef'name :: !Data.Text.Text,
+                   _OpDef'inputArg :: ![OpDef'ArgDef],
+                   _OpDef'outputArg :: ![OpDef'ArgDef],
+                   _OpDef'attr :: ![OpDef'AttrDef],
+                   _OpDef'deprecation :: !(Prelude.Maybe OpDeprecation),
+                   _OpDef'summary :: !Data.Text.Text,
+                   _OpDef'description :: !Data.Text.Text,
+                   _OpDef'isCommutative :: !Prelude.Bool,
+                   _OpDef'isAggregate :: !Prelude.Bool,
+                   _OpDef'isStateful :: !Prelude.Bool,
+                   _OpDef'allowsUninitializedInput :: !Prelude.Bool}
+           deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'name
+              (\ x__ y__ -> x__{_OpDef'name = y__})
+
+instance (a ~ [OpDef'ArgDef], b ~ [OpDef'ArgDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "inputArg" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'inputArg
+              (\ x__ y__ -> x__{_OpDef'inputArg = y__})
+
+instance (a ~ [OpDef'ArgDef], b ~ [OpDef'ArgDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "outputArg" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'outputArg
+              (\ x__ y__ -> x__{_OpDef'outputArg = y__})
+
+instance (a ~ [OpDef'AttrDef], b ~ [OpDef'AttrDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "attr" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'attr
+              (\ x__ y__ -> x__{_OpDef'attr = y__})
+
+instance (a ~ OpDeprecation, b ~ OpDeprecation,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "deprecation" f OpDef OpDef a b
+         where
+        lensOf _
+          = (Prelude..) maybe'deprecation
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe OpDeprecation,
+          b ~ Prelude.Maybe OpDeprecation, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'deprecation" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'deprecation
+              (\ x__ y__ -> x__{_OpDef'deprecation = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "summary" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'summary
+              (\ x__ y__ -> x__{_OpDef'summary = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "description" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'description
+              (\ x__ y__ -> x__{_OpDef'description = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "isCommutative" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'isCommutative
+              (\ x__ y__ -> x__{_OpDef'isCommutative = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "isAggregate" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'isAggregate
+              (\ x__ y__ -> x__{_OpDef'isAggregate = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "isStateful" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'isStateful
+              (\ x__ y__ -> x__{_OpDef'isStateful = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "allowsUninitializedInput" f OpDef OpDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'allowsUninitializedInput
+              (\ x__ y__ -> x__{_OpDef'allowsUninitializedInput = y__})
+
+instance Data.Default.Class.Default OpDef where
+        def
+          = OpDef{_OpDef'name = Data.ProtoLens.fieldDefault,
+                  _OpDef'inputArg = [], _OpDef'outputArg = [], _OpDef'attr = [],
+                  _OpDef'deprecation = Prelude.Nothing,
+                  _OpDef'summary = Data.ProtoLens.fieldDefault,
+                  _OpDef'description = Data.ProtoLens.fieldDefault,
+                  _OpDef'isCommutative = Data.ProtoLens.fieldDefault,
+                  _OpDef'isAggregate = Data.ProtoLens.fieldDefault,
+                  _OpDef'isStateful = Data.ProtoLens.fieldDefault,
+                  _OpDef'allowsUninitializedInput = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message OpDef where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                inputArg__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "input_arg"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OpDef'ArgDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked inputArg)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                outputArg__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "output_arg"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OpDef'ArgDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked outputArg)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                attr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "attr"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OpDef'AttrDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked attr)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                deprecation__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "deprecation"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OpDeprecation)
+                      (Data.ProtoLens.OptionalField maybe'deprecation)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                summary__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "summary"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional summary)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                description__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "description"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional description)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                isCommutative__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "is_commutative"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional isCommutative)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                isAggregate__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "is_aggregate"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional isAggregate)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                isStateful__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "is_stateful"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional isStateful)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+                allowsUninitializedInput__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allows_uninitialized_input"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         allowsUninitializedInput)
+                      :: Data.ProtoLens.FieldDescriptor OpDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, inputArg__field_descriptor),
+                    (Data.ProtoLens.Tag 3, outputArg__field_descriptor),
+                    (Data.ProtoLens.Tag 4, attr__field_descriptor),
+                    (Data.ProtoLens.Tag 8, deprecation__field_descriptor),
+                    (Data.ProtoLens.Tag 5, summary__field_descriptor),
+                    (Data.ProtoLens.Tag 6, description__field_descriptor),
+                    (Data.ProtoLens.Tag 18, isCommutative__field_descriptor),
+                    (Data.ProtoLens.Tag 16, isAggregate__field_descriptor),
+                    (Data.ProtoLens.Tag 17, isStateful__field_descriptor),
+                    (Data.ProtoLens.Tag 19,
+                     allowsUninitializedInput__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor),
+                    ("input_arg", inputArg__field_descriptor),
+                    ("output_arg", outputArg__field_descriptor),
+                    ("attr", attr__field_descriptor),
+                    ("deprecation", deprecation__field_descriptor),
+                    ("summary", summary__field_descriptor),
+                    ("description", description__field_descriptor),
+                    ("is_commutative", isCommutative__field_descriptor),
+                    ("is_aggregate", isAggregate__field_descriptor),
+                    ("is_stateful", isStateful__field_descriptor),
+                    ("allows_uninitialized_input",
+                     allowsUninitializedInput__field_descriptor)])
+
+data OpDef'ArgDef = OpDef'ArgDef{_OpDef'ArgDef'name ::
+                                 !Data.Text.Text,
+                                 _OpDef'ArgDef'description :: !Data.Text.Text,
+                                 _OpDef'ArgDef'type' ::
+                                 !Proto.Tensorflow.Core.Framework.Types.DataType,
+                                 _OpDef'ArgDef'typeAttr :: !Data.Text.Text,
+                                 _OpDef'ArgDef'numberAttr :: !Data.Text.Text,
+                                 _OpDef'ArgDef'typeListAttr :: !Data.Text.Text,
+                                 _OpDef'ArgDef'isRef :: !Prelude.Bool}
+                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'name
+              (\ x__ y__ -> x__{_OpDef'ArgDef'name = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "description" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'description
+              (\ x__ y__ -> x__{_OpDef'ArgDef'description = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "type'" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'type'
+              (\ x__ y__ -> x__{_OpDef'ArgDef'type' = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "typeAttr" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'typeAttr
+              (\ x__ y__ -> x__{_OpDef'ArgDef'typeAttr = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "numberAttr" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'numberAttr
+              (\ x__ y__ -> x__{_OpDef'ArgDef'numberAttr = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "typeListAttr" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'typeListAttr
+              (\ x__ y__ -> x__{_OpDef'ArgDef'typeListAttr = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "isRef" f OpDef'ArgDef OpDef'ArgDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'ArgDef'isRef
+              (\ x__ y__ -> x__{_OpDef'ArgDef'isRef = y__})
+
+instance Data.Default.Class.Default OpDef'ArgDef where
+        def
+          = OpDef'ArgDef{_OpDef'ArgDef'name = Data.ProtoLens.fieldDefault,
+                         _OpDef'ArgDef'description = Data.ProtoLens.fieldDefault,
+                         _OpDef'ArgDef'type' = Data.Default.Class.def,
+                         _OpDef'ArgDef'typeAttr = Data.ProtoLens.fieldDefault,
+                         _OpDef'ArgDef'numberAttr = Data.ProtoLens.fieldDefault,
+                         _OpDef'ArgDef'typeListAttr = Data.ProtoLens.fieldDefault,
+                         _OpDef'ArgDef'isRef = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message OpDef'ArgDef where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                description__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "description"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional description)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                type'__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional type')
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                typeAttr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type_attr"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional typeAttr)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                numberAttr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "number_attr"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional numberAttr)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                typeListAttr__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type_list_attr"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional typeListAttr)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+                isRef__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "is_ref"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional isRef)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'ArgDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, description__field_descriptor),
+                    (Data.ProtoLens.Tag 3, type'__field_descriptor),
+                    (Data.ProtoLens.Tag 4, typeAttr__field_descriptor),
+                    (Data.ProtoLens.Tag 5, numberAttr__field_descriptor),
+                    (Data.ProtoLens.Tag 6, typeListAttr__field_descriptor),
+                    (Data.ProtoLens.Tag 16, isRef__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor),
+                    ("description", description__field_descriptor),
+                    ("type", type'__field_descriptor),
+                    ("type_attr", typeAttr__field_descriptor),
+                    ("number_attr", numberAttr__field_descriptor),
+                    ("type_list_attr", typeListAttr__field_descriptor),
+                    ("is_ref", isRef__field_descriptor)])
+
+data OpDef'AttrDef = OpDef'AttrDef{_OpDef'AttrDef'name ::
+                                   !Data.Text.Text,
+                                   _OpDef'AttrDef'type' :: !Data.Text.Text,
+                                   _OpDef'AttrDef'defaultValue ::
+                                   !(Prelude.Maybe
+                                       Proto.Tensorflow.Core.Framework.AttrValue.AttrValue),
+                                   _OpDef'AttrDef'description :: !Data.Text.Text,
+                                   _OpDef'AttrDef'hasMinimum :: !Prelude.Bool,
+                                   _OpDef'AttrDef'minimum :: !Data.Int.Int64,
+                                   _OpDef'AttrDef'allowedValues ::
+                                   !(Prelude.Maybe
+                                       Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f OpDef'AttrDef OpDef'AttrDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'name
+              (\ x__ y__ -> x__{_OpDef'AttrDef'name = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "type'" f OpDef'AttrDef OpDef'AttrDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'type'
+              (\ x__ y__ -> x__{_OpDef'AttrDef'type' = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "defaultValue" f OpDef'AttrDef OpDef'AttrDef a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'defaultValue
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'defaultValue" f OpDef'AttrDef
+           OpDef'AttrDef
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'defaultValue
+              (\ x__ y__ -> x__{_OpDef'AttrDef'defaultValue = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "description" f OpDef'AttrDef OpDef'AttrDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'description
+              (\ x__ y__ -> x__{_OpDef'AttrDef'description = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "hasMinimum" f OpDef'AttrDef OpDef'AttrDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'hasMinimum
+              (\ x__ y__ -> x__{_OpDef'AttrDef'hasMinimum = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "minimum" f OpDef'AttrDef OpDef'AttrDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'minimum
+              (\ x__ y__ -> x__{_OpDef'AttrDef'minimum = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~ Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allowedValues" f OpDef'AttrDef OpDef'AttrDef a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'allowedValues
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.AttrValue.AttrValue,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'allowedValues" f OpDef'AttrDef
+           OpDef'AttrDef
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDef'AttrDef'allowedValues
+              (\ x__ y__ -> x__{_OpDef'AttrDef'allowedValues = y__})
+
+instance Data.Default.Class.Default OpDef'AttrDef where
+        def
+          = OpDef'AttrDef{_OpDef'AttrDef'name = Data.ProtoLens.fieldDefault,
+                          _OpDef'AttrDef'type' = Data.ProtoLens.fieldDefault,
+                          _OpDef'AttrDef'defaultValue = Prelude.Nothing,
+                          _OpDef'AttrDef'description = Data.ProtoLens.fieldDefault,
+                          _OpDef'AttrDef'hasMinimum = Data.ProtoLens.fieldDefault,
+                          _OpDef'AttrDef'minimum = Data.ProtoLens.fieldDefault,
+                          _OpDef'AttrDef'allowedValues = Prelude.Nothing}
+
+instance Data.ProtoLens.Message OpDef'AttrDef where
+        descriptor
+          = let name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                type'__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional type')
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                defaultValue__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "default_value"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)
+                      (Data.ProtoLens.OptionalField maybe'defaultValue)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                description__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "description"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional description)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                hasMinimum__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "has_minimum"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional hasMinimum)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                minimum__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "minimum"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional minimum)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+                allowedValues__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allowed_values"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AttrValue.AttrValue)
+                      (Data.ProtoLens.OptionalField maybe'allowedValues)
+                      :: Data.ProtoLens.FieldDescriptor OpDef'AttrDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, name__field_descriptor),
+                    (Data.ProtoLens.Tag 2, type'__field_descriptor),
+                    (Data.ProtoLens.Tag 3, defaultValue__field_descriptor),
+                    (Data.ProtoLens.Tag 4, description__field_descriptor),
+                    (Data.ProtoLens.Tag 5, hasMinimum__field_descriptor),
+                    (Data.ProtoLens.Tag 6, minimum__field_descriptor),
+                    (Data.ProtoLens.Tag 7, allowedValues__field_descriptor)])
+                (Data.Map.fromList
+                   [("name", name__field_descriptor),
+                    ("type", type'__field_descriptor),
+                    ("default_value", defaultValue__field_descriptor),
+                    ("description", description__field_descriptor),
+                    ("has_minimum", hasMinimum__field_descriptor),
+                    ("minimum", minimum__field_descriptor),
+                    ("allowed_values", allowedValues__field_descriptor)])
+
+data OpDeprecation = OpDeprecation{_OpDeprecation'version ::
+                                   !Data.Int.Int32,
+                                   _OpDeprecation'explanation :: !Data.Text.Text}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "version" f OpDeprecation OpDeprecation a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDeprecation'version
+              (\ x__ y__ -> x__{_OpDeprecation'version = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "explanation" f OpDeprecation OpDeprecation a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpDeprecation'explanation
+              (\ x__ y__ -> x__{_OpDeprecation'explanation = y__})
+
+instance Data.Default.Class.Default OpDeprecation where
+        def
+          = OpDeprecation{_OpDeprecation'version =
+                            Data.ProtoLens.fieldDefault,
+                          _OpDeprecation'explanation = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message OpDeprecation where
+        descriptor
+          = let version__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "version"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional version)
+                      :: Data.ProtoLens.FieldDescriptor OpDeprecation
+                explanation__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "explanation"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional explanation)
+                      :: Data.ProtoLens.FieldDescriptor OpDeprecation
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, version__field_descriptor),
+                    (Data.ProtoLens.Tag 2, explanation__field_descriptor)])
+                (Data.Map.fromList
+                   [("version", version__field_descriptor),
+                    ("explanation", explanation__field_descriptor)])
+
+data OpList = OpList{_OpList'op :: ![OpDef]}
+            deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [OpDef], b ~ [OpDef], Prelude.Functor f) =>
+         Lens.Labels.HasLens "op" f OpList OpList a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OpList'op
+              (\ x__ y__ -> x__{_OpList'op = y__})
+
+instance Data.Default.Class.Default OpList where
+        def = OpList{_OpList'op = []}
+
+instance Data.ProtoLens.Message OpList where
+        descriptor
+          = let op__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "op"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OpDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked op)
+                      :: Data.ProtoLens.FieldDescriptor OpList
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList [(Data.ProtoLens.Tag 1, op__field_descriptor)])
+                (Data.Map.fromList [("op", op__field_descriptor)])
+
+allowedValues ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "allowedValues" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+allowedValues
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allowedValues")
+
+allowsUninitializedInput ::
+                         forall f s t a b .
+                           (Lens.Labels.HasLens "allowsUninitializedInput" f s t a b) =>
+                           Lens.Family2.LensLike f s t a b
+allowsUninitializedInput
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "allowsUninitializedInput")
+
+attr ::
+     forall f s t a b . (Lens.Labels.HasLens "attr" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+attr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "attr")
+
+defaultValue ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "defaultValue" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+defaultValue
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "defaultValue")
+
+deprecation ::
+            forall f s t a b . (Lens.Labels.HasLens "deprecation" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+deprecation
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "deprecation")
+
+description ::
+            forall f s t a b . (Lens.Labels.HasLens "description" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+description
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "description")
+
+explanation ::
+            forall f s t a b . (Lens.Labels.HasLens "explanation" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+explanation
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "explanation")
+
+hasMinimum ::
+           forall f s t a b . (Lens.Labels.HasLens "hasMinimum" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+hasMinimum
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "hasMinimum")
+
+inputArg ::
+         forall f s t a b . (Lens.Labels.HasLens "inputArg" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+inputArg
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "inputArg")
+
+isAggregate ::
+            forall f s t a b . (Lens.Labels.HasLens "isAggregate" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+isAggregate
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "isAggregate")
+
+isCommutative ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "isCommutative" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+isCommutative
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "isCommutative")
+
+isRef ::
+      forall f s t a b . (Lens.Labels.HasLens "isRef" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+isRef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "isRef")
+
+isStateful ::
+           forall f s t a b . (Lens.Labels.HasLens "isStateful" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+isStateful
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "isStateful")
+
+maybe'allowedValues ::
+                    forall f s t a b .
+                      (Lens.Labels.HasLens "maybe'allowedValues" f s t a b) =>
+                      Lens.Family2.LensLike f s t a b
+maybe'allowedValues
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'allowedValues")
+
+maybe'defaultValue ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "maybe'defaultValue" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+maybe'defaultValue
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'defaultValue")
+
+maybe'deprecation ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "maybe'deprecation" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+maybe'deprecation
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'deprecation")
+
+minimum ::
+        forall f s t a b . (Lens.Labels.HasLens "minimum" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+minimum
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "minimum")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
+
+numberAttr ::
+           forall f s t a b . (Lens.Labels.HasLens "numberAttr" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+numberAttr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "numberAttr")
+
+op ::
+   forall f s t a b . (Lens.Labels.HasLens "op" f s t a b) =>
+     Lens.Family2.LensLike f s t a b
+op
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "op")
+
+outputArg ::
+          forall f s t a b . (Lens.Labels.HasLens "outputArg" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+outputArg
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "outputArg")
+
+summary ::
+        forall f s t a b . (Lens.Labels.HasLens "summary" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+summary
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "summary")
+
+type' ::
+      forall f s t a b . (Lens.Labels.HasLens "type'" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+type'
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "type'")
+
+typeAttr ::
+         forall f s t a b . (Lens.Labels.HasLens "typeAttr" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+typeAttr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "typeAttr")
+
+typeListAttr ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "typeListAttr" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+typeListAttr
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "typeListAttr")
+
+version ::
+        forall f s t a b . (Lens.Labels.HasLens "version" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+version
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "version")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/ResourceHandle.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/ResourceHandle.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/ResourceHandle.hs
@@ -0,0 +1,167 @@
+{- This file was auto-generated from tensorflow/core/framework/resource_handle.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.ResourceHandle where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data ResourceHandle = ResourceHandle{_ResourceHandle'device ::
+                                     !Data.Text.Text,
+                                     _ResourceHandle'container :: !Data.Text.Text,
+                                     _ResourceHandle'name :: !Data.Text.Text,
+                                     _ResourceHandle'hashCode :: !Data.Word.Word64,
+                                     _ResourceHandle'maybeTypeName :: !Data.Text.Text}
+                    deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "device" f ResourceHandle ResourceHandle a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ResourceHandle'device
+              (\ x__ y__ -> x__{_ResourceHandle'device = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "container" f ResourceHandle ResourceHandle a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ResourceHandle'container
+              (\ x__ y__ -> x__{_ResourceHandle'container = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f ResourceHandle ResourceHandle a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ResourceHandle'name
+              (\ x__ y__ -> x__{_ResourceHandle'name = y__})
+
+instance (a ~ Data.Word.Word64, b ~ Data.Word.Word64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "hashCode" f ResourceHandle ResourceHandle a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ResourceHandle'hashCode
+              (\ x__ y__ -> x__{_ResourceHandle'hashCode = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybeTypeName" f ResourceHandle ResourceHandle
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ResourceHandle'maybeTypeName
+              (\ x__ y__ -> x__{_ResourceHandle'maybeTypeName = y__})
+
+instance Data.Default.Class.Default ResourceHandle where
+        def
+          = ResourceHandle{_ResourceHandle'device =
+                             Data.ProtoLens.fieldDefault,
+                           _ResourceHandle'container = Data.ProtoLens.fieldDefault,
+                           _ResourceHandle'name = Data.ProtoLens.fieldDefault,
+                           _ResourceHandle'hashCode = Data.ProtoLens.fieldDefault,
+                           _ResourceHandle'maybeTypeName = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message ResourceHandle where
+        descriptor
+          = let device__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional device)
+                      :: Data.ProtoLens.FieldDescriptor ResourceHandle
+                container__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "container"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional container)
+                      :: Data.ProtoLens.FieldDescriptor ResourceHandle
+                name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor ResourceHandle
+                hashCode__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "hash_code"
+                      (Data.ProtoLens.UInt64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional hashCode)
+                      :: Data.ProtoLens.FieldDescriptor ResourceHandle
+                maybeTypeName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "maybe_type_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional maybeTypeName)
+                      :: Data.ProtoLens.FieldDescriptor ResourceHandle
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, device__field_descriptor),
+                    (Data.ProtoLens.Tag 2, container__field_descriptor),
+                    (Data.ProtoLens.Tag 3, name__field_descriptor),
+                    (Data.ProtoLens.Tag 4, hashCode__field_descriptor),
+                    (Data.ProtoLens.Tag 5, maybeTypeName__field_descriptor)])
+                (Data.Map.fromList
+                   [("device", device__field_descriptor),
+                    ("container", container__field_descriptor),
+                    ("name", name__field_descriptor),
+                    ("hash_code", hashCode__field_descriptor),
+                    ("maybe_type_name", maybeTypeName__field_descriptor)])
+
+container ::
+          forall f s t a b . (Lens.Labels.HasLens "container" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+container
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "container")
+
+device ::
+       forall f s t a b . (Lens.Labels.HasLens "device" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+device
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "device")
+
+hashCode ::
+         forall f s t a b . (Lens.Labels.HasLens "hashCode" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+hashCode
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "hashCode")
+
+maybeTypeName ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "maybeTypeName" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+maybeTypeName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybeTypeName")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/StepStats.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/StepStats.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/StepStats.hs
@@ -0,0 +1,638 @@
+{- This file was auto-generated from tensorflow/core/framework/step_stats.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.StepStats where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified
+       Proto.Tensorflow.Core.Framework.AllocationDescription
+import qualified Proto.Tensorflow.Core.Framework.TensorDescription
+
+data AllocatorMemoryUsed = AllocatorMemoryUsed{_AllocatorMemoryUsed'allocatorName
+                                               :: !Data.Text.Text,
+                                               _AllocatorMemoryUsed'totalBytes :: !Data.Int.Int64,
+                                               _AllocatorMemoryUsed'peakBytes :: !Data.Int.Int64}
+                         deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocatorName" f AllocatorMemoryUsed
+           AllocatorMemoryUsed
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocatorMemoryUsed'allocatorName
+              (\ x__ y__ -> x__{_AllocatorMemoryUsed'allocatorName = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "totalBytes" f AllocatorMemoryUsed
+           AllocatorMemoryUsed
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocatorMemoryUsed'totalBytes
+              (\ x__ y__ -> x__{_AllocatorMemoryUsed'totalBytes = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "peakBytes" f AllocatorMemoryUsed
+           AllocatorMemoryUsed
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _AllocatorMemoryUsed'peakBytes
+              (\ x__ y__ -> x__{_AllocatorMemoryUsed'peakBytes = y__})
+
+instance Data.Default.Class.Default AllocatorMemoryUsed where
+        def
+          = AllocatorMemoryUsed{_AllocatorMemoryUsed'allocatorName =
+                                  Data.ProtoLens.fieldDefault,
+                                _AllocatorMemoryUsed'totalBytes = Data.ProtoLens.fieldDefault,
+                                _AllocatorMemoryUsed'peakBytes = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message AllocatorMemoryUsed where
+        descriptor
+          = let allocatorName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocator_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allocatorName)
+                      :: Data.ProtoLens.FieldDescriptor AllocatorMemoryUsed
+                totalBytes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "total_bytes"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional totalBytes)
+                      :: Data.ProtoLens.FieldDescriptor AllocatorMemoryUsed
+                peakBytes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "peak_bytes"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional peakBytes)
+                      :: Data.ProtoLens.FieldDescriptor AllocatorMemoryUsed
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, allocatorName__field_descriptor),
+                    (Data.ProtoLens.Tag 2, totalBytes__field_descriptor),
+                    (Data.ProtoLens.Tag 3, peakBytes__field_descriptor)])
+                (Data.Map.fromList
+                   [("allocator_name", allocatorName__field_descriptor),
+                    ("total_bytes", totalBytes__field_descriptor),
+                    ("peak_bytes", peakBytes__field_descriptor)])
+
+data DeviceStepStats = DeviceStepStats{_DeviceStepStats'device ::
+                                       !Data.Text.Text,
+                                       _DeviceStepStats'nodeStats :: ![NodeExecStats]}
+                     deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "device" f DeviceStepStats DeviceStepStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DeviceStepStats'device
+              (\ x__ y__ -> x__{_DeviceStepStats'device = y__})
+
+instance (a ~ [NodeExecStats], b ~ [NodeExecStats],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "nodeStats" f DeviceStepStats DeviceStepStats a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DeviceStepStats'nodeStats
+              (\ x__ y__ -> x__{_DeviceStepStats'nodeStats = y__})
+
+instance Data.Default.Class.Default DeviceStepStats where
+        def
+          = DeviceStepStats{_DeviceStepStats'device =
+                              Data.ProtoLens.fieldDefault,
+                            _DeviceStepStats'nodeStats = []}
+
+instance Data.ProtoLens.Message DeviceStepStats where
+        descriptor
+          = let device__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional device)
+                      :: Data.ProtoLens.FieldDescriptor DeviceStepStats
+                nodeStats__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node_stats"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NodeExecStats)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked nodeStats)
+                      :: Data.ProtoLens.FieldDescriptor DeviceStepStats
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, device__field_descriptor),
+                    (Data.ProtoLens.Tag 2, nodeStats__field_descriptor)])
+                (Data.Map.fromList
+                   [("device", device__field_descriptor),
+                    ("node_stats", nodeStats__field_descriptor)])
+
+data NodeExecStats = NodeExecStats{_NodeExecStats'nodeName ::
+                                   !Data.Text.Text,
+                                   _NodeExecStats'allStartMicros :: !Data.Int.Int64,
+                                   _NodeExecStats'opStartRelMicros :: !Data.Int.Int64,
+                                   _NodeExecStats'opEndRelMicros :: !Data.Int.Int64,
+                                   _NodeExecStats'allEndRelMicros :: !Data.Int.Int64,
+                                   _NodeExecStats'memory :: ![AllocatorMemoryUsed],
+                                   _NodeExecStats'output :: ![NodeOutput],
+                                   _NodeExecStats'timelineLabel :: !Data.Text.Text,
+                                   _NodeExecStats'scheduledMicros :: !Data.Int.Int64,
+                                   _NodeExecStats'threadId :: !Data.Word.Word32,
+                                   _NodeExecStats'referencedTensor ::
+                                   ![Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription]}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "nodeName" f NodeExecStats NodeExecStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'nodeName
+              (\ x__ y__ -> x__{_NodeExecStats'nodeName = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allStartMicros" f NodeExecStats NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'allStartMicros
+              (\ x__ y__ -> x__{_NodeExecStats'allStartMicros = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "opStartRelMicros" f NodeExecStats
+           NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'opStartRelMicros
+              (\ x__ y__ -> x__{_NodeExecStats'opStartRelMicros = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "opEndRelMicros" f NodeExecStats NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'opEndRelMicros
+              (\ x__ y__ -> x__{_NodeExecStats'opEndRelMicros = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allEndRelMicros" f NodeExecStats NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'allEndRelMicros
+              (\ x__ y__ -> x__{_NodeExecStats'allEndRelMicros = y__})
+
+instance (a ~ [AllocatorMemoryUsed], b ~ [AllocatorMemoryUsed],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "memory" f NodeExecStats NodeExecStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'memory
+              (\ x__ y__ -> x__{_NodeExecStats'memory = y__})
+
+instance (a ~ [NodeOutput], b ~ [NodeOutput], Prelude.Functor f) =>
+         Lens.Labels.HasLens "output" f NodeExecStats NodeExecStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'output
+              (\ x__ y__ -> x__{_NodeExecStats'output = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "timelineLabel" f NodeExecStats NodeExecStats a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'timelineLabel
+              (\ x__ y__ -> x__{_NodeExecStats'timelineLabel = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "scheduledMicros" f NodeExecStats NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'scheduledMicros
+              (\ x__ y__ -> x__{_NodeExecStats'scheduledMicros = y__})
+
+instance (a ~ Data.Word.Word32, b ~ Data.Word.Word32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "threadId" f NodeExecStats NodeExecStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'threadId
+              (\ x__ y__ -> x__{_NodeExecStats'threadId = y__})
+
+instance (a ~
+            [Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription],
+          b ~
+            [Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "referencedTensor" f NodeExecStats
+           NodeExecStats
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeExecStats'referencedTensor
+              (\ x__ y__ -> x__{_NodeExecStats'referencedTensor = y__})
+
+instance Data.Default.Class.Default NodeExecStats where
+        def
+          = NodeExecStats{_NodeExecStats'nodeName =
+                            Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'allStartMicros = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'opStartRelMicros = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'opEndRelMicros = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'allEndRelMicros = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'memory = [], _NodeExecStats'output = [],
+                          _NodeExecStats'timelineLabel = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'scheduledMicros = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'threadId = Data.ProtoLens.fieldDefault,
+                          _NodeExecStats'referencedTensor = []}
+
+instance Data.ProtoLens.Message NodeExecStats where
+        descriptor
+          = let nodeName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional nodeName)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                allStartMicros__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "all_start_micros"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allStartMicros)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                opStartRelMicros__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "op_start_rel_micros"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         opStartRelMicros)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                opEndRelMicros__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "op_end_rel_micros"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional opEndRelMicros)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                allEndRelMicros__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "all_end_rel_micros"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allEndRelMicros)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                memory__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "memory"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor AllocatorMemoryUsed)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked memory)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                output__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "output"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor NodeOutput)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked output)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                timelineLabel__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "timeline_label"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional timelineLabel)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                scheduledMicros__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "scheduled_micros"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional scheduledMicros)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                threadId__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "thread_id"
+                      (Data.ProtoLens.UInt32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional threadId)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+                referencedTensor__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "referenced_tensor"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         referencedTensor)
+                      :: Data.ProtoLens.FieldDescriptor NodeExecStats
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, nodeName__field_descriptor),
+                    (Data.ProtoLens.Tag 2, allStartMicros__field_descriptor),
+                    (Data.ProtoLens.Tag 3, opStartRelMicros__field_descriptor),
+                    (Data.ProtoLens.Tag 4, opEndRelMicros__field_descriptor),
+                    (Data.ProtoLens.Tag 5, allEndRelMicros__field_descriptor),
+                    (Data.ProtoLens.Tag 6, memory__field_descriptor),
+                    (Data.ProtoLens.Tag 7, output__field_descriptor),
+                    (Data.ProtoLens.Tag 8, timelineLabel__field_descriptor),
+                    (Data.ProtoLens.Tag 9, scheduledMicros__field_descriptor),
+                    (Data.ProtoLens.Tag 10, threadId__field_descriptor),
+                    (Data.ProtoLens.Tag 11, referencedTensor__field_descriptor)])
+                (Data.Map.fromList
+                   [("node_name", nodeName__field_descriptor),
+                    ("all_start_micros", allStartMicros__field_descriptor),
+                    ("op_start_rel_micros", opStartRelMicros__field_descriptor),
+                    ("op_end_rel_micros", opEndRelMicros__field_descriptor),
+                    ("all_end_rel_micros", allEndRelMicros__field_descriptor),
+                    ("memory", memory__field_descriptor),
+                    ("output", output__field_descriptor),
+                    ("timeline_label", timelineLabel__field_descriptor),
+                    ("scheduled_micros", scheduledMicros__field_descriptor),
+                    ("thread_id", threadId__field_descriptor),
+                    ("referenced_tensor", referencedTensor__field_descriptor)])
+
+data NodeOutput = NodeOutput{_NodeOutput'slot :: !Data.Int.Int32,
+                             _NodeOutput'tensorDescription ::
+                             !(Prelude.Maybe
+                                 Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription)}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "slot" f NodeOutput NodeOutput a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeOutput'slot
+              (\ x__ y__ -> x__{_NodeOutput'slot = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription,
+          b ~
+            Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensorDescription" f NodeOutput NodeOutput a b
+         where
+        lensOf _
+          = (Prelude..) maybe'tensorDescription
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'tensorDescription" f NodeOutput
+           NodeOutput
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _NodeOutput'tensorDescription
+              (\ x__ y__ -> x__{_NodeOutput'tensorDescription = y__})
+
+instance Data.Default.Class.Default NodeOutput where
+        def
+          = NodeOutput{_NodeOutput'slot = Data.ProtoLens.fieldDefault,
+                       _NodeOutput'tensorDescription = Prelude.Nothing}
+
+instance Data.ProtoLens.Message NodeOutput where
+        descriptor
+          = let slot__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "slot"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional slot)
+                      :: Data.ProtoLens.FieldDescriptor NodeOutput
+                tensorDescription__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor_description"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorDescription.TensorDescription)
+                      (Data.ProtoLens.OptionalField maybe'tensorDescription)
+                      :: Data.ProtoLens.FieldDescriptor NodeOutput
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, slot__field_descriptor),
+                    (Data.ProtoLens.Tag 3, tensorDescription__field_descriptor)])
+                (Data.Map.fromList
+                   [("slot", slot__field_descriptor),
+                    ("tensor_description", tensorDescription__field_descriptor)])
+
+data StepStats = StepStats{_StepStats'devStats ::
+                           ![DeviceStepStats]}
+               deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [DeviceStepStats], b ~ [DeviceStepStats],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "devStats" f StepStats StepStats a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _StepStats'devStats
+              (\ x__ y__ -> x__{_StepStats'devStats = y__})
+
+instance Data.Default.Class.Default StepStats where
+        def = StepStats{_StepStats'devStats = []}
+
+instance Data.ProtoLens.Message StepStats where
+        descriptor
+          = let devStats__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dev_stats"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor DeviceStepStats)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked devStats)
+                      :: Data.ProtoLens.FieldDescriptor StepStats
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, devStats__field_descriptor)])
+                (Data.Map.fromList [("dev_stats", devStats__field_descriptor)])
+
+allEndRelMicros ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "allEndRelMicros" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+allEndRelMicros
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allEndRelMicros")
+
+allStartMicros ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "allStartMicros" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+allStartMicros
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allStartMicros")
+
+allocatorName ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "allocatorName" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+allocatorName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allocatorName")
+
+devStats ::
+         forall f s t a b . (Lens.Labels.HasLens "devStats" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+devStats
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "devStats")
+
+device ::
+       forall f s t a b . (Lens.Labels.HasLens "device" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+device
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "device")
+
+maybe'tensorDescription ::
+                        forall f s t a b .
+                          (Lens.Labels.HasLens "maybe'tensorDescription" f s t a b) =>
+                          Lens.Family2.LensLike f s t a b
+maybe'tensorDescription
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'tensorDescription")
+
+memory ::
+       forall f s t a b . (Lens.Labels.HasLens "memory" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+memory
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "memory")
+
+nodeName ::
+         forall f s t a b . (Lens.Labels.HasLens "nodeName" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+nodeName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeName")
+
+nodeStats ::
+          forall f s t a b . (Lens.Labels.HasLens "nodeStats" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+nodeStats
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeStats")
+
+opEndRelMicros ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "opEndRelMicros" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+opEndRelMicros
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "opEndRelMicros")
+
+opStartRelMicros ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "opStartRelMicros" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+opStartRelMicros
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "opStartRelMicros")
+
+output ::
+       forall f s t a b . (Lens.Labels.HasLens "output" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+output
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "output")
+
+peakBytes ::
+          forall f s t a b . (Lens.Labels.HasLens "peakBytes" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+peakBytes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "peakBytes")
+
+referencedTensor ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "referencedTensor" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+referencedTensor
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "referencedTensor")
+
+scheduledMicros ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "scheduledMicros" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+scheduledMicros
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "scheduledMicros")
+
+slot ::
+     forall f s t a b . (Lens.Labels.HasLens "slot" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+slot
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "slot")
+
+tensorDescription ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "tensorDescription" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+tensorDescription
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tensorDescription")
+
+threadId ::
+         forall f s t a b . (Lens.Labels.HasLens "threadId" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+threadId
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "threadId")
+
+timelineLabel ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "timelineLabel" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+timelineLabel
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "timelineLabel")
+
+totalBytes ::
+           forall f s t a b . (Lens.Labels.HasLens "totalBytes" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+totalBytes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "totalBytes")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Summary.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Summary.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Summary.hs
@@ -0,0 +1,887 @@
+{- This file was auto-generated from tensorflow/core/framework/summary.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Summary where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.Tensor
+
+data HistogramProto = HistogramProto{_HistogramProto'min ::
+                                     !Prelude.Double,
+                                     _HistogramProto'max :: !Prelude.Double,
+                                     _HistogramProto'num :: !Prelude.Double,
+                                     _HistogramProto'sum :: !Prelude.Double,
+                                     _HistogramProto'sumSquares :: !Prelude.Double,
+                                     _HistogramProto'bucketLimit :: ![Prelude.Double],
+                                     _HistogramProto'bucket :: ![Prelude.Double]}
+                    deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "min" f HistogramProto HistogramProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'min
+              (\ x__ y__ -> x__{_HistogramProto'min = y__})
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "max" f HistogramProto HistogramProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'max
+              (\ x__ y__ -> x__{_HistogramProto'max = y__})
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "num" f HistogramProto HistogramProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'num
+              (\ x__ y__ -> x__{_HistogramProto'num = y__})
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "sum" f HistogramProto HistogramProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'sum
+              (\ x__ y__ -> x__{_HistogramProto'sum = y__})
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "sumSquares" f HistogramProto HistogramProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'sumSquares
+              (\ x__ y__ -> x__{_HistogramProto'sumSquares = y__})
+
+instance (a ~ [Prelude.Double], b ~ [Prelude.Double],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "bucketLimit" f HistogramProto HistogramProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'bucketLimit
+              (\ x__ y__ -> x__{_HistogramProto'bucketLimit = y__})
+
+instance (a ~ [Prelude.Double], b ~ [Prelude.Double],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "bucket" f HistogramProto HistogramProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _HistogramProto'bucket
+              (\ x__ y__ -> x__{_HistogramProto'bucket = y__})
+
+instance Data.Default.Class.Default HistogramProto where
+        def
+          = HistogramProto{_HistogramProto'min = Data.ProtoLens.fieldDefault,
+                           _HistogramProto'max = Data.ProtoLens.fieldDefault,
+                           _HistogramProto'num = Data.ProtoLens.fieldDefault,
+                           _HistogramProto'sum = Data.ProtoLens.fieldDefault,
+                           _HistogramProto'sumSquares = Data.ProtoLens.fieldDefault,
+                           _HistogramProto'bucketLimit = [], _HistogramProto'bucket = []}
+
+instance Data.ProtoLens.Message HistogramProto where
+        descriptor
+          = let min__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "min"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional min)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                max__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "max"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional max)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                num__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "num"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional num)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                sum__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "sum"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional sum)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                sumSquares__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "sum_squares"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional sumSquares)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                bucketLimit__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "bucket_limit"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed bucketLimit)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+                bucket__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "bucket"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed bucket)
+                      :: Data.ProtoLens.FieldDescriptor HistogramProto
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, min__field_descriptor),
+                    (Data.ProtoLens.Tag 2, max__field_descriptor),
+                    (Data.ProtoLens.Tag 3, num__field_descriptor),
+                    (Data.ProtoLens.Tag 4, sum__field_descriptor),
+                    (Data.ProtoLens.Tag 5, sumSquares__field_descriptor),
+                    (Data.ProtoLens.Tag 6, bucketLimit__field_descriptor),
+                    (Data.ProtoLens.Tag 7, bucket__field_descriptor)])
+                (Data.Map.fromList
+                   [("min", min__field_descriptor), ("max", max__field_descriptor),
+                    ("num", num__field_descriptor), ("sum", sum__field_descriptor),
+                    ("sum_squares", sumSquares__field_descriptor),
+                    ("bucket_limit", bucketLimit__field_descriptor),
+                    ("bucket", bucket__field_descriptor)])
+
+data Summary = Summary{_Summary'value :: ![Summary'Value]}
+             deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [Summary'Value], b ~ [Summary'Value],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f Summary Summary a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'value
+              (\ x__ y__ -> x__{_Summary'value = y__})
+
+instance Data.Default.Class.Default Summary where
+        def = Summary{_Summary'value = []}
+
+instance Data.ProtoLens.Message Summary where
+        descriptor
+          = let value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor Summary'Value)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked value)
+                      :: Data.ProtoLens.FieldDescriptor Summary
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, value__field_descriptor)])
+                (Data.Map.fromList [("value", value__field_descriptor)])
+
+data Summary'Audio = Summary'Audio{_Summary'Audio'sampleRate ::
+                                   !Prelude.Float,
+                                   _Summary'Audio'numChannels :: !Data.Int.Int64,
+                                   _Summary'Audio'lengthFrames :: !Data.Int.Int64,
+                                   _Summary'Audio'encodedAudioString :: !Data.ByteString.ByteString,
+                                   _Summary'Audio'contentType :: !Data.Text.Text}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Float, b ~ Prelude.Float,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "sampleRate" f Summary'Audio Summary'Audio a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Audio'sampleRate
+              (\ x__ y__ -> x__{_Summary'Audio'sampleRate = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "numChannels" f Summary'Audio Summary'Audio a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Audio'numChannels
+              (\ x__ y__ -> x__{_Summary'Audio'numChannels = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "lengthFrames" f Summary'Audio Summary'Audio a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Audio'lengthFrames
+              (\ x__ y__ -> x__{_Summary'Audio'lengthFrames = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "encodedAudioString" f Summary'Audio
+           Summary'Audio
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Audio'encodedAudioString
+              (\ x__ y__ -> x__{_Summary'Audio'encodedAudioString = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "contentType" f Summary'Audio Summary'Audio a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Audio'contentType
+              (\ x__ y__ -> x__{_Summary'Audio'contentType = y__})
+
+instance Data.Default.Class.Default Summary'Audio where
+        def
+          = Summary'Audio{_Summary'Audio'sampleRate =
+                            Data.ProtoLens.fieldDefault,
+                          _Summary'Audio'numChannels = Data.ProtoLens.fieldDefault,
+                          _Summary'Audio'lengthFrames = Data.ProtoLens.fieldDefault,
+                          _Summary'Audio'encodedAudioString = Data.ProtoLens.fieldDefault,
+                          _Summary'Audio'contentType = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message Summary'Audio where
+        descriptor
+          = let sampleRate__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "sample_rate"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional sampleRate)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Audio
+                numChannels__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "num_channels"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional numChannels)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Audio
+                lengthFrames__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "length_frames"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional lengthFrames)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Audio
+                encodedAudioString__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "encoded_audio_string"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         encodedAudioString)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Audio
+                contentType__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "content_type"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional contentType)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Audio
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, sampleRate__field_descriptor),
+                    (Data.ProtoLens.Tag 2, numChannels__field_descriptor),
+                    (Data.ProtoLens.Tag 3, lengthFrames__field_descriptor),
+                    (Data.ProtoLens.Tag 4, encodedAudioString__field_descriptor),
+                    (Data.ProtoLens.Tag 5, contentType__field_descriptor)])
+                (Data.Map.fromList
+                   [("sample_rate", sampleRate__field_descriptor),
+                    ("num_channels", numChannels__field_descriptor),
+                    ("length_frames", lengthFrames__field_descriptor),
+                    ("encoded_audio_string", encodedAudioString__field_descriptor),
+                    ("content_type", contentType__field_descriptor)])
+
+data Summary'Image = Summary'Image{_Summary'Image'height ::
+                                   !Data.Int.Int32,
+                                   _Summary'Image'width :: !Data.Int.Int32,
+                                   _Summary'Image'colorspace :: !Data.Int.Int32,
+                                   _Summary'Image'encodedImageString :: !Data.ByteString.ByteString}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "height" f Summary'Image Summary'Image a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Image'height
+              (\ x__ y__ -> x__{_Summary'Image'height = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "width" f Summary'Image Summary'Image a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Image'width
+              (\ x__ y__ -> x__{_Summary'Image'width = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "colorspace" f Summary'Image Summary'Image a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Image'colorspace
+              (\ x__ y__ -> x__{_Summary'Image'colorspace = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "encodedImageString" f Summary'Image
+           Summary'Image
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Image'encodedImageString
+              (\ x__ y__ -> x__{_Summary'Image'encodedImageString = y__})
+
+instance Data.Default.Class.Default Summary'Image where
+        def
+          = Summary'Image{_Summary'Image'height =
+                            Data.ProtoLens.fieldDefault,
+                          _Summary'Image'width = Data.ProtoLens.fieldDefault,
+                          _Summary'Image'colorspace = Data.ProtoLens.fieldDefault,
+                          _Summary'Image'encodedImageString = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message Summary'Image where
+        descriptor
+          = let height__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "height"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional height)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Image
+                width__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "width"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional width)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Image
+                colorspace__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "colorspace"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional colorspace)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Image
+                encodedImageString__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "encoded_image_string"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         encodedImageString)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Image
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, height__field_descriptor),
+                    (Data.ProtoLens.Tag 2, width__field_descriptor),
+                    (Data.ProtoLens.Tag 3, colorspace__field_descriptor),
+                    (Data.ProtoLens.Tag 4, encodedImageString__field_descriptor)])
+                (Data.Map.fromList
+                   [("height", height__field_descriptor),
+                    ("width", width__field_descriptor),
+                    ("colorspace", colorspace__field_descriptor),
+                    ("encoded_image_string", encodedImageString__field_descriptor)])
+
+data Summary'Value = Summary'Value{_Summary'Value'nodeName ::
+                                   !Data.Text.Text,
+                                   _Summary'Value'tag :: !Data.Text.Text,
+                                   _Summary'Value'simpleValue :: !(Prelude.Maybe Prelude.Float),
+                                   _Summary'Value'obsoleteOldStyleHistogram ::
+                                   !(Prelude.Maybe Data.ByteString.ByteString),
+                                   _Summary'Value'image :: !(Prelude.Maybe Summary'Image),
+                                   _Summary'Value'histo :: !(Prelude.Maybe HistogramProto),
+                                   _Summary'Value'audio :: !(Prelude.Maybe Summary'Audio),
+                                   _Summary'Value'tensor ::
+                                   !(Prelude.Maybe
+                                       Proto.Tensorflow.Core.Framework.Tensor.TensorProto)}
+                   deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "nodeName" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'nodeName
+              (\ x__ y__ -> x__{_Summary'Value'nodeName = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tag" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'tag
+              (\ x__ y__ -> x__{_Summary'Value'tag = y__})
+
+instance (a ~ Prelude.Float, b ~ Prelude.Float,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "simpleValue" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = (Prelude..) maybe'simpleValue
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Prelude.Float,
+          b ~ Prelude.Maybe Prelude.Float, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'simpleValue" f Summary'Value
+           Summary'Value
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'simpleValue
+              (\ x__ y__ -> x__{_Summary'Value'simpleValue = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "obsoleteOldStyleHistogram" f Summary'Value
+           Summary'Value
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'obsoleteOldStyleHistogram
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.ByteString.ByteString,
+          b ~ Prelude.Maybe Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'obsoleteOldStyleHistogram" f
+           Summary'Value
+           Summary'Value
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _Summary'Value'obsoleteOldStyleHistogram
+              (\ x__ y__ -> x__{_Summary'Value'obsoleteOldStyleHistogram = y__})
+
+instance (a ~ Summary'Image, b ~ Summary'Image,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "image" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = (Prelude..) maybe'image
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe Summary'Image,
+          b ~ Prelude.Maybe Summary'Image, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'image" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'image
+              (\ x__ y__ -> x__{_Summary'Value'image = y__})
+
+instance (a ~ HistogramProto, b ~ HistogramProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "histo" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = (Prelude..) maybe'histo
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe HistogramProto,
+          b ~ Prelude.Maybe HistogramProto, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'histo" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'histo
+              (\ x__ y__ -> x__{_Summary'Value'histo = y__})
+
+instance (a ~ Summary'Audio, b ~ Summary'Audio,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "audio" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = (Prelude..) maybe'audio
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe Summary'Audio,
+          b ~ Prelude.Maybe Summary'Audio, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'audio" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'audio
+              (\ x__ y__ -> x__{_Summary'Value'audio = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          b ~ Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensor" f Summary'Value Summary'Value a b
+         where
+        lensOf _
+          = (Prelude..) maybe'tensor
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Tensor.TensorProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'tensor" f Summary'Value Summary'Value a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Summary'Value'tensor
+              (\ x__ y__ -> x__{_Summary'Value'tensor = y__})
+
+instance Data.Default.Class.Default Summary'Value where
+        def
+          = Summary'Value{_Summary'Value'nodeName =
+                            Data.ProtoLens.fieldDefault,
+                          _Summary'Value'tag = Data.ProtoLens.fieldDefault,
+                          _Summary'Value'simpleValue = Prelude.Nothing,
+                          _Summary'Value'obsoleteOldStyleHistogram = Prelude.Nothing,
+                          _Summary'Value'image = Prelude.Nothing,
+                          _Summary'Value'histo = Prelude.Nothing,
+                          _Summary'Value'audio = Prelude.Nothing,
+                          _Summary'Value'tensor = Prelude.Nothing}
+
+instance Data.ProtoLens.Message Summary'Value where
+        descriptor
+          = let nodeName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional nodeName)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                tag__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tag"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional tag)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                simpleValue__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "simple_value"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.OptionalField maybe'simpleValue)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                obsoleteOldStyleHistogram__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "obsolete_old_style_histogram"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.OptionalField maybe'obsoleteOldStyleHistogram)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                image__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "image"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor Summary'Image)
+                      (Data.ProtoLens.OptionalField maybe'image)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                histo__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "histo"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor HistogramProto)
+                      (Data.ProtoLens.OptionalField maybe'histo)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                audio__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "audio"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor Summary'Audio)
+                      (Data.ProtoLens.OptionalField maybe'audio)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+                tensor__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Tensor.TensorProto)
+                      (Data.ProtoLens.OptionalField maybe'tensor)
+                      :: Data.ProtoLens.FieldDescriptor Summary'Value
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 7, nodeName__field_descriptor),
+                    (Data.ProtoLens.Tag 1, tag__field_descriptor),
+                    (Data.ProtoLens.Tag 2, simpleValue__field_descriptor),
+                    (Data.ProtoLens.Tag 3,
+                     obsoleteOldStyleHistogram__field_descriptor),
+                    (Data.ProtoLens.Tag 4, image__field_descriptor),
+                    (Data.ProtoLens.Tag 5, histo__field_descriptor),
+                    (Data.ProtoLens.Tag 6, audio__field_descriptor),
+                    (Data.ProtoLens.Tag 8, tensor__field_descriptor)])
+                (Data.Map.fromList
+                   [("node_name", nodeName__field_descriptor),
+                    ("tag", tag__field_descriptor),
+                    ("simple_value", simpleValue__field_descriptor),
+                    ("obsolete_old_style_histogram",
+                     obsoleteOldStyleHistogram__field_descriptor),
+                    ("image", image__field_descriptor),
+                    ("histo", histo__field_descriptor),
+                    ("audio", audio__field_descriptor),
+                    ("tensor", tensor__field_descriptor)])
+
+data SummaryDescription = SummaryDescription{_SummaryDescription'typeHint
+                                             :: !Data.Text.Text}
+                        deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "typeHint" f SummaryDescription
+           SummaryDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _SummaryDescription'typeHint
+              (\ x__ y__ -> x__{_SummaryDescription'typeHint = y__})
+
+instance Data.Default.Class.Default SummaryDescription where
+        def
+          = SummaryDescription{_SummaryDescription'typeHint =
+                                 Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message SummaryDescription where
+        descriptor
+          = let typeHint__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "type_hint"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional typeHint)
+                      :: Data.ProtoLens.FieldDescriptor SummaryDescription
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, typeHint__field_descriptor)])
+                (Data.Map.fromList [("type_hint", typeHint__field_descriptor)])
+
+audio ::
+      forall f s t a b . (Lens.Labels.HasLens "audio" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+audio
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "audio")
+
+bucket ::
+       forall f s t a b . (Lens.Labels.HasLens "bucket" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+bucket
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "bucket")
+
+bucketLimit ::
+            forall f s t a b . (Lens.Labels.HasLens "bucketLimit" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+bucketLimit
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "bucketLimit")
+
+colorspace ::
+           forall f s t a b . (Lens.Labels.HasLens "colorspace" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+colorspace
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "colorspace")
+
+contentType ::
+            forall f s t a b . (Lens.Labels.HasLens "contentType" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+contentType
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "contentType")
+
+encodedAudioString ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "encodedAudioString" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+encodedAudioString
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "encodedAudioString")
+
+encodedImageString ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "encodedImageString" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+encodedImageString
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "encodedImageString")
+
+height ::
+       forall f s t a b . (Lens.Labels.HasLens "height" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+height
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "height")
+
+histo ::
+      forall f s t a b . (Lens.Labels.HasLens "histo" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+histo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "histo")
+
+image ::
+      forall f s t a b . (Lens.Labels.HasLens "image" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+image
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "image")
+
+lengthFrames ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "lengthFrames" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+lengthFrames
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "lengthFrames")
+
+max ::
+    forall f s t a b . (Lens.Labels.HasLens "max" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+max
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "max")
+
+maybe'audio ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'audio" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'audio
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'audio")
+
+maybe'histo ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'histo" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'histo
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'histo")
+
+maybe'image ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'image" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'image
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'image")
+
+maybe'obsoleteOldStyleHistogram ::
+                                forall f s t a b .
+                                  (Lens.Labels.HasLens "maybe'obsoleteOldStyleHistogram" f s t a
+                                     b) =>
+                                  Lens.Family2.LensLike f s t a b
+maybe'obsoleteOldStyleHistogram
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'obsoleteOldStyleHistogram")
+
+maybe'simpleValue ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "maybe'simpleValue" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+maybe'simpleValue
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'simpleValue")
+
+maybe'tensor ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "maybe'tensor" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+maybe'tensor
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'tensor")
+
+min ::
+    forall f s t a b . (Lens.Labels.HasLens "min" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+min
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "min")
+
+nodeName ::
+         forall f s t a b . (Lens.Labels.HasLens "nodeName" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+nodeName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeName")
+
+num ::
+    forall f s t a b . (Lens.Labels.HasLens "num" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+num
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "num")
+
+numChannels ::
+            forall f s t a b . (Lens.Labels.HasLens "numChannels" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+numChannels
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "numChannels")
+
+obsoleteOldStyleHistogram ::
+                          forall f s t a b .
+                            (Lens.Labels.HasLens "obsoleteOldStyleHistogram" f s t a b) =>
+                            Lens.Family2.LensLike f s t a b
+obsoleteOldStyleHistogram
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "obsoleteOldStyleHistogram")
+
+sampleRate ::
+           forall f s t a b . (Lens.Labels.HasLens "sampleRate" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+sampleRate
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "sampleRate")
+
+simpleValue ::
+            forall f s t a b . (Lens.Labels.HasLens "simpleValue" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+simpleValue
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "simpleValue")
+
+sum ::
+    forall f s t a b . (Lens.Labels.HasLens "sum" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+sum
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "sum")
+
+sumSquares ::
+           forall f s t a b . (Lens.Labels.HasLens "sumSquares" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+sumSquares
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "sumSquares")
+
+tag ::
+    forall f s t a b . (Lens.Labels.HasLens "tag" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+tag
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tag")
+
+tensor ::
+       forall f s t a b . (Lens.Labels.HasLens "tensor" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+tensor
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tensor")
+
+typeHint ::
+         forall f s t a b . (Lens.Labels.HasLens "typeHint" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+typeHint
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "typeHint")
+
+value ::
+      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")
+
+width ::
+      forall f s t a b . (Lens.Labels.HasLens "width" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+width
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "width")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Tensor.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Tensor.hs
@@ -0,0 +1,425 @@
+{- This file was auto-generated from tensorflow/core/framework/tensor.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Tensor where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.ResourceHandle
+import qualified Proto.Tensorflow.Core.Framework.TensorShape
+import qualified Proto.Tensorflow.Core.Framework.Types
+
+data TensorProto = TensorProto{_TensorProto'dtype ::
+                               !Proto.Tensorflow.Core.Framework.Types.DataType,
+                               _TensorProto'tensorShape ::
+                               !(Prelude.Maybe
+                                   Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto),
+                               _TensorProto'versionNumber :: !Data.Int.Int32,
+                               _TensorProto'tensorContent :: !Data.ByteString.ByteString,
+                               _TensorProto'halfVal :: ![Data.Int.Int32],
+                               _TensorProto'floatVal :: ![Prelude.Float],
+                               _TensorProto'doubleVal :: ![Prelude.Double],
+                               _TensorProto'intVal :: ![Data.Int.Int32],
+                               _TensorProto'stringVal :: ![Data.ByteString.ByteString],
+                               _TensorProto'scomplexVal :: ![Prelude.Float],
+                               _TensorProto'int64Val :: ![Data.Int.Int64],
+                               _TensorProto'boolVal :: ![Prelude.Bool],
+                               _TensorProto'dcomplexVal :: ![Prelude.Double],
+                               _TensorProto'resourceHandleVal ::
+                               ![Proto.Tensorflow.Core.Framework.ResourceHandle.ResourceHandle]}
+                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "dtype" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'dtype
+              (\ x__ y__ -> x__{_TensorProto'dtype = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~ Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensorShape" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = (Prelude..) maybe'tensorShape
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'tensorShape" f TensorProto TensorProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'tensorShape
+              (\ x__ y__ -> x__{_TensorProto'tensorShape = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "versionNumber" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'versionNumber
+              (\ x__ y__ -> x__{_TensorProto'versionNumber = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "tensorContent" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'tensorContent
+              (\ x__ y__ -> x__{_TensorProto'tensorContent = y__})
+
+instance (a ~ [Data.Int.Int32], b ~ [Data.Int.Int32],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "halfVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'halfVal
+              (\ x__ y__ -> x__{_TensorProto'halfVal = y__})
+
+instance (a ~ [Prelude.Float], b ~ [Prelude.Float],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "floatVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'floatVal
+              (\ x__ y__ -> x__{_TensorProto'floatVal = y__})
+
+instance (a ~ [Prelude.Double], b ~ [Prelude.Double],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "doubleVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'doubleVal
+              (\ x__ y__ -> x__{_TensorProto'doubleVal = y__})
+
+instance (a ~ [Data.Int.Int32], b ~ [Data.Int.Int32],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "intVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'intVal
+              (\ x__ y__ -> x__{_TensorProto'intVal = y__})
+
+instance (a ~ [Data.ByteString.ByteString],
+          b ~ [Data.ByteString.ByteString], Prelude.Functor f) =>
+         Lens.Labels.HasLens "stringVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'stringVal
+              (\ x__ y__ -> x__{_TensorProto'stringVal = y__})
+
+instance (a ~ [Prelude.Float], b ~ [Prelude.Float],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "scomplexVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'scomplexVal
+              (\ x__ y__ -> x__{_TensorProto'scomplexVal = y__})
+
+instance (a ~ [Data.Int.Int64], b ~ [Data.Int.Int64],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "int64Val" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'int64Val
+              (\ x__ y__ -> x__{_TensorProto'int64Val = y__})
+
+instance (a ~ [Prelude.Bool], b ~ [Prelude.Bool],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "boolVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'boolVal
+              (\ x__ y__ -> x__{_TensorProto'boolVal = y__})
+
+instance (a ~ [Prelude.Double], b ~ [Prelude.Double],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "dcomplexVal" f TensorProto TensorProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'dcomplexVal
+              (\ x__ y__ -> x__{_TensorProto'dcomplexVal = y__})
+
+instance (a ~
+            [Proto.Tensorflow.Core.Framework.ResourceHandle.ResourceHandle],
+          b ~
+            [Proto.Tensorflow.Core.Framework.ResourceHandle.ResourceHandle],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "resourceHandleVal" f TensorProto TensorProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorProto'resourceHandleVal
+              (\ x__ y__ -> x__{_TensorProto'resourceHandleVal = y__})
+
+instance Data.Default.Class.Default TensorProto where
+        def
+          = TensorProto{_TensorProto'dtype = Data.Default.Class.def,
+                        _TensorProto'tensorShape = Prelude.Nothing,
+                        _TensorProto'versionNumber = Data.ProtoLens.fieldDefault,
+                        _TensorProto'tensorContent = Data.ProtoLens.fieldDefault,
+                        _TensorProto'halfVal = [], _TensorProto'floatVal = [],
+                        _TensorProto'doubleVal = [], _TensorProto'intVal = [],
+                        _TensorProto'stringVal = [], _TensorProto'scomplexVal = [],
+                        _TensorProto'int64Val = [], _TensorProto'boolVal = [],
+                        _TensorProto'dcomplexVal = [], _TensorProto'resourceHandleVal = []}
+
+instance Data.ProtoLens.Message TensorProto where
+        descriptor
+          = let dtype__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dtype"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional dtype)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                tensorShape__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor_shape"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto)
+                      (Data.ProtoLens.OptionalField maybe'tensorShape)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                versionNumber__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "version_number"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional versionNumber)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                tensorContent__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tensor_content"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional tensorContent)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                halfVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "half_val"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed halfVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                floatVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "float_val"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed floatVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                doubleVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "double_val"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed doubleVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                intVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "int_val"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed intVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                stringVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "string_val"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked stringVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                scomplexVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "scomplex_val"
+                      (Data.ProtoLens.FloatField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed scomplexVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                int64Val__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "int64_val"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed int64Val)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                boolVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "bool_val"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed boolVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                dcomplexVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dcomplex_val"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed dcomplexVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+                resourceHandleVal__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "resource_handle_val"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.ResourceHandle.ResourceHandle)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         resourceHandleVal)
+                      :: Data.ProtoLens.FieldDescriptor TensorProto
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, dtype__field_descriptor),
+                    (Data.ProtoLens.Tag 2, tensorShape__field_descriptor),
+                    (Data.ProtoLens.Tag 3, versionNumber__field_descriptor),
+                    (Data.ProtoLens.Tag 4, tensorContent__field_descriptor),
+                    (Data.ProtoLens.Tag 13, halfVal__field_descriptor),
+                    (Data.ProtoLens.Tag 5, floatVal__field_descriptor),
+                    (Data.ProtoLens.Tag 6, doubleVal__field_descriptor),
+                    (Data.ProtoLens.Tag 7, intVal__field_descriptor),
+                    (Data.ProtoLens.Tag 8, stringVal__field_descriptor),
+                    (Data.ProtoLens.Tag 9, scomplexVal__field_descriptor),
+                    (Data.ProtoLens.Tag 10, int64Val__field_descriptor),
+                    (Data.ProtoLens.Tag 11, boolVal__field_descriptor),
+                    (Data.ProtoLens.Tag 12, dcomplexVal__field_descriptor),
+                    (Data.ProtoLens.Tag 14, resourceHandleVal__field_descriptor)])
+                (Data.Map.fromList
+                   [("dtype", dtype__field_descriptor),
+                    ("tensor_shape", tensorShape__field_descriptor),
+                    ("version_number", versionNumber__field_descriptor),
+                    ("tensor_content", tensorContent__field_descriptor),
+                    ("half_val", halfVal__field_descriptor),
+                    ("float_val", floatVal__field_descriptor),
+                    ("double_val", doubleVal__field_descriptor),
+                    ("int_val", intVal__field_descriptor),
+                    ("string_val", stringVal__field_descriptor),
+                    ("scomplex_val", scomplexVal__field_descriptor),
+                    ("int64_val", int64Val__field_descriptor),
+                    ("bool_val", boolVal__field_descriptor),
+                    ("dcomplex_val", dcomplexVal__field_descriptor),
+                    ("resource_handle_val", resourceHandleVal__field_descriptor)])
+
+boolVal ::
+        forall f s t a b . (Lens.Labels.HasLens "boolVal" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+boolVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "boolVal")
+
+dcomplexVal ::
+            forall f s t a b . (Lens.Labels.HasLens "dcomplexVal" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+dcomplexVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "dcomplexVal")
+
+doubleVal ::
+          forall f s t a b . (Lens.Labels.HasLens "doubleVal" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+doubleVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "doubleVal")
+
+dtype ::
+      forall f s t a b . (Lens.Labels.HasLens "dtype" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+dtype
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "dtype")
+
+floatVal ::
+         forall f s t a b . (Lens.Labels.HasLens "floatVal" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+floatVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "floatVal")
+
+halfVal ::
+        forall f s t a b . (Lens.Labels.HasLens "halfVal" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+halfVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "halfVal")
+
+int64Val ::
+         forall f s t a b . (Lens.Labels.HasLens "int64Val" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+int64Val
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "int64Val")
+
+intVal ::
+       forall f s t a b . (Lens.Labels.HasLens "intVal" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+intVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "intVal")
+
+maybe'tensorShape ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "maybe'tensorShape" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+maybe'tensorShape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'tensorShape")
+
+resourceHandleVal ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "resourceHandleVal" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+resourceHandleVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "resourceHandleVal")
+
+scomplexVal ::
+            forall f s t a b . (Lens.Labels.HasLens "scomplexVal" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+scomplexVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "scomplexVal")
+
+stringVal ::
+          forall f s t a b . (Lens.Labels.HasLens "stringVal" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+stringVal
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "stringVal")
+
+tensorContent ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "tensorContent" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+tensorContent
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tensorContent")
+
+tensorShape ::
+            forall f s t a b . (Lens.Labels.HasLens "tensorShape" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+tensorShape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tensorShape")
+
+versionNumber ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "versionNumber" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+versionNumber
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "versionNumber")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorDescription.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorDescription.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorDescription.hs
@@ -0,0 +1,189 @@
+{- This file was auto-generated from tensorflow/core/framework/tensor_description.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.TensorDescription where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified
+       Proto.Tensorflow.Core.Framework.AllocationDescription
+import qualified Proto.Tensorflow.Core.Framework.TensorShape
+import qualified Proto.Tensorflow.Core.Framework.Types
+
+data TensorDescription = TensorDescription{_TensorDescription'dtype
+                                           :: !Proto.Tensorflow.Core.Framework.Types.DataType,
+                                           _TensorDescription'shape ::
+                                           !(Prelude.Maybe
+                                               Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto),
+                                           _TensorDescription'allocationDescription ::
+                                           !(Prelude.Maybe
+                                               Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription)}
+                       deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          b ~ Proto.Tensorflow.Core.Framework.Types.DataType,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "dtype" f TensorDescription TensorDescription a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorDescription'dtype
+              (\ x__ y__ -> x__{_TensorDescription'dtype = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~ Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "shape" f TensorDescription TensorDescription a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'shape
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'shape" f TensorDescription
+           TensorDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorDescription'shape
+              (\ x__ y__ -> x__{_TensorDescription'shape = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription,
+          b ~
+            Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocationDescription" f TensorDescription
+           TensorDescription
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'allocationDescription
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'allocationDescription" f
+           TensorDescription
+           TensorDescription
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _TensorDescription'allocationDescription
+              (\ x__ y__ -> x__{_TensorDescription'allocationDescription = y__})
+
+instance Data.Default.Class.Default TensorDescription where
+        def
+          = TensorDescription{_TensorDescription'dtype =
+                                Data.Default.Class.def,
+                              _TensorDescription'shape = Prelude.Nothing,
+                              _TensorDescription'allocationDescription = Prelude.Nothing}
+
+instance Data.ProtoLens.Message TensorDescription where
+        descriptor
+          = let dtype__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dtype"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Types.DataType)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional dtype)
+                      :: Data.ProtoLens.FieldDescriptor TensorDescription
+                shape__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "shape"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.TensorShape.TensorShapeProto)
+                      (Data.ProtoLens.OptionalField maybe'shape)
+                      :: Data.ProtoLens.FieldDescriptor TensorDescription
+                allocationDescription__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocation_description"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.AllocationDescription.AllocationDescription)
+                      (Data.ProtoLens.OptionalField maybe'allocationDescription)
+                      :: Data.ProtoLens.FieldDescriptor TensorDescription
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, dtype__field_descriptor),
+                    (Data.ProtoLens.Tag 2, shape__field_descriptor),
+                    (Data.ProtoLens.Tag 4, allocationDescription__field_descriptor)])
+                (Data.Map.fromList
+                   [("dtype", dtype__field_descriptor),
+                    ("shape", shape__field_descriptor),
+                    ("allocation_description",
+                     allocationDescription__field_descriptor)])
+
+allocationDescription ::
+                      forall f s t a b .
+                        (Lens.Labels.HasLens "allocationDescription" f s t a b) =>
+                        Lens.Family2.LensLike f s t a b
+allocationDescription
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "allocationDescription")
+
+dtype ::
+      forall f s t a b . (Lens.Labels.HasLens "dtype" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+dtype
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "dtype")
+
+maybe'allocationDescription ::
+                            forall f s t a b .
+                              (Lens.Labels.HasLens "maybe'allocationDescription" f s t a b) =>
+                              Lens.Family2.LensLike f s t a b
+maybe'allocationDescription
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'allocationDescription")
+
+maybe'shape ::
+            forall f s t a b . (Lens.Labels.HasLens "maybe'shape" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+maybe'shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'shape")
+
+shape ::
+      forall f s t a b . (Lens.Labels.HasLens "shape" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+shape
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "shape")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorShape.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorShape.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/TensorShape.hs
@@ -0,0 +1,160 @@
+{- This file was auto-generated from tensorflow/core/framework/tensor_shape.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.TensorShape where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data TensorShapeProto = TensorShapeProto{_TensorShapeProto'dim ::
+                                         ![TensorShapeProto'Dim],
+                                         _TensorShapeProto'unknownRank :: !Prelude.Bool}
+                      deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [TensorShapeProto'Dim], b ~ [TensorShapeProto'Dim],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "dim" f TensorShapeProto TensorShapeProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorShapeProto'dim
+              (\ x__ y__ -> x__{_TensorShapeProto'dim = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "unknownRank" f TensorShapeProto
+           TensorShapeProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorShapeProto'unknownRank
+              (\ x__ y__ -> x__{_TensorShapeProto'unknownRank = y__})
+
+instance Data.Default.Class.Default TensorShapeProto where
+        def
+          = TensorShapeProto{_TensorShapeProto'dim = [],
+                             _TensorShapeProto'unknownRank = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message TensorShapeProto where
+        descriptor
+          = let dim__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "dim"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor TensorShapeProto'Dim)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked dim)
+                      :: Data.ProtoLens.FieldDescriptor TensorShapeProto
+                unknownRank__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "unknown_rank"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional unknownRank)
+                      :: Data.ProtoLens.FieldDescriptor TensorShapeProto
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 2, dim__field_descriptor),
+                    (Data.ProtoLens.Tag 3, unknownRank__field_descriptor)])
+                (Data.Map.fromList
+                   [("dim", dim__field_descriptor),
+                    ("unknown_rank", unknownRank__field_descriptor)])
+
+data TensorShapeProto'Dim = TensorShapeProto'Dim{_TensorShapeProto'Dim'size
+                                                 :: !Data.Int.Int64,
+                                                 _TensorShapeProto'Dim'name :: !Data.Text.Text}
+                          deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "size" f TensorShapeProto'Dim
+           TensorShapeProto'Dim
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorShapeProto'Dim'size
+              (\ x__ y__ -> x__{_TensorShapeProto'Dim'size = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "name" f TensorShapeProto'Dim
+           TensorShapeProto'Dim
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TensorShapeProto'Dim'name
+              (\ x__ y__ -> x__{_TensorShapeProto'Dim'name = y__})
+
+instance Data.Default.Class.Default TensorShapeProto'Dim where
+        def
+          = TensorShapeProto'Dim{_TensorShapeProto'Dim'size =
+                                   Data.ProtoLens.fieldDefault,
+                                 _TensorShapeProto'Dim'name = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message TensorShapeProto'Dim where
+        descriptor
+          = let size__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "size"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional size)
+                      :: Data.ProtoLens.FieldDescriptor TensorShapeProto'Dim
+                name__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional name)
+                      :: Data.ProtoLens.FieldDescriptor TensorShapeProto'Dim
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, size__field_descriptor),
+                    (Data.ProtoLens.Tag 2, name__field_descriptor)])
+                (Data.Map.fromList
+                   [("size", size__field_descriptor),
+                    ("name", name__field_descriptor)])
+
+dim ::
+    forall f s t a b . (Lens.Labels.HasLens "dim" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+dim
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "dim")
+
+name ::
+     forall f s t a b . (Lens.Labels.HasLens "name" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+name
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "name")
+
+size ::
+     forall f s t a b . (Lens.Labels.HasLens "size" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+size
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "size")
+
+unknownRank ::
+            forall f s t a b . (Lens.Labels.HasLens "unknownRank" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+unknownRank
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "unknownRank")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Types.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Types.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Types.hs
@@ -0,0 +1,345 @@
+{- This file was auto-generated from tensorflow/core/framework/types.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Types where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data DataType = DT_INVALID
+              | DT_FLOAT
+              | DT_DOUBLE
+              | DT_INT32
+              | DT_UINT8
+              | DT_INT16
+              | DT_INT8
+              | DT_STRING
+              | DT_COMPLEX64
+              | DT_INT64
+              | DT_BOOL
+              | DT_QINT8
+              | DT_QUINT8
+              | DT_QINT32
+              | DT_BFLOAT16
+              | DT_QINT16
+              | DT_QUINT16
+              | DT_UINT16
+              | DT_COMPLEX128
+              | DT_HALF
+              | DT_RESOURCE
+              | DT_FLOAT_REF
+              | DT_DOUBLE_REF
+              | DT_INT32_REF
+              | DT_UINT8_REF
+              | DT_INT16_REF
+              | DT_INT8_REF
+              | DT_STRING_REF
+              | DT_COMPLEX64_REF
+              | DT_INT64_REF
+              | DT_BOOL_REF
+              | DT_QINT8_REF
+              | DT_QUINT8_REF
+              | DT_QINT32_REF
+              | DT_BFLOAT16_REF
+              | DT_QINT16_REF
+              | DT_QUINT16_REF
+              | DT_UINT16_REF
+              | DT_COMPLEX128_REF
+              | DT_HALF_REF
+              | DT_RESOURCE_REF
+              deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default DataType where
+        def = DT_INVALID
+
+instance Data.ProtoLens.FieldDefault DataType where
+        fieldDefault = DT_INVALID
+
+instance Data.ProtoLens.MessageEnum DataType where
+        maybeToEnum 0 = Prelude.Just DT_INVALID
+        maybeToEnum 1 = Prelude.Just DT_FLOAT
+        maybeToEnum 2 = Prelude.Just DT_DOUBLE
+        maybeToEnum 3 = Prelude.Just DT_INT32
+        maybeToEnum 4 = Prelude.Just DT_UINT8
+        maybeToEnum 5 = Prelude.Just DT_INT16
+        maybeToEnum 6 = Prelude.Just DT_INT8
+        maybeToEnum 7 = Prelude.Just DT_STRING
+        maybeToEnum 8 = Prelude.Just DT_COMPLEX64
+        maybeToEnum 9 = Prelude.Just DT_INT64
+        maybeToEnum 10 = Prelude.Just DT_BOOL
+        maybeToEnum 11 = Prelude.Just DT_QINT8
+        maybeToEnum 12 = Prelude.Just DT_QUINT8
+        maybeToEnum 13 = Prelude.Just DT_QINT32
+        maybeToEnum 14 = Prelude.Just DT_BFLOAT16
+        maybeToEnum 15 = Prelude.Just DT_QINT16
+        maybeToEnum 16 = Prelude.Just DT_QUINT16
+        maybeToEnum 17 = Prelude.Just DT_UINT16
+        maybeToEnum 18 = Prelude.Just DT_COMPLEX128
+        maybeToEnum 19 = Prelude.Just DT_HALF
+        maybeToEnum 20 = Prelude.Just DT_RESOURCE
+        maybeToEnum 101 = Prelude.Just DT_FLOAT_REF
+        maybeToEnum 102 = Prelude.Just DT_DOUBLE_REF
+        maybeToEnum 103 = Prelude.Just DT_INT32_REF
+        maybeToEnum 104 = Prelude.Just DT_UINT8_REF
+        maybeToEnum 105 = Prelude.Just DT_INT16_REF
+        maybeToEnum 106 = Prelude.Just DT_INT8_REF
+        maybeToEnum 107 = Prelude.Just DT_STRING_REF
+        maybeToEnum 108 = Prelude.Just DT_COMPLEX64_REF
+        maybeToEnum 109 = Prelude.Just DT_INT64_REF
+        maybeToEnum 110 = Prelude.Just DT_BOOL_REF
+        maybeToEnum 111 = Prelude.Just DT_QINT8_REF
+        maybeToEnum 112 = Prelude.Just DT_QUINT8_REF
+        maybeToEnum 113 = Prelude.Just DT_QINT32_REF
+        maybeToEnum 114 = Prelude.Just DT_BFLOAT16_REF
+        maybeToEnum 115 = Prelude.Just DT_QINT16_REF
+        maybeToEnum 116 = Prelude.Just DT_QUINT16_REF
+        maybeToEnum 117 = Prelude.Just DT_UINT16_REF
+        maybeToEnum 118 = Prelude.Just DT_COMPLEX128_REF
+        maybeToEnum 119 = Prelude.Just DT_HALF_REF
+        maybeToEnum 120 = Prelude.Just DT_RESOURCE_REF
+        maybeToEnum _ = Prelude.Nothing
+        showEnum DT_INVALID = "DT_INVALID"
+        showEnum DT_FLOAT = "DT_FLOAT"
+        showEnum DT_DOUBLE = "DT_DOUBLE"
+        showEnum DT_INT32 = "DT_INT32"
+        showEnum DT_UINT8 = "DT_UINT8"
+        showEnum DT_INT16 = "DT_INT16"
+        showEnum DT_INT8 = "DT_INT8"
+        showEnum DT_STRING = "DT_STRING"
+        showEnum DT_COMPLEX64 = "DT_COMPLEX64"
+        showEnum DT_INT64 = "DT_INT64"
+        showEnum DT_BOOL = "DT_BOOL"
+        showEnum DT_QINT8 = "DT_QINT8"
+        showEnum DT_QUINT8 = "DT_QUINT8"
+        showEnum DT_QINT32 = "DT_QINT32"
+        showEnum DT_BFLOAT16 = "DT_BFLOAT16"
+        showEnum DT_QINT16 = "DT_QINT16"
+        showEnum DT_QUINT16 = "DT_QUINT16"
+        showEnum DT_UINT16 = "DT_UINT16"
+        showEnum DT_COMPLEX128 = "DT_COMPLEX128"
+        showEnum DT_HALF = "DT_HALF"
+        showEnum DT_RESOURCE = "DT_RESOURCE"
+        showEnum DT_FLOAT_REF = "DT_FLOAT_REF"
+        showEnum DT_DOUBLE_REF = "DT_DOUBLE_REF"
+        showEnum DT_INT32_REF = "DT_INT32_REF"
+        showEnum DT_UINT8_REF = "DT_UINT8_REF"
+        showEnum DT_INT16_REF = "DT_INT16_REF"
+        showEnum DT_INT8_REF = "DT_INT8_REF"
+        showEnum DT_STRING_REF = "DT_STRING_REF"
+        showEnum DT_COMPLEX64_REF = "DT_COMPLEX64_REF"
+        showEnum DT_INT64_REF = "DT_INT64_REF"
+        showEnum DT_BOOL_REF = "DT_BOOL_REF"
+        showEnum DT_QINT8_REF = "DT_QINT8_REF"
+        showEnum DT_QUINT8_REF = "DT_QUINT8_REF"
+        showEnum DT_QINT32_REF = "DT_QINT32_REF"
+        showEnum DT_BFLOAT16_REF = "DT_BFLOAT16_REF"
+        showEnum DT_QINT16_REF = "DT_QINT16_REF"
+        showEnum DT_QUINT16_REF = "DT_QUINT16_REF"
+        showEnum DT_UINT16_REF = "DT_UINT16_REF"
+        showEnum DT_COMPLEX128_REF = "DT_COMPLEX128_REF"
+        showEnum DT_HALF_REF = "DT_HALF_REF"
+        showEnum DT_RESOURCE_REF = "DT_RESOURCE_REF"
+        readEnum "DT_INVALID" = Prelude.Just DT_INVALID
+        readEnum "DT_FLOAT" = Prelude.Just DT_FLOAT
+        readEnum "DT_DOUBLE" = Prelude.Just DT_DOUBLE
+        readEnum "DT_INT32" = Prelude.Just DT_INT32
+        readEnum "DT_UINT8" = Prelude.Just DT_UINT8
+        readEnum "DT_INT16" = Prelude.Just DT_INT16
+        readEnum "DT_INT8" = Prelude.Just DT_INT8
+        readEnum "DT_STRING" = Prelude.Just DT_STRING
+        readEnum "DT_COMPLEX64" = Prelude.Just DT_COMPLEX64
+        readEnum "DT_INT64" = Prelude.Just DT_INT64
+        readEnum "DT_BOOL" = Prelude.Just DT_BOOL
+        readEnum "DT_QINT8" = Prelude.Just DT_QINT8
+        readEnum "DT_QUINT8" = Prelude.Just DT_QUINT8
+        readEnum "DT_QINT32" = Prelude.Just DT_QINT32
+        readEnum "DT_BFLOAT16" = Prelude.Just DT_BFLOAT16
+        readEnum "DT_QINT16" = Prelude.Just DT_QINT16
+        readEnum "DT_QUINT16" = Prelude.Just DT_QUINT16
+        readEnum "DT_UINT16" = Prelude.Just DT_UINT16
+        readEnum "DT_COMPLEX128" = Prelude.Just DT_COMPLEX128
+        readEnum "DT_HALF" = Prelude.Just DT_HALF
+        readEnum "DT_RESOURCE" = Prelude.Just DT_RESOURCE
+        readEnum "DT_FLOAT_REF" = Prelude.Just DT_FLOAT_REF
+        readEnum "DT_DOUBLE_REF" = Prelude.Just DT_DOUBLE_REF
+        readEnum "DT_INT32_REF" = Prelude.Just DT_INT32_REF
+        readEnum "DT_UINT8_REF" = Prelude.Just DT_UINT8_REF
+        readEnum "DT_INT16_REF" = Prelude.Just DT_INT16_REF
+        readEnum "DT_INT8_REF" = Prelude.Just DT_INT8_REF
+        readEnum "DT_STRING_REF" = Prelude.Just DT_STRING_REF
+        readEnum "DT_COMPLEX64_REF" = Prelude.Just DT_COMPLEX64_REF
+        readEnum "DT_INT64_REF" = Prelude.Just DT_INT64_REF
+        readEnum "DT_BOOL_REF" = Prelude.Just DT_BOOL_REF
+        readEnum "DT_QINT8_REF" = Prelude.Just DT_QINT8_REF
+        readEnum "DT_QUINT8_REF" = Prelude.Just DT_QUINT8_REF
+        readEnum "DT_QINT32_REF" = Prelude.Just DT_QINT32_REF
+        readEnum "DT_BFLOAT16_REF" = Prelude.Just DT_BFLOAT16_REF
+        readEnum "DT_QINT16_REF" = Prelude.Just DT_QINT16_REF
+        readEnum "DT_QUINT16_REF" = Prelude.Just DT_QUINT16_REF
+        readEnum "DT_UINT16_REF" = Prelude.Just DT_UINT16_REF
+        readEnum "DT_COMPLEX128_REF" = Prelude.Just DT_COMPLEX128_REF
+        readEnum "DT_HALF_REF" = Prelude.Just DT_HALF_REF
+        readEnum "DT_RESOURCE_REF" = Prelude.Just DT_RESOURCE_REF
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum DataType where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum DataType: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum DT_INVALID = 0
+        fromEnum DT_FLOAT = 1
+        fromEnum DT_DOUBLE = 2
+        fromEnum DT_INT32 = 3
+        fromEnum DT_UINT8 = 4
+        fromEnum DT_INT16 = 5
+        fromEnum DT_INT8 = 6
+        fromEnum DT_STRING = 7
+        fromEnum DT_COMPLEX64 = 8
+        fromEnum DT_INT64 = 9
+        fromEnum DT_BOOL = 10
+        fromEnum DT_QINT8 = 11
+        fromEnum DT_QUINT8 = 12
+        fromEnum DT_QINT32 = 13
+        fromEnum DT_BFLOAT16 = 14
+        fromEnum DT_QINT16 = 15
+        fromEnum DT_QUINT16 = 16
+        fromEnum DT_UINT16 = 17
+        fromEnum DT_COMPLEX128 = 18
+        fromEnum DT_HALF = 19
+        fromEnum DT_RESOURCE = 20
+        fromEnum DT_FLOAT_REF = 101
+        fromEnum DT_DOUBLE_REF = 102
+        fromEnum DT_INT32_REF = 103
+        fromEnum DT_UINT8_REF = 104
+        fromEnum DT_INT16_REF = 105
+        fromEnum DT_INT8_REF = 106
+        fromEnum DT_STRING_REF = 107
+        fromEnum DT_COMPLEX64_REF = 108
+        fromEnum DT_INT64_REF = 109
+        fromEnum DT_BOOL_REF = 110
+        fromEnum DT_QINT8_REF = 111
+        fromEnum DT_QUINT8_REF = 112
+        fromEnum DT_QINT32_REF = 113
+        fromEnum DT_BFLOAT16_REF = 114
+        fromEnum DT_QINT16_REF = 115
+        fromEnum DT_QUINT16_REF = 116
+        fromEnum DT_UINT16_REF = 117
+        fromEnum DT_COMPLEX128_REF = 118
+        fromEnum DT_HALF_REF = 119
+        fromEnum DT_RESOURCE_REF = 120
+        succ DT_RESOURCE_REF
+          = Prelude.error
+              "DataType.succ: bad argument DT_RESOURCE_REF. This value would be out of bounds."
+        succ DT_INVALID = DT_FLOAT
+        succ DT_FLOAT = DT_DOUBLE
+        succ DT_DOUBLE = DT_INT32
+        succ DT_INT32 = DT_UINT8
+        succ DT_UINT8 = DT_INT16
+        succ DT_INT16 = DT_INT8
+        succ DT_INT8 = DT_STRING
+        succ DT_STRING = DT_COMPLEX64
+        succ DT_COMPLEX64 = DT_INT64
+        succ DT_INT64 = DT_BOOL
+        succ DT_BOOL = DT_QINT8
+        succ DT_QINT8 = DT_QUINT8
+        succ DT_QUINT8 = DT_QINT32
+        succ DT_QINT32 = DT_BFLOAT16
+        succ DT_BFLOAT16 = DT_QINT16
+        succ DT_QINT16 = DT_QUINT16
+        succ DT_QUINT16 = DT_UINT16
+        succ DT_UINT16 = DT_COMPLEX128
+        succ DT_COMPLEX128 = DT_HALF
+        succ DT_HALF = DT_RESOURCE
+        succ DT_RESOURCE = DT_FLOAT_REF
+        succ DT_FLOAT_REF = DT_DOUBLE_REF
+        succ DT_DOUBLE_REF = DT_INT32_REF
+        succ DT_INT32_REF = DT_UINT8_REF
+        succ DT_UINT8_REF = DT_INT16_REF
+        succ DT_INT16_REF = DT_INT8_REF
+        succ DT_INT8_REF = DT_STRING_REF
+        succ DT_STRING_REF = DT_COMPLEX64_REF
+        succ DT_COMPLEX64_REF = DT_INT64_REF
+        succ DT_INT64_REF = DT_BOOL_REF
+        succ DT_BOOL_REF = DT_QINT8_REF
+        succ DT_QINT8_REF = DT_QUINT8_REF
+        succ DT_QUINT8_REF = DT_QINT32_REF
+        succ DT_QINT32_REF = DT_BFLOAT16_REF
+        succ DT_BFLOAT16_REF = DT_QINT16_REF
+        succ DT_QINT16_REF = DT_QUINT16_REF
+        succ DT_QUINT16_REF = DT_UINT16_REF
+        succ DT_UINT16_REF = DT_COMPLEX128_REF
+        succ DT_COMPLEX128_REF = DT_HALF_REF
+        succ DT_HALF_REF = DT_RESOURCE_REF
+        pred DT_INVALID
+          = Prelude.error
+              "DataType.pred: bad argument DT_INVALID. This value would be out of bounds."
+        pred DT_FLOAT = DT_INVALID
+        pred DT_DOUBLE = DT_FLOAT
+        pred DT_INT32 = DT_DOUBLE
+        pred DT_UINT8 = DT_INT32
+        pred DT_INT16 = DT_UINT8
+        pred DT_INT8 = DT_INT16
+        pred DT_STRING = DT_INT8
+        pred DT_COMPLEX64 = DT_STRING
+        pred DT_INT64 = DT_COMPLEX64
+        pred DT_BOOL = DT_INT64
+        pred DT_QINT8 = DT_BOOL
+        pred DT_QUINT8 = DT_QINT8
+        pred DT_QINT32 = DT_QUINT8
+        pred DT_BFLOAT16 = DT_QINT32
+        pred DT_QINT16 = DT_BFLOAT16
+        pred DT_QUINT16 = DT_QINT16
+        pred DT_UINT16 = DT_QUINT16
+        pred DT_COMPLEX128 = DT_UINT16
+        pred DT_HALF = DT_COMPLEX128
+        pred DT_RESOURCE = DT_HALF
+        pred DT_FLOAT_REF = DT_RESOURCE
+        pred DT_DOUBLE_REF = DT_FLOAT_REF
+        pred DT_INT32_REF = DT_DOUBLE_REF
+        pred DT_UINT8_REF = DT_INT32_REF
+        pred DT_INT16_REF = DT_UINT8_REF
+        pred DT_INT8_REF = DT_INT16_REF
+        pred DT_STRING_REF = DT_INT8_REF
+        pred DT_COMPLEX64_REF = DT_STRING_REF
+        pred DT_INT64_REF = DT_COMPLEX64_REF
+        pred DT_BOOL_REF = DT_INT64_REF
+        pred DT_QINT8_REF = DT_BOOL_REF
+        pred DT_QUINT8_REF = DT_QINT8_REF
+        pred DT_QINT32_REF = DT_QUINT8_REF
+        pred DT_BFLOAT16_REF = DT_QINT32_REF
+        pred DT_QINT16_REF = DT_BFLOAT16_REF
+        pred DT_QUINT16_REF = DT_QINT16_REF
+        pred DT_UINT16_REF = DT_QUINT16_REF
+        pred DT_COMPLEX128_REF = DT_UINT16_REF
+        pred DT_HALF_REF = DT_COMPLEX128_REF
+        pred DT_RESOURCE_REF = DT_HALF_REF
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded DataType where
+        minBound = DT_INVALID
+        maxBound = DT_RESOURCE_REF
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Framework/Versions.hs b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Versions.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Framework/Versions.hs
@@ -0,0 +1,114 @@
+{- This file was auto-generated from tensorflow/core/framework/versions.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Framework.Versions where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data VersionDef = VersionDef{_VersionDef'producer ::
+                             !Data.Int.Int32,
+                             _VersionDef'minConsumer :: !Data.Int.Int32,
+                             _VersionDef'badConsumers :: ![Data.Int.Int32]}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "producer" f VersionDef VersionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _VersionDef'producer
+              (\ x__ y__ -> x__{_VersionDef'producer = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "minConsumer" f VersionDef VersionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _VersionDef'minConsumer
+              (\ x__ y__ -> x__{_VersionDef'minConsumer = y__})
+
+instance (a ~ [Data.Int.Int32], b ~ [Data.Int.Int32],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "badConsumers" f VersionDef VersionDef a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _VersionDef'badConsumers
+              (\ x__ y__ -> x__{_VersionDef'badConsumers = y__})
+
+instance Data.Default.Class.Default VersionDef where
+        def
+          = VersionDef{_VersionDef'producer = Data.ProtoLens.fieldDefault,
+                       _VersionDef'minConsumer = Data.ProtoLens.fieldDefault,
+                       _VersionDef'badConsumers = []}
+
+instance Data.ProtoLens.Message VersionDef where
+        descriptor
+          = let producer__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "producer"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional producer)
+                      :: Data.ProtoLens.FieldDescriptor VersionDef
+                minConsumer__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "min_consumer"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional minConsumer)
+                      :: Data.ProtoLens.FieldDescriptor VersionDef
+                badConsumers__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "bad_consumers"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed badConsumers)
+                      :: Data.ProtoLens.FieldDescriptor VersionDef
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, producer__field_descriptor),
+                    (Data.ProtoLens.Tag 2, minConsumer__field_descriptor),
+                    (Data.ProtoLens.Tag 3, badConsumers__field_descriptor)])
+                (Data.Map.fromList
+                   [("producer", producer__field_descriptor),
+                    ("min_consumer", minConsumer__field_descriptor),
+                    ("bad_consumers", badConsumers__field_descriptor)])
+
+badConsumers ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "badConsumers" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+badConsumers
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "badConsumers")
+
+minConsumer ::
+            forall f s t a b . (Lens.Labels.HasLens "minConsumer" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+minConsumer
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "minConsumer")
+
+producer ::
+         forall f s t a b . (Lens.Labels.HasLens "producer" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+producer
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "producer")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Config.hs b/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Config.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Config.hs
@@ -0,0 +1,1694 @@
+{- This file was auto-generated from tensorflow/core/protobuf/config.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Protobuf.Config where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.CostGraph
+import qualified Proto.Tensorflow.Core.Framework.Graph
+import qualified Proto.Tensorflow.Core.Framework.StepStats
+import qualified Proto.Tensorflow.Core.Protobuf.Debug
+
+data ConfigProto = ConfigProto{_ConfigProto'deviceCount ::
+                               !(Data.Map.Map Data.Text.Text Data.Int.Int32),
+                               _ConfigProto'intraOpParallelismThreads :: !Data.Int.Int32,
+                               _ConfigProto'interOpParallelismThreads :: !Data.Int.Int32,
+                               _ConfigProto'usePerSessionThreads :: !Prelude.Bool,
+                               _ConfigProto'sessionInterOpThreadPool :: ![ThreadPoolOptionProto],
+                               _ConfigProto'placementPeriod :: !Data.Int.Int32,
+                               _ConfigProto'deviceFilters :: ![Data.Text.Text],
+                               _ConfigProto'gpuOptions :: !(Prelude.Maybe GPUOptions),
+                               _ConfigProto'allowSoftPlacement :: !Prelude.Bool,
+                               _ConfigProto'logDevicePlacement :: !Prelude.Bool,
+                               _ConfigProto'graphOptions :: !(Prelude.Maybe GraphOptions),
+                               _ConfigProto'operationTimeoutInMs :: !Data.Int.Int64,
+                               _ConfigProto'rpcOptions :: !(Prelude.Maybe RPCOptions)}
+                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Map.Map Data.Text.Text Data.Int.Int32,
+          b ~ Data.Map.Map Data.Text.Text Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "deviceCount" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'deviceCount
+              (\ x__ y__ -> x__{_ConfigProto'deviceCount = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "intraOpParallelismThreads" f ConfigProto
+           ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _ConfigProto'intraOpParallelismThreads
+              (\ x__ y__ -> x__{_ConfigProto'intraOpParallelismThreads = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "interOpParallelismThreads" f ConfigProto
+           ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _ConfigProto'interOpParallelismThreads
+              (\ x__ y__ -> x__{_ConfigProto'interOpParallelismThreads = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "usePerSessionThreads" f ConfigProto
+           ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'usePerSessionThreads
+              (\ x__ y__ -> x__{_ConfigProto'usePerSessionThreads = y__})
+
+instance (a ~ [ThreadPoolOptionProto], b ~ [ThreadPoolOptionProto],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "sessionInterOpThreadPool" f ConfigProto
+           ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'sessionInterOpThreadPool
+              (\ x__ y__ -> x__{_ConfigProto'sessionInterOpThreadPool = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "placementPeriod" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'placementPeriod
+              (\ x__ y__ -> x__{_ConfigProto'placementPeriod = y__})
+
+instance (a ~ [Data.Text.Text], b ~ [Data.Text.Text],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "deviceFilters" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'deviceFilters
+              (\ x__ y__ -> x__{_ConfigProto'deviceFilters = y__})
+
+instance (a ~ GPUOptions, b ~ GPUOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "gpuOptions" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = (Prelude..) maybe'gpuOptions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe GPUOptions,
+          b ~ Prelude.Maybe GPUOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'gpuOptions" f ConfigProto ConfigProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'gpuOptions
+              (\ x__ y__ -> x__{_ConfigProto'gpuOptions = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "allowSoftPlacement" f ConfigProto ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'allowSoftPlacement
+              (\ x__ y__ -> x__{_ConfigProto'allowSoftPlacement = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "logDevicePlacement" f ConfigProto ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'logDevicePlacement
+              (\ x__ y__ -> x__{_ConfigProto'logDevicePlacement = y__})
+
+instance (a ~ GraphOptions, b ~ GraphOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "graphOptions" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = (Prelude..) maybe'graphOptions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe GraphOptions,
+          b ~ Prelude.Maybe GraphOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'graphOptions" f ConfigProto ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'graphOptions
+              (\ x__ y__ -> x__{_ConfigProto'graphOptions = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "operationTimeoutInMs" f ConfigProto
+           ConfigProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'operationTimeoutInMs
+              (\ x__ y__ -> x__{_ConfigProto'operationTimeoutInMs = y__})
+
+instance (a ~ RPCOptions, b ~ RPCOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "rpcOptions" f ConfigProto ConfigProto a b
+         where
+        lensOf _
+          = (Prelude..) maybe'rpcOptions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe RPCOptions,
+          b ~ Prelude.Maybe RPCOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'rpcOptions" f ConfigProto ConfigProto a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'rpcOptions
+              (\ x__ y__ -> x__{_ConfigProto'rpcOptions = y__})
+
+instance Data.Default.Class.Default ConfigProto where
+        def
+          = ConfigProto{_ConfigProto'deviceCount = Data.Map.empty,
+                        _ConfigProto'intraOpParallelismThreads =
+                          Data.ProtoLens.fieldDefault,
+                        _ConfigProto'interOpParallelismThreads =
+                          Data.ProtoLens.fieldDefault,
+                        _ConfigProto'usePerSessionThreads = Data.ProtoLens.fieldDefault,
+                        _ConfigProto'sessionInterOpThreadPool = [],
+                        _ConfigProto'placementPeriod = Data.ProtoLens.fieldDefault,
+                        _ConfigProto'deviceFilters = [],
+                        _ConfigProto'gpuOptions = Prelude.Nothing,
+                        _ConfigProto'allowSoftPlacement = Data.ProtoLens.fieldDefault,
+                        _ConfigProto'logDevicePlacement = Data.ProtoLens.fieldDefault,
+                        _ConfigProto'graphOptions = Prelude.Nothing,
+                        _ConfigProto'operationTimeoutInMs = Data.ProtoLens.fieldDefault,
+                        _ConfigProto'rpcOptions = Prelude.Nothing}
+
+instance Data.ProtoLens.Message ConfigProto where
+        descriptor
+          = let deviceCount__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device_count"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor ConfigProto'DeviceCountEntry)
+                      (Data.ProtoLens.MapField key value deviceCount)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                intraOpParallelismThreads__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "intra_op_parallelism_threads"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         intraOpParallelismThreads)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                interOpParallelismThreads__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "inter_op_parallelism_threads"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         interOpParallelismThreads)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                usePerSessionThreads__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "use_per_session_threads"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         usePerSessionThreads)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                sessionInterOpThreadPool__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "session_inter_op_thread_pool"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor ThreadPoolOptionProto)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         sessionInterOpThreadPool)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                placementPeriod__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "placement_period"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional placementPeriod)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                deviceFilters__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "device_filters"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         deviceFilters)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                gpuOptions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "gpu_options"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor GPUOptions)
+                      (Data.ProtoLens.OptionalField maybe'gpuOptions)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                allowSoftPlacement__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allow_soft_placement"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         allowSoftPlacement)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                logDevicePlacement__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "log_device_placement"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         logDevicePlacement)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                graphOptions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "graph_options"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor GraphOptions)
+                      (Data.ProtoLens.OptionalField maybe'graphOptions)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                operationTimeoutInMs__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "operation_timeout_in_ms"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         operationTimeoutInMs)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+                rpcOptions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "rpc_options"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor RPCOptions)
+                      (Data.ProtoLens.OptionalField maybe'rpcOptions)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, deviceCount__field_descriptor),
+                    (Data.ProtoLens.Tag 2,
+                     intraOpParallelismThreads__field_descriptor),
+                    (Data.ProtoLens.Tag 5,
+                     interOpParallelismThreads__field_descriptor),
+                    (Data.ProtoLens.Tag 9, usePerSessionThreads__field_descriptor),
+                    (Data.ProtoLens.Tag 12,
+                     sessionInterOpThreadPool__field_descriptor),
+                    (Data.ProtoLens.Tag 3, placementPeriod__field_descriptor),
+                    (Data.ProtoLens.Tag 4, deviceFilters__field_descriptor),
+                    (Data.ProtoLens.Tag 6, gpuOptions__field_descriptor),
+                    (Data.ProtoLens.Tag 7, allowSoftPlacement__field_descriptor),
+                    (Data.ProtoLens.Tag 8, logDevicePlacement__field_descriptor),
+                    (Data.ProtoLens.Tag 10, graphOptions__field_descriptor),
+                    (Data.ProtoLens.Tag 11, operationTimeoutInMs__field_descriptor),
+                    (Data.ProtoLens.Tag 13, rpcOptions__field_descriptor)])
+                (Data.Map.fromList
+                   [("device_count", deviceCount__field_descriptor),
+                    ("intra_op_parallelism_threads",
+                     intraOpParallelismThreads__field_descriptor),
+                    ("inter_op_parallelism_threads",
+                     interOpParallelismThreads__field_descriptor),
+                    ("use_per_session_threads",
+                     usePerSessionThreads__field_descriptor),
+                    ("session_inter_op_thread_pool",
+                     sessionInterOpThreadPool__field_descriptor),
+                    ("placement_period", placementPeriod__field_descriptor),
+                    ("device_filters", deviceFilters__field_descriptor),
+                    ("gpu_options", gpuOptions__field_descriptor),
+                    ("allow_soft_placement", allowSoftPlacement__field_descriptor),
+                    ("log_device_placement", logDevicePlacement__field_descriptor),
+                    ("graph_options", graphOptions__field_descriptor),
+                    ("operation_timeout_in_ms",
+                     operationTimeoutInMs__field_descriptor),
+                    ("rpc_options", rpcOptions__field_descriptor)])
+
+data ConfigProto'DeviceCountEntry = ConfigProto'DeviceCountEntry{_ConfigProto'DeviceCountEntry'key
+                                                                 :: !Data.Text.Text,
+                                                                 _ConfigProto'DeviceCountEntry'value
+                                                                 :: !Data.Int.Int32}
+                                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "key" f ConfigProto'DeviceCountEntry
+           ConfigProto'DeviceCountEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'DeviceCountEntry'key
+              (\ x__ y__ -> x__{_ConfigProto'DeviceCountEntry'key = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "value" f ConfigProto'DeviceCountEntry
+           ConfigProto'DeviceCountEntry
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ConfigProto'DeviceCountEntry'value
+              (\ x__ y__ -> x__{_ConfigProto'DeviceCountEntry'value = y__})
+
+instance Data.Default.Class.Default ConfigProto'DeviceCountEntry
+         where
+        def
+          = ConfigProto'DeviceCountEntry{_ConfigProto'DeviceCountEntry'key =
+                                           Data.ProtoLens.fieldDefault,
+                                         _ConfigProto'DeviceCountEntry'value =
+                                           Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message ConfigProto'DeviceCountEntry where
+        descriptor
+          = let key__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "key"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional key)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto'DeviceCountEntry
+                value__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "value"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional value)
+                      :: Data.ProtoLens.FieldDescriptor ConfigProto'DeviceCountEntry
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, key__field_descriptor),
+                    (Data.ProtoLens.Tag 2, value__field_descriptor)])
+                (Data.Map.fromList
+                   [("key", key__field_descriptor),
+                    ("value", value__field_descriptor)])
+
+data GPUOptions = GPUOptions{_GPUOptions'perProcessGpuMemoryFraction
+                             :: !Prelude.Double,
+                             _GPUOptions'allocatorType :: !Data.Text.Text,
+                             _GPUOptions'deferredDeletionBytes :: !Data.Int.Int64,
+                             _GPUOptions'allowGrowth :: !Prelude.Bool,
+                             _GPUOptions'visibleDeviceList :: !Data.Text.Text}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "perProcessGpuMemoryFraction" f GPUOptions
+           GPUOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _GPUOptions'perProcessGpuMemoryFraction
+              (\ x__ y__ -> x__{_GPUOptions'perProcessGpuMemoryFraction = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "allocatorType" f GPUOptions GPUOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GPUOptions'allocatorType
+              (\ x__ y__ -> x__{_GPUOptions'allocatorType = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "deferredDeletionBytes" f GPUOptions GPUOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GPUOptions'deferredDeletionBytes
+              (\ x__ y__ -> x__{_GPUOptions'deferredDeletionBytes = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "allowGrowth" f GPUOptions GPUOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GPUOptions'allowGrowth
+              (\ x__ y__ -> x__{_GPUOptions'allowGrowth = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "visibleDeviceList" f GPUOptions GPUOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GPUOptions'visibleDeviceList
+              (\ x__ y__ -> x__{_GPUOptions'visibleDeviceList = y__})
+
+instance Data.Default.Class.Default GPUOptions where
+        def
+          = GPUOptions{_GPUOptions'perProcessGpuMemoryFraction =
+                         Data.ProtoLens.fieldDefault,
+                       _GPUOptions'allocatorType = Data.ProtoLens.fieldDefault,
+                       _GPUOptions'deferredDeletionBytes = Data.ProtoLens.fieldDefault,
+                       _GPUOptions'allowGrowth = Data.ProtoLens.fieldDefault,
+                       _GPUOptions'visibleDeviceList = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message GPUOptions where
+        descriptor
+          = let perProcessGpuMemoryFraction__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "per_process_gpu_memory_fraction"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         perProcessGpuMemoryFraction)
+                      :: Data.ProtoLens.FieldDescriptor GPUOptions
+                allocatorType__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allocator_type"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allocatorType)
+                      :: Data.ProtoLens.FieldDescriptor GPUOptions
+                deferredDeletionBytes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "deferred_deletion_bytes"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         deferredDeletionBytes)
+                      :: Data.ProtoLens.FieldDescriptor GPUOptions
+                allowGrowth__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "allow_growth"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional allowGrowth)
+                      :: Data.ProtoLens.FieldDescriptor GPUOptions
+                visibleDeviceList__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "visible_device_list"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         visibleDeviceList)
+                      :: Data.ProtoLens.FieldDescriptor GPUOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1,
+                     perProcessGpuMemoryFraction__field_descriptor),
+                    (Data.ProtoLens.Tag 2, allocatorType__field_descriptor),
+                    (Data.ProtoLens.Tag 3, deferredDeletionBytes__field_descriptor),
+                    (Data.ProtoLens.Tag 4, allowGrowth__field_descriptor),
+                    (Data.ProtoLens.Tag 5, visibleDeviceList__field_descriptor)])
+                (Data.Map.fromList
+                   [("per_process_gpu_memory_fraction",
+                     perProcessGpuMemoryFraction__field_descriptor),
+                    ("allocator_type", allocatorType__field_descriptor),
+                    ("deferred_deletion_bytes",
+                     deferredDeletionBytes__field_descriptor),
+                    ("allow_growth", allowGrowth__field_descriptor),
+                    ("visible_device_list", visibleDeviceList__field_descriptor)])
+
+data GraphOptions = GraphOptions{_GraphOptions'enableRecvScheduling
+                                 :: !Prelude.Bool,
+                                 _GraphOptions'optimizerOptions ::
+                                 !(Prelude.Maybe OptimizerOptions),
+                                 _GraphOptions'buildCostModel :: !Data.Int.Int64,
+                                 _GraphOptions'buildCostModelAfter :: !Data.Int.Int64,
+                                 _GraphOptions'inferShapes :: !Prelude.Bool,
+                                 _GraphOptions'placePrunedGraph :: !Prelude.Bool,
+                                 _GraphOptions'enableBfloat16Sendrecv :: !Prelude.Bool,
+                                 _GraphOptions'timelineStep :: !Data.Int.Int32}
+                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "enableRecvScheduling" f GraphOptions
+           GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'enableRecvScheduling
+              (\ x__ y__ -> x__{_GraphOptions'enableRecvScheduling = y__})
+
+instance (a ~ OptimizerOptions, b ~ OptimizerOptions,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "optimizerOptions" f GraphOptions GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = (Prelude..) maybe'optimizerOptions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe OptimizerOptions,
+          b ~ Prelude.Maybe OptimizerOptions, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'optimizerOptions" f GraphOptions
+           GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'optimizerOptions
+              (\ x__ y__ -> x__{_GraphOptions'optimizerOptions = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "buildCostModel" f GraphOptions GraphOptions a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'buildCostModel
+              (\ x__ y__ -> x__{_GraphOptions'buildCostModel = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "buildCostModelAfter" f GraphOptions
+           GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'buildCostModelAfter
+              (\ x__ y__ -> x__{_GraphOptions'buildCostModelAfter = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "inferShapes" f GraphOptions GraphOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'inferShapes
+              (\ x__ y__ -> x__{_GraphOptions'inferShapes = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "placePrunedGraph" f GraphOptions GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'placePrunedGraph
+              (\ x__ y__ -> x__{_GraphOptions'placePrunedGraph = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "enableBfloat16Sendrecv" f GraphOptions
+           GraphOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'enableBfloat16Sendrecv
+              (\ x__ y__ -> x__{_GraphOptions'enableBfloat16Sendrecv = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "timelineStep" f GraphOptions GraphOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _GraphOptions'timelineStep
+              (\ x__ y__ -> x__{_GraphOptions'timelineStep = y__})
+
+instance Data.Default.Class.Default GraphOptions where
+        def
+          = GraphOptions{_GraphOptions'enableRecvScheduling =
+                           Data.ProtoLens.fieldDefault,
+                         _GraphOptions'optimizerOptions = Prelude.Nothing,
+                         _GraphOptions'buildCostModel = Data.ProtoLens.fieldDefault,
+                         _GraphOptions'buildCostModelAfter = Data.ProtoLens.fieldDefault,
+                         _GraphOptions'inferShapes = Data.ProtoLens.fieldDefault,
+                         _GraphOptions'placePrunedGraph = Data.ProtoLens.fieldDefault,
+                         _GraphOptions'enableBfloat16Sendrecv = Data.ProtoLens.fieldDefault,
+                         _GraphOptions'timelineStep = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message GraphOptions where
+        descriptor
+          = let enableRecvScheduling__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "enable_recv_scheduling"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         enableRecvScheduling)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                optimizerOptions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "optimizer_options"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor OptimizerOptions)
+                      (Data.ProtoLens.OptionalField maybe'optimizerOptions)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                buildCostModel__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "build_cost_model"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional buildCostModel)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                buildCostModelAfter__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "build_cost_model_after"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         buildCostModelAfter)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                inferShapes__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "infer_shapes"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional inferShapes)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                placePrunedGraph__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "place_pruned_graph"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         placePrunedGraph)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                enableBfloat16Sendrecv__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "enable_bfloat16_sendrecv"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         enableBfloat16Sendrecv)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+                timelineStep__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "timeline_step"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional timelineStep)
+                      :: Data.ProtoLens.FieldDescriptor GraphOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 2, enableRecvScheduling__field_descriptor),
+                    (Data.ProtoLens.Tag 3, optimizerOptions__field_descriptor),
+                    (Data.ProtoLens.Tag 4, buildCostModel__field_descriptor),
+                    (Data.ProtoLens.Tag 9, buildCostModelAfter__field_descriptor),
+                    (Data.ProtoLens.Tag 5, inferShapes__field_descriptor),
+                    (Data.ProtoLens.Tag 6, placePrunedGraph__field_descriptor),
+                    (Data.ProtoLens.Tag 7, enableBfloat16Sendrecv__field_descriptor),
+                    (Data.ProtoLens.Tag 8, timelineStep__field_descriptor)])
+                (Data.Map.fromList
+                   [("enable_recv_scheduling",
+                     enableRecvScheduling__field_descriptor),
+                    ("optimizer_options", optimizerOptions__field_descriptor),
+                    ("build_cost_model", buildCostModel__field_descriptor),
+                    ("build_cost_model_after", buildCostModelAfter__field_descriptor),
+                    ("infer_shapes", inferShapes__field_descriptor),
+                    ("place_pruned_graph", placePrunedGraph__field_descriptor),
+                    ("enable_bfloat16_sendrecv",
+                     enableBfloat16Sendrecv__field_descriptor),
+                    ("timeline_step", timelineStep__field_descriptor)])
+
+data OptimizerOptions = OptimizerOptions{_OptimizerOptions'doCommonSubexpressionElimination
+                                         :: !Prelude.Bool,
+                                         _OptimizerOptions'doConstantFolding :: !Prelude.Bool,
+                                         _OptimizerOptions'doFunctionInlining :: !Prelude.Bool,
+                                         _OptimizerOptions'optLevel :: !OptimizerOptions'Level,
+                                         _OptimizerOptions'globalJitLevel ::
+                                         !OptimizerOptions'GlobalJitLevel}
+                      deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "doCommonSubexpressionElimination" f
+           OptimizerOptions
+           OptimizerOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens
+              _OptimizerOptions'doCommonSubexpressionElimination
+              (\ x__ y__ ->
+                 x__{_OptimizerOptions'doCommonSubexpressionElimination = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "doConstantFolding" f OptimizerOptions
+           OptimizerOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OptimizerOptions'doConstantFolding
+              (\ x__ y__ -> x__{_OptimizerOptions'doConstantFolding = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "doFunctionInlining" f OptimizerOptions
+           OptimizerOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OptimizerOptions'doFunctionInlining
+              (\ x__ y__ -> x__{_OptimizerOptions'doFunctionInlining = y__})
+
+instance (a ~ OptimizerOptions'Level, b ~ OptimizerOptions'Level,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "optLevel" f OptimizerOptions OptimizerOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OptimizerOptions'optLevel
+              (\ x__ y__ -> x__{_OptimizerOptions'optLevel = y__})
+
+instance (a ~ OptimizerOptions'GlobalJitLevel,
+          b ~ OptimizerOptions'GlobalJitLevel, Prelude.Functor f) =>
+         Lens.Labels.HasLens "globalJitLevel" f OptimizerOptions
+           OptimizerOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _OptimizerOptions'globalJitLevel
+              (\ x__ y__ -> x__{_OptimizerOptions'globalJitLevel = y__})
+
+instance Data.Default.Class.Default OptimizerOptions where
+        def
+          = OptimizerOptions{_OptimizerOptions'doCommonSubexpressionElimination
+                               = Data.ProtoLens.fieldDefault,
+                             _OptimizerOptions'doConstantFolding = Data.ProtoLens.fieldDefault,
+                             _OptimizerOptions'doFunctionInlining = Data.ProtoLens.fieldDefault,
+                             _OptimizerOptions'optLevel = Data.Default.Class.def,
+                             _OptimizerOptions'globalJitLevel = Data.Default.Class.def}
+
+instance Data.ProtoLens.Message OptimizerOptions where
+        descriptor
+          = let doCommonSubexpressionElimination__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor
+                      "do_common_subexpression_elimination"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         doCommonSubexpressionElimination)
+                      :: Data.ProtoLens.FieldDescriptor OptimizerOptions
+                doConstantFolding__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "do_constant_folding"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         doConstantFolding)
+                      :: Data.ProtoLens.FieldDescriptor OptimizerOptions
+                doFunctionInlining__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "do_function_inlining"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         doFunctionInlining)
+                      :: Data.ProtoLens.FieldDescriptor OptimizerOptions
+                optLevel__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "opt_level"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor OptimizerOptions'Level)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional optLevel)
+                      :: Data.ProtoLens.FieldDescriptor OptimizerOptions
+                globalJitLevel__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "global_jit_level"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor OptimizerOptions'GlobalJitLevel)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional globalJitLevel)
+                      :: Data.ProtoLens.FieldDescriptor OptimizerOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1,
+                     doCommonSubexpressionElimination__field_descriptor),
+                    (Data.ProtoLens.Tag 2, doConstantFolding__field_descriptor),
+                    (Data.ProtoLens.Tag 4, doFunctionInlining__field_descriptor),
+                    (Data.ProtoLens.Tag 3, optLevel__field_descriptor),
+                    (Data.ProtoLens.Tag 5, globalJitLevel__field_descriptor)])
+                (Data.Map.fromList
+                   [("do_common_subexpression_elimination",
+                     doCommonSubexpressionElimination__field_descriptor),
+                    ("do_constant_folding", doConstantFolding__field_descriptor),
+                    ("do_function_inlining", doFunctionInlining__field_descriptor),
+                    ("opt_level", optLevel__field_descriptor),
+                    ("global_jit_level", globalJitLevel__field_descriptor)])
+
+data OptimizerOptions'GlobalJitLevel = OptimizerOptions'OFF
+                                     | OptimizerOptions'DEFAULT
+                                     | OptimizerOptions'ON_1
+                                     | OptimizerOptions'ON_2
+                                     deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default OptimizerOptions'GlobalJitLevel
+         where
+        def = OptimizerOptions'OFF
+
+instance Data.ProtoLens.FieldDefault
+           OptimizerOptions'GlobalJitLevel
+         where
+        fieldDefault = OptimizerOptions'OFF
+
+instance Data.ProtoLens.MessageEnum OptimizerOptions'GlobalJitLevel
+         where
+        maybeToEnum (-1) = Prelude.Just OptimizerOptions'OFF
+        maybeToEnum 0 = Prelude.Just OptimizerOptions'DEFAULT
+        maybeToEnum 1 = Prelude.Just OptimizerOptions'ON_1
+        maybeToEnum 2 = Prelude.Just OptimizerOptions'ON_2
+        maybeToEnum _ = Prelude.Nothing
+        showEnum OptimizerOptions'OFF = "OFF"
+        showEnum OptimizerOptions'DEFAULT = "DEFAULT"
+        showEnum OptimizerOptions'ON_1 = "ON_1"
+        showEnum OptimizerOptions'ON_2 = "ON_2"
+        readEnum "OFF" = Prelude.Just OptimizerOptions'OFF
+        readEnum "DEFAULT" = Prelude.Just OptimizerOptions'DEFAULT
+        readEnum "ON_1" = Prelude.Just OptimizerOptions'ON_1
+        readEnum "ON_2" = Prelude.Just OptimizerOptions'ON_2
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum OptimizerOptions'GlobalJitLevel where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum GlobalJitLevel: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum OptimizerOptions'OFF = -1
+        fromEnum OptimizerOptions'DEFAULT = 0
+        fromEnum OptimizerOptions'ON_1 = 1
+        fromEnum OptimizerOptions'ON_2 = 2
+        succ OptimizerOptions'ON_2
+          = Prelude.error
+              "OptimizerOptions'GlobalJitLevel.succ: bad argument OptimizerOptions'ON_2. This value would be out of bounds."
+        succ OptimizerOptions'OFF = OptimizerOptions'DEFAULT
+        succ OptimizerOptions'DEFAULT = OptimizerOptions'ON_1
+        succ OptimizerOptions'ON_1 = OptimizerOptions'ON_2
+        pred OptimizerOptions'OFF
+          = Prelude.error
+              "OptimizerOptions'GlobalJitLevel.pred: bad argument OptimizerOptions'OFF. This value would be out of bounds."
+        pred OptimizerOptions'DEFAULT = OptimizerOptions'OFF
+        pred OptimizerOptions'ON_1 = OptimizerOptions'DEFAULT
+        pred OptimizerOptions'ON_2 = OptimizerOptions'ON_1
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded OptimizerOptions'GlobalJitLevel where
+        minBound = OptimizerOptions'OFF
+        maxBound = OptimizerOptions'ON_2
+
+data OptimizerOptions'Level = OptimizerOptions'L0
+                            | OptimizerOptions'L1
+                            deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default OptimizerOptions'Level where
+        def = OptimizerOptions'L0
+
+instance Data.ProtoLens.FieldDefault OptimizerOptions'Level where
+        fieldDefault = OptimizerOptions'L0
+
+instance Data.ProtoLens.MessageEnum OptimizerOptions'Level where
+        maybeToEnum (-1) = Prelude.Just OptimizerOptions'L0
+        maybeToEnum 0 = Prelude.Just OptimizerOptions'L1
+        maybeToEnum _ = Prelude.Nothing
+        showEnum OptimizerOptions'L0 = "L0"
+        showEnum OptimizerOptions'L1 = "L1"
+        readEnum "L0" = Prelude.Just OptimizerOptions'L0
+        readEnum "L1" = Prelude.Just OptimizerOptions'L1
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum OptimizerOptions'Level where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum Level: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum OptimizerOptions'L0 = -1
+        fromEnum OptimizerOptions'L1 = 0
+        succ OptimizerOptions'L1
+          = Prelude.error
+              "OptimizerOptions'Level.succ: bad argument OptimizerOptions'L1. This value would be out of bounds."
+        succ OptimizerOptions'L0 = OptimizerOptions'L1
+        pred OptimizerOptions'L0
+          = Prelude.error
+              "OptimizerOptions'Level.pred: bad argument OptimizerOptions'L0. This value would be out of bounds."
+        pred OptimizerOptions'L1 = OptimizerOptions'L0
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded OptimizerOptions'Level where
+        minBound = OptimizerOptions'L0
+        maxBound = OptimizerOptions'L1
+
+data RPCOptions = RPCOptions{_RPCOptions'useRpcForInprocessMaster
+                             :: !Prelude.Bool}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "useRpcForInprocessMaster" f RPCOptions
+           RPCOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RPCOptions'useRpcForInprocessMaster
+              (\ x__ y__ -> x__{_RPCOptions'useRpcForInprocessMaster = y__})
+
+instance Data.Default.Class.Default RPCOptions where
+        def
+          = RPCOptions{_RPCOptions'useRpcForInprocessMaster =
+                         Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message RPCOptions where
+        descriptor
+          = let useRpcForInprocessMaster__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "use_rpc_for_inprocess_master"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         useRpcForInprocessMaster)
+                      :: Data.ProtoLens.FieldDescriptor RPCOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1,
+                     useRpcForInprocessMaster__field_descriptor)])
+                (Data.Map.fromList
+                   [("use_rpc_for_inprocess_master",
+                     useRpcForInprocessMaster__field_descriptor)])
+
+data RunMetadata = RunMetadata{_RunMetadata'stepStats ::
+                               !(Prelude.Maybe
+                                   Proto.Tensorflow.Core.Framework.StepStats.StepStats),
+                               _RunMetadata'costGraph ::
+                               !(Prelude.Maybe
+                                   Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef),
+                               _RunMetadata'partitionGraphs ::
+                               ![Proto.Tensorflow.Core.Framework.Graph.GraphDef]}
+                 deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Proto.Tensorflow.Core.Framework.StepStats.StepStats,
+          b ~ Proto.Tensorflow.Core.Framework.StepStats.StepStats,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "stepStats" f RunMetadata RunMetadata a b
+         where
+        lensOf _
+          = (Prelude..) maybe'stepStats
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.StepStats.StepStats,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.StepStats.StepStats,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'stepStats" f RunMetadata RunMetadata a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunMetadata'stepStats
+              (\ x__ y__ -> x__{_RunMetadata'stepStats = y__})
+
+instance (a ~
+            Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef,
+          b ~ Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "costGraph" f RunMetadata RunMetadata a b
+         where
+        lensOf _
+          = (Prelude..) maybe'costGraph
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef,
+          b ~
+            Prelude.Maybe
+              Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'costGraph" f RunMetadata RunMetadata a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunMetadata'costGraph
+              (\ x__ y__ -> x__{_RunMetadata'costGraph = y__})
+
+instance (a ~ [Proto.Tensorflow.Core.Framework.Graph.GraphDef],
+          b ~ [Proto.Tensorflow.Core.Framework.Graph.GraphDef],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "partitionGraphs" f RunMetadata RunMetadata a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunMetadata'partitionGraphs
+              (\ x__ y__ -> x__{_RunMetadata'partitionGraphs = y__})
+
+instance Data.Default.Class.Default RunMetadata where
+        def
+          = RunMetadata{_RunMetadata'stepStats = Prelude.Nothing,
+                        _RunMetadata'costGraph = Prelude.Nothing,
+                        _RunMetadata'partitionGraphs = []}
+
+instance Data.ProtoLens.Message RunMetadata where
+        descriptor
+          = let stepStats__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "step_stats"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.StepStats.StepStats)
+                      (Data.ProtoLens.OptionalField maybe'stepStats)
+                      :: Data.ProtoLens.FieldDescriptor RunMetadata
+                costGraph__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "cost_graph"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.CostGraph.CostGraphDef)
+                      (Data.ProtoLens.OptionalField maybe'costGraph)
+                      :: Data.ProtoLens.FieldDescriptor RunMetadata
+                partitionGraphs__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "partition_graphs"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Graph.GraphDef)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         partitionGraphs)
+                      :: Data.ProtoLens.FieldDescriptor RunMetadata
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, stepStats__field_descriptor),
+                    (Data.ProtoLens.Tag 2, costGraph__field_descriptor),
+                    (Data.ProtoLens.Tag 3, partitionGraphs__field_descriptor)])
+                (Data.Map.fromList
+                   [("step_stats", stepStats__field_descriptor),
+                    ("cost_graph", costGraph__field_descriptor),
+                    ("partition_graphs", partitionGraphs__field_descriptor)])
+
+data RunOptions = RunOptions{_RunOptions'traceLevel ::
+                             !RunOptions'TraceLevel,
+                             _RunOptions'timeoutInMs :: !Data.Int.Int64,
+                             _RunOptions'interOpThreadPool :: !Data.Int.Int32,
+                             _RunOptions'outputPartitionGraphs :: !Prelude.Bool,
+                             _RunOptions'debugOptions ::
+                             !(Prelude.Maybe Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions)}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ RunOptions'TraceLevel, b ~ RunOptions'TraceLevel,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "traceLevel" f RunOptions RunOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunOptions'traceLevel
+              (\ x__ y__ -> x__{_RunOptions'traceLevel = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "timeoutInMs" f RunOptions RunOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunOptions'timeoutInMs
+              (\ x__ y__ -> x__{_RunOptions'timeoutInMs = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "interOpThreadPool" f RunOptions RunOptions a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunOptions'interOpThreadPool
+              (\ x__ y__ -> x__{_RunOptions'interOpThreadPool = y__})
+
+instance (a ~ Prelude.Bool, b ~ Prelude.Bool, Prelude.Functor f) =>
+         Lens.Labels.HasLens "outputPartitionGraphs" f RunOptions RunOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunOptions'outputPartitionGraphs
+              (\ x__ y__ -> x__{_RunOptions'outputPartitionGraphs = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions,
+          b ~ Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "debugOptions" f RunOptions RunOptions a b
+         where
+        lensOf _
+          = (Prelude..) maybe'debugOptions
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions,
+          b ~
+            Prelude.Maybe Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'debugOptions" f RunOptions RunOptions a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _RunOptions'debugOptions
+              (\ x__ y__ -> x__{_RunOptions'debugOptions = y__})
+
+instance Data.Default.Class.Default RunOptions where
+        def
+          = RunOptions{_RunOptions'traceLevel = Data.Default.Class.def,
+                       _RunOptions'timeoutInMs = Data.ProtoLens.fieldDefault,
+                       _RunOptions'interOpThreadPool = Data.ProtoLens.fieldDefault,
+                       _RunOptions'outputPartitionGraphs = Data.ProtoLens.fieldDefault,
+                       _RunOptions'debugOptions = Prelude.Nothing}
+
+instance Data.ProtoLens.Message RunOptions where
+        descriptor
+          = let traceLevel__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "trace_level"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor RunOptions'TraceLevel)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional traceLevel)
+                      :: Data.ProtoLens.FieldDescriptor RunOptions
+                timeoutInMs__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "timeout_in_ms"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional timeoutInMs)
+                      :: Data.ProtoLens.FieldDescriptor RunOptions
+                interOpThreadPool__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "inter_op_thread_pool"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         interOpThreadPool)
+                      :: Data.ProtoLens.FieldDescriptor RunOptions
+                outputPartitionGraphs__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "output_partition_graphs"
+                      (Data.ProtoLens.BoolField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional
+                         outputPartitionGraphs)
+                      :: Data.ProtoLens.FieldDescriptor RunOptions
+                debugOptions__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "debug_options"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Protobuf.Debug.DebugOptions)
+                      (Data.ProtoLens.OptionalField maybe'debugOptions)
+                      :: Data.ProtoLens.FieldDescriptor RunOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, traceLevel__field_descriptor),
+                    (Data.ProtoLens.Tag 2, timeoutInMs__field_descriptor),
+                    (Data.ProtoLens.Tag 3, interOpThreadPool__field_descriptor),
+                    (Data.ProtoLens.Tag 5, outputPartitionGraphs__field_descriptor),
+                    (Data.ProtoLens.Tag 6, debugOptions__field_descriptor)])
+                (Data.Map.fromList
+                   [("trace_level", traceLevel__field_descriptor),
+                    ("timeout_in_ms", timeoutInMs__field_descriptor),
+                    ("inter_op_thread_pool", interOpThreadPool__field_descriptor),
+                    ("output_partition_graphs",
+                     outputPartitionGraphs__field_descriptor),
+                    ("debug_options", debugOptions__field_descriptor)])
+
+data RunOptions'TraceLevel = RunOptions'NO_TRACE
+                           | RunOptions'SOFTWARE_TRACE
+                           | RunOptions'HARDWARE_TRACE
+                           | RunOptions'FULL_TRACE
+                           deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default RunOptions'TraceLevel where
+        def = RunOptions'NO_TRACE
+
+instance Data.ProtoLens.FieldDefault RunOptions'TraceLevel where
+        fieldDefault = RunOptions'NO_TRACE
+
+instance Data.ProtoLens.MessageEnum RunOptions'TraceLevel where
+        maybeToEnum 0 = Prelude.Just RunOptions'NO_TRACE
+        maybeToEnum 1 = Prelude.Just RunOptions'SOFTWARE_TRACE
+        maybeToEnum 2 = Prelude.Just RunOptions'HARDWARE_TRACE
+        maybeToEnum 3 = Prelude.Just RunOptions'FULL_TRACE
+        maybeToEnum _ = Prelude.Nothing
+        showEnum RunOptions'NO_TRACE = "NO_TRACE"
+        showEnum RunOptions'SOFTWARE_TRACE = "SOFTWARE_TRACE"
+        showEnum RunOptions'HARDWARE_TRACE = "HARDWARE_TRACE"
+        showEnum RunOptions'FULL_TRACE = "FULL_TRACE"
+        readEnum "NO_TRACE" = Prelude.Just RunOptions'NO_TRACE
+        readEnum "SOFTWARE_TRACE" = Prelude.Just RunOptions'SOFTWARE_TRACE
+        readEnum "HARDWARE_TRACE" = Prelude.Just RunOptions'HARDWARE_TRACE
+        readEnum "FULL_TRACE" = Prelude.Just RunOptions'FULL_TRACE
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum RunOptions'TraceLevel where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum TraceLevel: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum RunOptions'NO_TRACE = 0
+        fromEnum RunOptions'SOFTWARE_TRACE = 1
+        fromEnum RunOptions'HARDWARE_TRACE = 2
+        fromEnum RunOptions'FULL_TRACE = 3
+        succ RunOptions'FULL_TRACE
+          = Prelude.error
+              "RunOptions'TraceLevel.succ: bad argument RunOptions'FULL_TRACE. This value would be out of bounds."
+        succ RunOptions'NO_TRACE = RunOptions'SOFTWARE_TRACE
+        succ RunOptions'SOFTWARE_TRACE = RunOptions'HARDWARE_TRACE
+        succ RunOptions'HARDWARE_TRACE = RunOptions'FULL_TRACE
+        pred RunOptions'NO_TRACE
+          = Prelude.error
+              "RunOptions'TraceLevel.pred: bad argument RunOptions'NO_TRACE. This value would be out of bounds."
+        pred RunOptions'SOFTWARE_TRACE = RunOptions'NO_TRACE
+        pred RunOptions'HARDWARE_TRACE = RunOptions'SOFTWARE_TRACE
+        pred RunOptions'FULL_TRACE = RunOptions'HARDWARE_TRACE
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded RunOptions'TraceLevel where
+        minBound = RunOptions'NO_TRACE
+        maxBound = RunOptions'FULL_TRACE
+
+data ThreadPoolOptionProto = ThreadPoolOptionProto{_ThreadPoolOptionProto'numThreads
+                                                   :: !Data.Int.Int32}
+                           deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "numThreads" f ThreadPoolOptionProto
+           ThreadPoolOptionProto
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _ThreadPoolOptionProto'numThreads
+              (\ x__ y__ -> x__{_ThreadPoolOptionProto'numThreads = y__})
+
+instance Data.Default.Class.Default ThreadPoolOptionProto where
+        def
+          = ThreadPoolOptionProto{_ThreadPoolOptionProto'numThreads =
+                                    Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message ThreadPoolOptionProto where
+        descriptor
+          = let numThreads__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "num_threads"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional numThreads)
+                      :: Data.ProtoLens.FieldDescriptor ThreadPoolOptionProto
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, numThreads__field_descriptor)])
+                (Data.Map.fromList [("num_threads", numThreads__field_descriptor)])
+
+allocatorType ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "allocatorType" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+allocatorType
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allocatorType")
+
+allowGrowth ::
+            forall f s t a b . (Lens.Labels.HasLens "allowGrowth" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+allowGrowth
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allowGrowth")
+
+allowSoftPlacement ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "allowSoftPlacement" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+allowSoftPlacement
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "allowSoftPlacement")
+
+buildCostModel ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "buildCostModel" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+buildCostModel
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "buildCostModel")
+
+buildCostModelAfter ::
+                    forall f s t a b .
+                      (Lens.Labels.HasLens "buildCostModelAfter" f s t a b) =>
+                      Lens.Family2.LensLike f s t a b
+buildCostModelAfter
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "buildCostModelAfter")
+
+costGraph ::
+          forall f s t a b . (Lens.Labels.HasLens "costGraph" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+costGraph
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "costGraph")
+
+debugOptions ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "debugOptions" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+debugOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "debugOptions")
+
+deferredDeletionBytes ::
+                      forall f s t a b .
+                        (Lens.Labels.HasLens "deferredDeletionBytes" f s t a b) =>
+                        Lens.Family2.LensLike f s t a b
+deferredDeletionBytes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "deferredDeletionBytes")
+
+deviceCount ::
+            forall f s t a b . (Lens.Labels.HasLens "deviceCount" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+deviceCount
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "deviceCount")
+
+deviceFilters ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "deviceFilters" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+deviceFilters
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "deviceFilters")
+
+doCommonSubexpressionElimination ::
+                                 forall f s t a b .
+                                   (Lens.Labels.HasLens "doCommonSubexpressionElimination" f s t a
+                                      b) =>
+                                   Lens.Family2.LensLike f s t a b
+doCommonSubexpressionElimination
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "doCommonSubexpressionElimination")
+
+doConstantFolding ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "doConstantFolding" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+doConstantFolding
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "doConstantFolding")
+
+doFunctionInlining ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "doFunctionInlining" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+doFunctionInlining
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "doFunctionInlining")
+
+enableBfloat16Sendrecv ::
+                       forall f s t a b .
+                         (Lens.Labels.HasLens "enableBfloat16Sendrecv" f s t a b) =>
+                         Lens.Family2.LensLike f s t a b
+enableBfloat16Sendrecv
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "enableBfloat16Sendrecv")
+
+enableRecvScheduling ::
+                     forall f s t a b .
+                       (Lens.Labels.HasLens "enableRecvScheduling" f s t a b) =>
+                       Lens.Family2.LensLike f s t a b
+enableRecvScheduling
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "enableRecvScheduling")
+
+globalJitLevel ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "globalJitLevel" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+globalJitLevel
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "globalJitLevel")
+
+gpuOptions ::
+           forall f s t a b . (Lens.Labels.HasLens "gpuOptions" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+gpuOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "gpuOptions")
+
+graphOptions ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "graphOptions" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+graphOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "graphOptions")
+
+inferShapes ::
+            forall f s t a b . (Lens.Labels.HasLens "inferShapes" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+inferShapes
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "inferShapes")
+
+interOpParallelismThreads ::
+                          forall f s t a b .
+                            (Lens.Labels.HasLens "interOpParallelismThreads" f s t a b) =>
+                            Lens.Family2.LensLike f s t a b
+interOpParallelismThreads
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "interOpParallelismThreads")
+
+interOpThreadPool ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "interOpThreadPool" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+interOpThreadPool
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "interOpThreadPool")
+
+intraOpParallelismThreads ::
+                          forall f s t a b .
+                            (Lens.Labels.HasLens "intraOpParallelismThreads" f s t a b) =>
+                            Lens.Family2.LensLike f s t a b
+intraOpParallelismThreads
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "intraOpParallelismThreads")
+
+key ::
+    forall f s t a b . (Lens.Labels.HasLens "key" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+key
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")
+
+logDevicePlacement ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "logDevicePlacement" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+logDevicePlacement
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "logDevicePlacement")
+
+maybe'costGraph ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "maybe'costGraph" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+maybe'costGraph
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'costGraph")
+
+maybe'debugOptions ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "maybe'debugOptions" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+maybe'debugOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'debugOptions")
+
+maybe'gpuOptions ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "maybe'gpuOptions" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+maybe'gpuOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'gpuOptions")
+
+maybe'graphOptions ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "maybe'graphOptions" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+maybe'graphOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'graphOptions")
+
+maybe'optimizerOptions ::
+                       forall f s t a b .
+                         (Lens.Labels.HasLens "maybe'optimizerOptions" f s t a b) =>
+                         Lens.Family2.LensLike f s t a b
+maybe'optimizerOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'optimizerOptions")
+
+maybe'rpcOptions ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "maybe'rpcOptions" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+maybe'rpcOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'rpcOptions")
+
+maybe'stepStats ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "maybe'stepStats" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+maybe'stepStats
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'stepStats")
+
+numThreads ::
+           forall f s t a b . (Lens.Labels.HasLens "numThreads" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+numThreads
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "numThreads")
+
+operationTimeoutInMs ::
+                     forall f s t a b .
+                       (Lens.Labels.HasLens "operationTimeoutInMs" f s t a b) =>
+                       Lens.Family2.LensLike f s t a b
+operationTimeoutInMs
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "operationTimeoutInMs")
+
+optLevel ::
+         forall f s t a b . (Lens.Labels.HasLens "optLevel" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+optLevel
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "optLevel")
+
+optimizerOptions ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "optimizerOptions" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+optimizerOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "optimizerOptions")
+
+outputPartitionGraphs ::
+                      forall f s t a b .
+                        (Lens.Labels.HasLens "outputPartitionGraphs" f s t a b) =>
+                        Lens.Family2.LensLike f s t a b
+outputPartitionGraphs
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "outputPartitionGraphs")
+
+partitionGraphs ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "partitionGraphs" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+partitionGraphs
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "partitionGraphs")
+
+perProcessGpuMemoryFraction ::
+                            forall f s t a b .
+                              (Lens.Labels.HasLens "perProcessGpuMemoryFraction" f s t a b) =>
+                              Lens.Family2.LensLike f s t a b
+perProcessGpuMemoryFraction
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "perProcessGpuMemoryFraction")
+
+placePrunedGraph ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "placePrunedGraph" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+placePrunedGraph
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "placePrunedGraph")
+
+placementPeriod ::
+                forall f s t a b .
+                  (Lens.Labels.HasLens "placementPeriod" f s t a b) =>
+                  Lens.Family2.LensLike f s t a b
+placementPeriod
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "placementPeriod")
+
+rpcOptions ::
+           forall f s t a b . (Lens.Labels.HasLens "rpcOptions" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+rpcOptions
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "rpcOptions")
+
+sessionInterOpThreadPool ::
+                         forall f s t a b .
+                           (Lens.Labels.HasLens "sessionInterOpThreadPool" f s t a b) =>
+                           Lens.Family2.LensLike f s t a b
+sessionInterOpThreadPool
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "sessionInterOpThreadPool")
+
+stepStats ::
+          forall f s t a b . (Lens.Labels.HasLens "stepStats" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+stepStats
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "stepStats")
+
+timelineStep ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "timelineStep" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+timelineStep
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "timelineStep")
+
+timeoutInMs ::
+            forall f s t a b . (Lens.Labels.HasLens "timeoutInMs" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+timeoutInMs
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "timeoutInMs")
+
+traceLevel ::
+           forall f s t a b . (Lens.Labels.HasLens "traceLevel" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+traceLevel
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "traceLevel")
+
+usePerSessionThreads ::
+                     forall f s t a b .
+                       (Lens.Labels.HasLens "usePerSessionThreads" f s t a b) =>
+                       Lens.Family2.LensLike f s t a b
+usePerSessionThreads
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "usePerSessionThreads")
+
+useRpcForInprocessMaster ::
+                         forall f s t a b .
+                           (Lens.Labels.HasLens "useRpcForInprocessMaster" f s t a b) =>
+                           Lens.Family2.LensLike f s t a b
+useRpcForInprocessMaster
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "useRpcForInprocessMaster")
+
+value ::
+      forall f s t a b . (Lens.Labels.HasLens "value" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+value
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")
+
+visibleDeviceList ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "visibleDeviceList" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+visibleDeviceList
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "visibleDeviceList")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Debug.hs b/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Debug.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Protobuf/Debug.hs
@@ -0,0 +1,191 @@
+{- This file was auto-generated from tensorflow/core/protobuf/debug.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Protobuf.Debug where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+
+data DebugOptions = DebugOptions{_DebugOptions'debugTensorWatchOpts
+                                 :: ![DebugTensorWatch]}
+                  deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ [DebugTensorWatch], b ~ [DebugTensorWatch],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "debugTensorWatchOpts" f DebugOptions
+           DebugOptions
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DebugOptions'debugTensorWatchOpts
+              (\ x__ y__ -> x__{_DebugOptions'debugTensorWatchOpts = y__})
+
+instance Data.Default.Class.Default DebugOptions where
+        def = DebugOptions{_DebugOptions'debugTensorWatchOpts = []}
+
+instance Data.ProtoLens.Message DebugOptions where
+        descriptor
+          = let debugTensorWatchOpts__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "debug_tensor_watch_opts"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor DebugTensorWatch)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked
+                         debugTensorWatchOpts)
+                      :: Data.ProtoLens.FieldDescriptor DebugOptions
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 4, debugTensorWatchOpts__field_descriptor)])
+                (Data.Map.fromList
+                   [("debug_tensor_watch_opts",
+                     debugTensorWatchOpts__field_descriptor)])
+
+data DebugTensorWatch = DebugTensorWatch{_DebugTensorWatch'nodeName
+                                         :: !Data.Text.Text,
+                                         _DebugTensorWatch'outputSlot :: !Data.Int.Int32,
+                                         _DebugTensorWatch'debugOps :: ![Data.Text.Text],
+                                         _DebugTensorWatch'debugUrls :: ![Data.Text.Text]}
+                      deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "nodeName" f DebugTensorWatch DebugTensorWatch
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DebugTensorWatch'nodeName
+              (\ x__ y__ -> x__{_DebugTensorWatch'nodeName = y__})
+
+instance (a ~ Data.Int.Int32, b ~ Data.Int.Int32,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "outputSlot" f DebugTensorWatch
+           DebugTensorWatch
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DebugTensorWatch'outputSlot
+              (\ x__ y__ -> x__{_DebugTensorWatch'outputSlot = y__})
+
+instance (a ~ [Data.Text.Text], b ~ [Data.Text.Text],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "debugOps" f DebugTensorWatch DebugTensorWatch
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DebugTensorWatch'debugOps
+              (\ x__ y__ -> x__{_DebugTensorWatch'debugOps = y__})
+
+instance (a ~ [Data.Text.Text], b ~ [Data.Text.Text],
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "debugUrls" f DebugTensorWatch DebugTensorWatch
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _DebugTensorWatch'debugUrls
+              (\ x__ y__ -> x__{_DebugTensorWatch'debugUrls = y__})
+
+instance Data.Default.Class.Default DebugTensorWatch where
+        def
+          = DebugTensorWatch{_DebugTensorWatch'nodeName =
+                               Data.ProtoLens.fieldDefault,
+                             _DebugTensorWatch'outputSlot = Data.ProtoLens.fieldDefault,
+                             _DebugTensorWatch'debugOps = [], _DebugTensorWatch'debugUrls = []}
+
+instance Data.ProtoLens.Message DebugTensorWatch where
+        descriptor
+          = let nodeName__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "node_name"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional nodeName)
+                      :: Data.ProtoLens.FieldDescriptor DebugTensorWatch
+                outputSlot__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "output_slot"
+                      (Data.ProtoLens.Int32Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional outputSlot)
+                      :: Data.ProtoLens.FieldDescriptor DebugTensorWatch
+                debugOps__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "debug_ops"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked debugOps)
+                      :: Data.ProtoLens.FieldDescriptor DebugTensorWatch
+                debugUrls__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "debug_urls"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked debugUrls)
+                      :: Data.ProtoLens.FieldDescriptor DebugTensorWatch
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, nodeName__field_descriptor),
+                    (Data.ProtoLens.Tag 2, outputSlot__field_descriptor),
+                    (Data.ProtoLens.Tag 3, debugOps__field_descriptor),
+                    (Data.ProtoLens.Tag 4, debugUrls__field_descriptor)])
+                (Data.Map.fromList
+                   [("node_name", nodeName__field_descriptor),
+                    ("output_slot", outputSlot__field_descriptor),
+                    ("debug_ops", debugOps__field_descriptor),
+                    ("debug_urls", debugUrls__field_descriptor)])
+
+debugOps ::
+         forall f s t a b . (Lens.Labels.HasLens "debugOps" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+debugOps
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "debugOps")
+
+debugTensorWatchOpts ::
+                     forall f s t a b .
+                       (Lens.Labels.HasLens "debugTensorWatchOpts" f s t a b) =>
+                       Lens.Family2.LensLike f s t a b
+debugTensorWatchOpts
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "debugTensorWatchOpts")
+
+debugUrls ::
+          forall f s t a b . (Lens.Labels.HasLens "debugUrls" f s t a b) =>
+            Lens.Family2.LensLike f s t a b
+debugUrls
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "debugUrls")
+
+nodeName ::
+         forall f s t a b . (Lens.Labels.HasLens "nodeName" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+nodeName
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "nodeName")
+
+outputSlot ::
+           forall f s t a b . (Lens.Labels.HasLens "outputSlot" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+outputSlot
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "outputSlot")
diff --git a/dist/build/autogen/Proto/Tensorflow/Core/Util/Event.hs b/dist/build/autogen/Proto/Tensorflow/Core/Util/Event.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Proto/Tensorflow/Core/Util/Event.hs
@@ -0,0 +1,738 @@
+{- This file was auto-generated from tensorflow/core/util/event.proto by the proto-lens-protoc program. -}
+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,
+  UndecidableInstances, MultiParamTypeClasses, FlexibleContexts,
+  FlexibleInstances, PatternSynonyms, MagicHash #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports#-}
+module Proto.Tensorflow.Core.Util.Event where
+import qualified Prelude
+import qualified Data.Int
+import qualified Data.Word
+import qualified Data.ProtoLens.Reexport.Data.ProtoLens
+       as Data.ProtoLens
+import qualified
+       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum
+       as Data.ProtoLens.Message.Enum
+import qualified Data.ProtoLens.Reexport.Lens.Family2
+       as Lens.Family2
+import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked
+       as Lens.Family2.Unchecked
+import qualified Data.ProtoLens.Reexport.Data.Default.Class
+       as Data.Default.Class
+import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text
+import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map
+import qualified Data.ProtoLens.Reexport.Data.ByteString
+       as Data.ByteString
+import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels
+import qualified Proto.Tensorflow.Core.Framework.Summary
+
+data Event = Event{_Event'wallTime :: !Prelude.Double,
+                   _Event'step :: !Data.Int.Int64,
+                   _Event'fileVersion :: !(Prelude.Maybe Data.Text.Text),
+                   _Event'graphDef :: !(Prelude.Maybe Data.ByteString.ByteString),
+                   _Event'summary ::
+                   !(Prelude.Maybe Proto.Tensorflow.Core.Framework.Summary.Summary),
+                   _Event'logMessage :: !(Prelude.Maybe LogMessage),
+                   _Event'sessionLog :: !(Prelude.Maybe SessionLog),
+                   _Event'taggedRunMetadata :: !(Prelude.Maybe TaggedRunMetadata),
+                   _Event'metaGraphDef :: !(Prelude.Maybe Data.ByteString.ByteString)}
+           deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Prelude.Double, b ~ Prelude.Double,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "wallTime" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'wallTime
+              (\ x__ y__ -> x__{_Event'wallTime = y__})
+
+instance (a ~ Data.Int.Int64, b ~ Data.Int.Int64,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "step" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'step
+              (\ x__ y__ -> x__{_Event'step = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "fileVersion" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'fileVersion
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.Text.Text,
+          b ~ Prelude.Maybe Data.Text.Text, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'fileVersion" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'fileVersion
+              (\ x__ y__ -> x__{_Event'fileVersion = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "graphDef" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'graphDef
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.ByteString.ByteString,
+          b ~ Prelude.Maybe Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'graphDef" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'graphDef
+              (\ x__ y__ -> x__{_Event'graphDef = y__})
+
+instance (a ~ Proto.Tensorflow.Core.Framework.Summary.Summary,
+          b ~ Proto.Tensorflow.Core.Framework.Summary.Summary,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "summary" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'summary
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~
+            Prelude.Maybe Proto.Tensorflow.Core.Framework.Summary.Summary,
+          b ~ Prelude.Maybe Proto.Tensorflow.Core.Framework.Summary.Summary,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'summary" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'summary
+              (\ x__ y__ -> x__{_Event'summary = y__})
+
+instance (a ~ LogMessage, b ~ LogMessage, Prelude.Functor f) =>
+         Lens.Labels.HasLens "logMessage" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'logMessage
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe LogMessage,
+          b ~ Prelude.Maybe LogMessage, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'logMessage" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'logMessage
+              (\ x__ y__ -> x__{_Event'logMessage = y__})
+
+instance (a ~ SessionLog, b ~ SessionLog, Prelude.Functor f) =>
+         Lens.Labels.HasLens "sessionLog" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'sessionLog
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe SessionLog,
+          b ~ Prelude.Maybe SessionLog, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'sessionLog" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'sessionLog
+              (\ x__ y__ -> x__{_Event'sessionLog = y__})
+
+instance (a ~ TaggedRunMetadata, b ~ TaggedRunMetadata,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "taggedRunMetadata" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'taggedRunMetadata
+              (Data.ProtoLens.maybeLens Data.Default.Class.def)
+
+instance (a ~ Prelude.Maybe TaggedRunMetadata,
+          b ~ Prelude.Maybe TaggedRunMetadata, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'taggedRunMetadata" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'taggedRunMetadata
+              (\ x__ y__ -> x__{_Event'taggedRunMetadata = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "metaGraphDef" f Event Event a b
+         where
+        lensOf _
+          = (Prelude..) maybe'metaGraphDef
+              (Data.ProtoLens.maybeLens Data.ProtoLens.fieldDefault)
+
+instance (a ~ Prelude.Maybe Data.ByteString.ByteString,
+          b ~ Prelude.Maybe Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "maybe'metaGraphDef" f Event Event a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _Event'metaGraphDef
+              (\ x__ y__ -> x__{_Event'metaGraphDef = y__})
+
+instance Data.Default.Class.Default Event where
+        def
+          = Event{_Event'wallTime = Data.ProtoLens.fieldDefault,
+                  _Event'step = Data.ProtoLens.fieldDefault,
+                  _Event'fileVersion = Prelude.Nothing,
+                  _Event'graphDef = Prelude.Nothing,
+                  _Event'summary = Prelude.Nothing,
+                  _Event'logMessage = Prelude.Nothing,
+                  _Event'sessionLog = Prelude.Nothing,
+                  _Event'taggedRunMetadata = Prelude.Nothing,
+                  _Event'metaGraphDef = Prelude.Nothing}
+
+instance Data.ProtoLens.Message Event where
+        descriptor
+          = let wallTime__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "wall_time"
+                      (Data.ProtoLens.DoubleField ::
+                         Data.ProtoLens.FieldTypeDescriptor Prelude.Double)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional wallTime)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                step__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "step"
+                      (Data.ProtoLens.Int64Field ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional step)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                fileVersion__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "file_version"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.OptionalField maybe'fileVersion)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                graphDef__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "graph_def"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.OptionalField maybe'graphDef)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                summary__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "summary"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor
+                           Proto.Tensorflow.Core.Framework.Summary.Summary)
+                      (Data.ProtoLens.OptionalField maybe'summary)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                logMessage__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "log_message"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor LogMessage)
+                      (Data.ProtoLens.OptionalField maybe'logMessage)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                sessionLog__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "session_log"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor SessionLog)
+                      (Data.ProtoLens.OptionalField maybe'sessionLog)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                taggedRunMetadata__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tagged_run_metadata"
+                      (Data.ProtoLens.MessageField ::
+                         Data.ProtoLens.FieldTypeDescriptor TaggedRunMetadata)
+                      (Data.ProtoLens.OptionalField maybe'taggedRunMetadata)
+                      :: Data.ProtoLens.FieldDescriptor Event
+                metaGraphDef__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "meta_graph_def"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.OptionalField maybe'metaGraphDef)
+                      :: Data.ProtoLens.FieldDescriptor Event
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, wallTime__field_descriptor),
+                    (Data.ProtoLens.Tag 2, step__field_descriptor),
+                    (Data.ProtoLens.Tag 3, fileVersion__field_descriptor),
+                    (Data.ProtoLens.Tag 4, graphDef__field_descriptor),
+                    (Data.ProtoLens.Tag 5, summary__field_descriptor),
+                    (Data.ProtoLens.Tag 6, logMessage__field_descriptor),
+                    (Data.ProtoLens.Tag 7, sessionLog__field_descriptor),
+                    (Data.ProtoLens.Tag 8, taggedRunMetadata__field_descriptor),
+                    (Data.ProtoLens.Tag 9, metaGraphDef__field_descriptor)])
+                (Data.Map.fromList
+                   [("wall_time", wallTime__field_descriptor),
+                    ("step", step__field_descriptor),
+                    ("file_version", fileVersion__field_descriptor),
+                    ("graph_def", graphDef__field_descriptor),
+                    ("summary", summary__field_descriptor),
+                    ("log_message", logMessage__field_descriptor),
+                    ("session_log", sessionLog__field_descriptor),
+                    ("tagged_run_metadata", taggedRunMetadata__field_descriptor),
+                    ("meta_graph_def", metaGraphDef__field_descriptor)])
+
+data LogMessage = LogMessage{_LogMessage'level ::
+                             !LogMessage'Level,
+                             _LogMessage'message :: !Data.Text.Text}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ LogMessage'Level, b ~ LogMessage'Level,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "level" f LogMessage LogMessage a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _LogMessage'level
+              (\ x__ y__ -> x__{_LogMessage'level = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "message" f LogMessage LogMessage a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _LogMessage'message
+              (\ x__ y__ -> x__{_LogMessage'message = y__})
+
+instance Data.Default.Class.Default LogMessage where
+        def
+          = LogMessage{_LogMessage'level = Data.Default.Class.def,
+                       _LogMessage'message = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message LogMessage where
+        descriptor
+          = let level__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "level"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor LogMessage'Level)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional level)
+                      :: Data.ProtoLens.FieldDescriptor LogMessage
+                message__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "message"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional message)
+                      :: Data.ProtoLens.FieldDescriptor LogMessage
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, level__field_descriptor),
+                    (Data.ProtoLens.Tag 2, message__field_descriptor)])
+                (Data.Map.fromList
+                   [("level", level__field_descriptor),
+                    ("message", message__field_descriptor)])
+
+data LogMessage'Level = LogMessage'UNKNOWN
+                      | LogMessage'DEBUG
+                      | LogMessage'INFO
+                      | LogMessage'WARN
+                      | LogMessage'ERROR
+                      | LogMessage'FATAL
+                      deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default LogMessage'Level where
+        def = LogMessage'UNKNOWN
+
+instance Data.ProtoLens.FieldDefault LogMessage'Level where
+        fieldDefault = LogMessage'UNKNOWN
+
+instance Data.ProtoLens.MessageEnum LogMessage'Level where
+        maybeToEnum 0 = Prelude.Just LogMessage'UNKNOWN
+        maybeToEnum 10 = Prelude.Just LogMessage'DEBUG
+        maybeToEnum 20 = Prelude.Just LogMessage'INFO
+        maybeToEnum 30 = Prelude.Just LogMessage'WARN
+        maybeToEnum 40 = Prelude.Just LogMessage'ERROR
+        maybeToEnum 50 = Prelude.Just LogMessage'FATAL
+        maybeToEnum _ = Prelude.Nothing
+        showEnum LogMessage'UNKNOWN = "UNKNOWN"
+        showEnum LogMessage'DEBUG = "DEBUG"
+        showEnum LogMessage'INFO = "INFO"
+        showEnum LogMessage'WARN = "WARN"
+        showEnum LogMessage'ERROR = "ERROR"
+        showEnum LogMessage'FATAL = "FATAL"
+        readEnum "UNKNOWN" = Prelude.Just LogMessage'UNKNOWN
+        readEnum "DEBUG" = Prelude.Just LogMessage'DEBUG
+        readEnum "INFO" = Prelude.Just LogMessage'INFO
+        readEnum "WARN" = Prelude.Just LogMessage'WARN
+        readEnum "ERROR" = Prelude.Just LogMessage'ERROR
+        readEnum "FATAL" = Prelude.Just LogMessage'FATAL
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum LogMessage'Level where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum Level: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum LogMessage'UNKNOWN = 0
+        fromEnum LogMessage'DEBUG = 10
+        fromEnum LogMessage'INFO = 20
+        fromEnum LogMessage'WARN = 30
+        fromEnum LogMessage'ERROR = 40
+        fromEnum LogMessage'FATAL = 50
+        succ LogMessage'FATAL
+          = Prelude.error
+              "LogMessage'Level.succ: bad argument LogMessage'FATAL. This value would be out of bounds."
+        succ LogMessage'UNKNOWN = LogMessage'DEBUG
+        succ LogMessage'DEBUG = LogMessage'INFO
+        succ LogMessage'INFO = LogMessage'WARN
+        succ LogMessage'WARN = LogMessage'ERROR
+        succ LogMessage'ERROR = LogMessage'FATAL
+        pred LogMessage'UNKNOWN
+          = Prelude.error
+              "LogMessage'Level.pred: bad argument LogMessage'UNKNOWN. This value would be out of bounds."
+        pred LogMessage'DEBUG = LogMessage'UNKNOWN
+        pred LogMessage'INFO = LogMessage'DEBUG
+        pred LogMessage'WARN = LogMessage'INFO
+        pred LogMessage'ERROR = LogMessage'WARN
+        pred LogMessage'FATAL = LogMessage'ERROR
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded LogMessage'Level where
+        minBound = LogMessage'UNKNOWN
+        maxBound = LogMessage'FATAL
+
+data SessionLog = SessionLog{_SessionLog'status ::
+                             !SessionLog'SessionStatus,
+                             _SessionLog'checkpointPath :: !Data.Text.Text,
+                             _SessionLog'msg :: !Data.Text.Text}
+                deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ SessionLog'SessionStatus,
+          b ~ SessionLog'SessionStatus, Prelude.Functor f) =>
+         Lens.Labels.HasLens "status" f SessionLog SessionLog a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _SessionLog'status
+              (\ x__ y__ -> x__{_SessionLog'status = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "checkpointPath" f SessionLog SessionLog a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _SessionLog'checkpointPath
+              (\ x__ y__ -> x__{_SessionLog'checkpointPath = y__})
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "msg" f SessionLog SessionLog a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _SessionLog'msg
+              (\ x__ y__ -> x__{_SessionLog'msg = y__})
+
+instance Data.Default.Class.Default SessionLog where
+        def
+          = SessionLog{_SessionLog'status = Data.Default.Class.def,
+                       _SessionLog'checkpointPath = Data.ProtoLens.fieldDefault,
+                       _SessionLog'msg = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message SessionLog where
+        descriptor
+          = let status__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "status"
+                      (Data.ProtoLens.EnumField ::
+                         Data.ProtoLens.FieldTypeDescriptor SessionLog'SessionStatus)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional status)
+                      :: Data.ProtoLens.FieldDescriptor SessionLog
+                checkpointPath__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "checkpoint_path"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional checkpointPath)
+                      :: Data.ProtoLens.FieldDescriptor SessionLog
+                msg__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "msg"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional msg)
+                      :: Data.ProtoLens.FieldDescriptor SessionLog
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, status__field_descriptor),
+                    (Data.ProtoLens.Tag 2, checkpointPath__field_descriptor),
+                    (Data.ProtoLens.Tag 3, msg__field_descriptor)])
+                (Data.Map.fromList
+                   [("status", status__field_descriptor),
+                    ("checkpoint_path", checkpointPath__field_descriptor),
+                    ("msg", msg__field_descriptor)])
+
+data SessionLog'SessionStatus = SessionLog'STATUS_UNSPECIFIED
+                              | SessionLog'START
+                              | SessionLog'STOP
+                              | SessionLog'CHECKPOINT
+                              deriving (Prelude.Show, Prelude.Eq)
+
+instance Data.Default.Class.Default SessionLog'SessionStatus where
+        def = SessionLog'STATUS_UNSPECIFIED
+
+instance Data.ProtoLens.FieldDefault SessionLog'SessionStatus where
+        fieldDefault = SessionLog'STATUS_UNSPECIFIED
+
+instance Data.ProtoLens.MessageEnum SessionLog'SessionStatus where
+        maybeToEnum 0 = Prelude.Just SessionLog'STATUS_UNSPECIFIED
+        maybeToEnum 1 = Prelude.Just SessionLog'START
+        maybeToEnum 2 = Prelude.Just SessionLog'STOP
+        maybeToEnum 3 = Prelude.Just SessionLog'CHECKPOINT
+        maybeToEnum _ = Prelude.Nothing
+        showEnum SessionLog'STATUS_UNSPECIFIED = "STATUS_UNSPECIFIED"
+        showEnum SessionLog'START = "START"
+        showEnum SessionLog'STOP = "STOP"
+        showEnum SessionLog'CHECKPOINT = "CHECKPOINT"
+        readEnum "STATUS_UNSPECIFIED"
+          = Prelude.Just SessionLog'STATUS_UNSPECIFIED
+        readEnum "START" = Prelude.Just SessionLog'START
+        readEnum "STOP" = Prelude.Just SessionLog'STOP
+        readEnum "CHECKPOINT" = Prelude.Just SessionLog'CHECKPOINT
+        readEnum _ = Prelude.Nothing
+
+instance Prelude.Enum SessionLog'SessionStatus where
+        toEnum k__
+          = Prelude.maybe
+              (Prelude.error
+                 ((Prelude.++) "toEnum: unknown value for enum SessionStatus: "
+                    (Prelude.show k__)))
+              Prelude.id
+              (Data.ProtoLens.maybeToEnum k__)
+        fromEnum SessionLog'STATUS_UNSPECIFIED = 0
+        fromEnum SessionLog'START = 1
+        fromEnum SessionLog'STOP = 2
+        fromEnum SessionLog'CHECKPOINT = 3
+        succ SessionLog'CHECKPOINT
+          = Prelude.error
+              "SessionLog'SessionStatus.succ: bad argument SessionLog'CHECKPOINT. This value would be out of bounds."
+        succ SessionLog'STATUS_UNSPECIFIED = SessionLog'START
+        succ SessionLog'START = SessionLog'STOP
+        succ SessionLog'STOP = SessionLog'CHECKPOINT
+        pred SessionLog'STATUS_UNSPECIFIED
+          = Prelude.error
+              "SessionLog'SessionStatus.pred: bad argument SessionLog'STATUS_UNSPECIFIED. This value would be out of bounds."
+        pred SessionLog'START = SessionLog'STATUS_UNSPECIFIED
+        pred SessionLog'STOP = SessionLog'START
+        pred SessionLog'CHECKPOINT = SessionLog'STOP
+        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
+        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
+        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
+        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
+
+instance Prelude.Bounded SessionLog'SessionStatus where
+        minBound = SessionLog'STATUS_UNSPECIFIED
+        maxBound = SessionLog'CHECKPOINT
+
+data TaggedRunMetadata = TaggedRunMetadata{_TaggedRunMetadata'tag
+                                           :: !Data.Text.Text,
+                                           _TaggedRunMetadata'runMetadata ::
+                                           !Data.ByteString.ByteString}
+                       deriving (Prelude.Show, Prelude.Eq)
+
+instance (a ~ Data.Text.Text, b ~ Data.Text.Text,
+          Prelude.Functor f) =>
+         Lens.Labels.HasLens "tag" f TaggedRunMetadata TaggedRunMetadata a b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TaggedRunMetadata'tag
+              (\ x__ y__ -> x__{_TaggedRunMetadata'tag = y__})
+
+instance (a ~ Data.ByteString.ByteString,
+          b ~ Data.ByteString.ByteString, Prelude.Functor f) =>
+         Lens.Labels.HasLens "runMetadata" f TaggedRunMetadata
+           TaggedRunMetadata
+           a
+           b
+         where
+        lensOf _
+          = Lens.Family2.Unchecked.lens _TaggedRunMetadata'runMetadata
+              (\ x__ y__ -> x__{_TaggedRunMetadata'runMetadata = y__})
+
+instance Data.Default.Class.Default TaggedRunMetadata where
+        def
+          = TaggedRunMetadata{_TaggedRunMetadata'tag =
+                                Data.ProtoLens.fieldDefault,
+                              _TaggedRunMetadata'runMetadata = Data.ProtoLens.fieldDefault}
+
+instance Data.ProtoLens.Message TaggedRunMetadata where
+        descriptor
+          = let tag__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "tag"
+                      (Data.ProtoLens.StringField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional tag)
+                      :: Data.ProtoLens.FieldDescriptor TaggedRunMetadata
+                runMetadata__field_descriptor
+                  = Data.ProtoLens.FieldDescriptor "run_metadata"
+                      (Data.ProtoLens.BytesField ::
+                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)
+                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional runMetadata)
+                      :: Data.ProtoLens.FieldDescriptor TaggedRunMetadata
+              in
+              Data.ProtoLens.MessageDescriptor
+                (Data.Map.fromList
+                   [(Data.ProtoLens.Tag 1, tag__field_descriptor),
+                    (Data.ProtoLens.Tag 2, runMetadata__field_descriptor)])
+                (Data.Map.fromList
+                   [("tag", tag__field_descriptor),
+                    ("run_metadata", runMetadata__field_descriptor)])
+
+checkpointPath ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "checkpointPath" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+checkpointPath
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "checkpointPath")
+
+fileVersion ::
+            forall f s t a b . (Lens.Labels.HasLens "fileVersion" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+fileVersion
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fileVersion")
+
+graphDef ::
+         forall f s t a b . (Lens.Labels.HasLens "graphDef" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+graphDef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "graphDef")
+
+level ::
+      forall f s t a b . (Lens.Labels.HasLens "level" f s t a b) =>
+        Lens.Family2.LensLike f s t a b
+level
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "level")
+
+logMessage ::
+           forall f s t a b . (Lens.Labels.HasLens "logMessage" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+logMessage
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "logMessage")
+
+maybe'fileVersion ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "maybe'fileVersion" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+maybe'fileVersion
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'fileVersion")
+
+maybe'graphDef ::
+               forall f s t a b .
+                 (Lens.Labels.HasLens "maybe'graphDef" f s t a b) =>
+                 Lens.Family2.LensLike f s t a b
+maybe'graphDef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'graphDef")
+
+maybe'logMessage ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "maybe'logMessage" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+maybe'logMessage
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'logMessage")
+
+maybe'metaGraphDef ::
+                   forall f s t a b .
+                     (Lens.Labels.HasLens "maybe'metaGraphDef" f s t a b) =>
+                     Lens.Family2.LensLike f s t a b
+maybe'metaGraphDef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'metaGraphDef")
+
+maybe'sessionLog ::
+                 forall f s t a b .
+                   (Lens.Labels.HasLens "maybe'sessionLog" f s t a b) =>
+                   Lens.Family2.LensLike f s t a b
+maybe'sessionLog
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'sessionLog")
+
+maybe'summary ::
+              forall f s t a b .
+                (Lens.Labels.HasLens "maybe'summary" f s t a b) =>
+                Lens.Family2.LensLike f s t a b
+maybe'summary
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'summary")
+
+maybe'taggedRunMetadata ::
+                        forall f s t a b .
+                          (Lens.Labels.HasLens "maybe'taggedRunMetadata" f s t a b) =>
+                          Lens.Family2.LensLike f s t a b
+maybe'taggedRunMetadata
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) ::
+         (Lens.Labels.Proxy#) "maybe'taggedRunMetadata")
+
+message ::
+        forall f s t a b . (Lens.Labels.HasLens "message" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+message
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "message")
+
+metaGraphDef ::
+             forall f s t a b .
+               (Lens.Labels.HasLens "metaGraphDef" f s t a b) =>
+               Lens.Family2.LensLike f s t a b
+metaGraphDef
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "metaGraphDef")
+
+msg ::
+    forall f s t a b . (Lens.Labels.HasLens "msg" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+msg
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "msg")
+
+runMetadata ::
+            forall f s t a b . (Lens.Labels.HasLens "runMetadata" f s t a b) =>
+              Lens.Family2.LensLike f s t a b
+runMetadata
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "runMetadata")
+
+sessionLog ::
+           forall f s t a b . (Lens.Labels.HasLens "sessionLog" f s t a b) =>
+             Lens.Family2.LensLike f s t a b
+sessionLog
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "sessionLog")
+
+status ::
+       forall f s t a b . (Lens.Labels.HasLens "status" f s t a b) =>
+         Lens.Family2.LensLike f s t a b
+status
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "status")
+
+step ::
+     forall f s t a b . (Lens.Labels.HasLens "step" f s t a b) =>
+       Lens.Family2.LensLike f s t a b
+step
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "step")
+
+summary ::
+        forall f s t a b . (Lens.Labels.HasLens "summary" f s t a b) =>
+          Lens.Family2.LensLike f s t a b
+summary
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "summary")
+
+tag ::
+    forall f s t a b . (Lens.Labels.HasLens "tag" f s t a b) =>
+      Lens.Family2.LensLike f s t a b
+tag
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "tag")
+
+taggedRunMetadata ::
+                  forall f s t a b .
+                    (Lens.Labels.HasLens "taggedRunMetadata" f s t a b) =>
+                    Lens.Family2.LensLike f s t a b
+taggedRunMetadata
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "taggedRunMetadata")
+
+wallTime ::
+         forall f s t a b . (Lens.Labels.HasLens "wallTime" f s t a b) =>
+           Lens.Family2.LensLike f s t a b
+wallTime
+  = Lens.Labels.lensOf
+      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "wallTime")
diff --git a/tensorflow-proto.cabal b/tensorflow-proto.cabal
new file mode 100644
--- /dev/null
+++ b/tensorflow-proto.cabal
@@ -0,0 +1,50 @@
+name:                tensorflow-proto
+version:             0.1.0.0
+synopsis:            TensorFlow protocol buffers.
+description:         Please see README.md
+homepage:            https://github.com/tensorflow/haskell#readme
+license:             Apache
+license-file:        LICENSE
+author:              TensorFlow authors
+maintainer:          tensorflow-haskell@googlegroups.com
+copyright:           Google Inc.
+category:            Machine Learning
+build-type:          Custom
+cabal-version:       >=1.24
+extra-source-files:  third_party/tensorflow/tensorflow/core/framework/*.proto
+                   , third_party/tensorflow/tensorflow/core/protobuf/config.proto
+                   , third_party/tensorflow/tensorflow/core/protobuf/debug.proto
+                   , third_party/tensorflow/tensorflow/core/util/event.proto
+
+library
+  exposed-modules:     Proto.Tensorflow.Core.Framework.AttrValue
+                     , Proto.Tensorflow.Core.Framework.Graph
+                     , Proto.Tensorflow.Core.Framework.NodeDef
+                     , Proto.Tensorflow.Core.Framework.OpDef
+                     , Proto.Tensorflow.Core.Framework.ResourceHandle
+                     , Proto.Tensorflow.Core.Framework.Summary
+                     , Proto.Tensorflow.Core.Framework.Tensor
+                     , Proto.Tensorflow.Core.Framework.TensorShape
+                     , Proto.Tensorflow.Core.Framework.Types
+                     , Proto.Tensorflow.Core.Protobuf.Config
+                     , Proto.Tensorflow.Core.Util.Event
+  other-modules:       Proto.Tensorflow.Core.Framework.AllocationDescription
+                     , Proto.Tensorflow.Core.Framework.CostGraph
+                     , Proto.Tensorflow.Core.Framework.Function
+                     , Proto.Tensorflow.Core.Framework.StepStats
+                     , Proto.Tensorflow.Core.Framework.TensorDescription
+                     , Proto.Tensorflow.Core.Framework.Versions
+                     , Proto.Tensorflow.Core.Protobuf.Debug
+  build-depends:  proto-lens == 0.2.*
+                , proto-lens-protoc == 0.2.*
+                , base >= 4.7 && < 5
+  default-language:    Haskell2010
+  include-dirs: .
+
+custom-setup
+  setup-depends: Cabal
+                , proto-lens-protoc == 0.2.*
+                , base >= 4.7 && < 5
+source-repository head
+  type:     git
+  location: https://github.com/tensorflow/haskell
diff --git a/third_party/tensorflow/tensorflow/core/framework/allocation_description.proto b/third_party/tensorflow/tensorflow/core/framework/allocation_description.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/allocation_description.proto
@@ -0,0 +1,27 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "AllocationDescriptionProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+message AllocationDescription {
+  // Total number of bytes requested
+  int64 requested_bytes = 1;
+
+  // Total number of bytes allocated if known
+  int64 allocated_bytes = 2;
+
+  // Name of the allocator used
+  string allocator_name = 3;
+
+  // Identifier of the allocated buffer if known
+  int64 allocation_id = 4;
+
+  // Set if this tensor only has one remaining reference
+  bool has_single_reference = 5;
+
+  // Address of the allocation.
+  uint64 ptr = 6;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/attr_value.proto b/third_party/tensorflow/tensorflow/core/framework/attr_value.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/attr_value.proto
@@ -0,0 +1,62 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "AttrValueProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/tensor.proto";
+import "tensorflow/core/framework/tensor_shape.proto";
+import "tensorflow/core/framework/types.proto";
+
+// Protocol buffer representing the value for an attr used to configure an Op.
+// Comment indicates the corresponding attr type.  Only the field matching the
+// attr type may be filled.
+message AttrValue {
+  // LINT.IfChange
+  message ListValue {
+    repeated bytes s = 2;                        // "list(string)"
+    repeated int64 i = 3 [packed = true];        // "list(int)"
+    repeated float f = 4 [packed = true];        // "list(float)"
+    repeated bool b = 5 [packed = true];         // "list(bool)"
+    repeated DataType type = 6 [packed = true];  // "list(type)"
+    repeated TensorShapeProto shape = 7;         // "list(shape)"
+    repeated TensorProto tensor = 8;             // "list(tensor)"
+    repeated NameAttrList func = 9;              // "list(attr)"
+  }
+  // LINT.ThenChange(https://www.tensorflow.org/code/tensorflow/c/c_api.cc)
+
+  oneof value {
+    bytes s = 2;                 // "string"
+    int64 i = 3;                 // "int"
+    float f = 4;                 // "float"
+    bool b = 5;                  // "bool"
+    DataType type = 6;           // "type"
+    TensorShapeProto shape = 7;  // "shape"
+    TensorProto tensor = 8;      // "tensor"
+    ListValue list = 1;          // any "list(...)"
+
+    // "func" represents a function. func.name is a function's name or
+    // a primitive op's name. func.attr.first is the name of an attr
+    // defined for that function. func.attr.second is the value for
+    // that attr in the instantiation.
+    NameAttrList func = 10;
+
+    // This is a placeholder only used in nodes defined inside a
+    // function.  It indicates the attr value will be supplied when
+    // the function is instantiated.  For example, let us suppose a
+    // node "N" in function "FN". "N" has an attr "A" with value
+    // placeholder = "foo". When FN is instantiated with attr "foo"
+    // set to "bar", the instantiated node N's attr A will have been
+    // given the value "bar".
+    string placeholder = 9;
+  }
+}
+
+// A list of attr names and their values. The whole list is attached
+// with a string name.  E.g., MatMul[T=float].
+message NameAttrList {
+  string name = 1;
+  map<string, AttrValue> attr = 2;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/cost_graph.proto b/third_party/tensorflow/tensorflow/core/framework/cost_graph.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/cost_graph.proto
@@ -0,0 +1,59 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "CostGraphProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/tensor_shape.proto";
+import "tensorflow/core/framework/types.proto";
+
+message CostGraphDef {
+  message Node {
+    // The name of the node. Names are globally unique.
+    string name = 1;
+
+    // The device of the node. Can be empty if the node is mapped to the
+    // default partition or partitioning hasn't been run yet.
+    string device = 2;
+
+    // The id of the node. Node ids are only unique inside a partition.
+    int32 id = 3;
+
+    // Inputs of this node. They must be executed before this node can be
+    // executed. An input is a particular output of another node, specified
+    // by the node id and the output index.
+    message InputInfo {
+      int32 preceding_node = 1;
+      int32 preceding_port = 2;
+    }
+    repeated InputInfo input_info = 4;
+
+    // Outputs of this node.
+    message OutputInfo {
+      int64 size = 1;
+      // If >= 0, the output is an alias of an input. Note that an alias input
+      // may itself be an alias. The algorithm will therefore need to follow
+      // those pointers.
+      int64 alias_input_port = 2;
+      TensorShapeProto shape = 3;
+      DataType dtype = 4;
+    }
+    repeated OutputInfo output_info = 5;
+
+    // Temporary memory used by this node.
+    int64 temporary_memory_size = 6;
+
+    // Estimate of the computational cost of this node.
+    int64 compute_cost = 9;
+
+    // If true, the output is permanent: it can't be discarded, because this
+    // node is part of the "final output". Nodes may depend on final nodes.
+    bool is_final = 7;
+
+    // Ids of the control inputs for this node.
+    repeated int32 control_input = 8;
+  }
+  repeated Node node = 1;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/device_attributes.proto b/third_party/tensorflow/tensorflow/core/framework/device_attributes.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/device_attributes.proto
@@ -0,0 +1,35 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "DeviceAttributesProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+message DeviceLocality {
+  // Optional bus locality of device.  Default value of 0 means
+  // no specific locality.  Specific localities are indexed from 1.
+  int32 bus_id = 1;
+};
+
+message DeviceAttributes {
+  // Fully specified name of the device within a cluster.
+  string name = 1;
+
+  // String representation of device_type.
+  string device_type = 2;
+
+  // Memory capacity of device in bytes.
+  int64 memory_limit = 4;
+
+  // Platform-specific data about device that may be useful
+  // for supporting efficient data transfers.
+  DeviceLocality locality = 5;
+
+  // A device is assigned a global unique number each time it is
+  // initialized. "incarnation" should never be 0.
+  fixed64 incarnation = 6;
+
+  // String representation of the physical device that this device maps to.
+  string physical_device_desc = 7;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/function.proto b/third_party/tensorflow/tensorflow/core/framework/function.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/function.proto
@@ -0,0 +1,101 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "FunctionProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/attr_value.proto";
+import "tensorflow/core/framework/node_def.proto";
+import "tensorflow/core/framework/op_def.proto";
+
+// A library is a set of named functions.
+message FunctionDefLibrary {
+  repeated FunctionDef function = 1;
+  repeated GradientDef gradient = 2;
+}
+
+// A function can be instantiated when the runtime can bind every attr
+// with a value. When a GraphDef has a call to a function, it must
+// have binding for every attr defined in the signature.
+//
+// TODO(zhifengc):
+//   * device spec, etc.
+message FunctionDef {
+  // The definition of the function's name, arguments, return values,
+  // attrs etc.
+  OpDef signature = 1;
+
+  // Attributes specific to this function definition.
+  map<string, AttrValue> attr = 5;
+
+  // NOTE: field id 2 deleted on Jan 11, 2016, GraphDef version 21.
+
+  // In both of the following fields, there is the need to specify an
+  // output that is used as either the input to another node (in
+  // `node_def`) or as a return value of the function (in `ret`).
+  // Unlike the NodeDefs in GraphDef, we need to be able to specify a
+  // list in some cases (instead of just single outputs).  Also, we
+  // need to be able to deal with lists of unknown length (so the
+  // output index may not be known at function definition time).  So
+  // we use the following format instead:
+  // * "fun_in" where "fun_in" is the name of a function input arg in
+  //   the `signature` field above.  This represents that input, whether
+  //   it is a single tensor or a list.
+  // * "fun_in:0" gives the first element of a function input arg (a
+  //   non-list input is considered a list of length 1 for these
+  //   purposes).
+  // * "node:out" where "node" is the name of a node in `node_def` and
+  //   "out" is the name one of its op's output arguments (the name
+  //   comes from the OpDef of the node's op). This represents that
+  //   node's output, whether it is a single tensor or a list.
+  //   Note: We enforce that an op's output arguments are never
+  //   renamed in the backwards-compatibility test.
+  // * "node:out:0" gives the first element of a node output arg (a
+  //   non-list output is considered a list of length 1 for these
+  //   purposes).
+  //
+  // NOT CURRENTLY SUPPORTED (but may be in the future):
+  // * "node:out:-1" gives last element in a node output list
+  // * "node:out:1:" gives a list with all but the first element in a
+  //   node output list
+  // * "node:out::-1" gives a list with all but the last element in a
+  //   node output list
+
+  // The body of the function.  Unlike the NodeDefs in a GraphDef, attrs
+  // may have values of type `placeholder` and the `input` field uses
+  // the "output" format above.
+
+  // By convention, "op" in node_def is resolved by consulting with a
+  // user-defined library first. If not resolved, "func" is assumed to
+  // be a builtin op.
+  repeated NodeDef node_def = 3;
+
+  // A mapping from the output arg names from `signature` to the
+  // outputs from `node_def` that should be returned by the function.
+  map<string, string> ret = 4;
+}
+
+// GradientDef defines the gradient function of a function defined in
+// a function library.
+//
+// A gradient function g (specified by gradient_func) for a function f
+// (specified by function_name) must follow the following:
+//
+// The function 'f' must be a numerical function which takes N inputs
+// and produces M outputs. Its gradient function 'g', which is a
+// function taking N + M inputs and produces N outputs.
+//
+// I.e. if we have
+//    (y1, y2, ..., y_M) = f(x1, x2, ..., x_N),
+// then, g is
+//    (dL/dx1, dL/dx2, ..., dL/dx_N) = g(x1, x2, ..., x_N,
+//                                      dL/dy1, dL/dy2, ..., dL/dy_M),
+// where L is a scalar-value function of (x1, x2, ..., xN) (e.g., the
+// loss function). dL/dx_i is the partial derivative of L with respect
+// to x_i.
+message GradientDef {
+  string function_name = 1;  // The function name.
+  string gradient_func = 2;  // The gradient function's name.
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/graph.proto b/third_party/tensorflow/tensorflow/core/framework/graph.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/graph.proto
@@ -0,0 +1,56 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "GraphProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/node_def.proto";
+import "tensorflow/core/framework/function.proto";
+import "tensorflow/core/framework/versions.proto";
+
+// Represents the graph of operations
+message GraphDef {
+  repeated NodeDef node = 1;
+
+  // Compatibility versions of the graph.  See core/public/version.h for version
+  // history.  The GraphDef version is distinct from the TensorFlow version, and
+  // each release of TensorFlow will support a range of GraphDef versions.
+  VersionDef versions = 4;
+
+  // Deprecated single version field; use versions above instead.  Since all
+  // GraphDef changes before "versions" was introduced were forward
+  // compatible, this field is entirely ignored.
+  int32 version = 3 [deprecated = true];
+
+  // EXPERIMENTAL. DO NOT USE OR DEPEND ON THIS YET.
+  //
+  // "library" provides user-defined functions.
+  //
+  // Naming:
+  //   * library.function.name are in a flat namespace.
+  //     NOTE: We may need to change it to be hierarchical to support
+  //     different orgs. E.g.,
+  //     { "/google/nn", { ... }},
+  //     { "/google/vision", { ... }}
+  //     { "/org_foo/module_bar", { ... }}
+  //     map<string, FunctionDefLib> named_lib;
+  //   * If node[i].op is the name of one function in "library",
+  //     node[i] is deemed as a function call. Otherwise, node[i].op
+  //     must be a primitive operation supported by the runtime.
+  //
+  //
+  // Function call semantics:
+  //
+  //   * The callee may start execution as soon as some of its inputs
+  //     are ready. The caller may want to use Tuple() mechanism to
+  //     ensure all inputs are ready in the same time.
+  //
+  //   * The consumer of return values may start executing as soon as
+  //     the return values the consumer depends on are ready.  The
+  //     consumer may want to use Tuple() mechanism to ensure the
+  //     consumer does not start until all return values of the callee
+  //     function are ready.
+  FunctionDefLibrary library = 2;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/kernel_def.proto b/third_party/tensorflow/tensorflow/core/framework/kernel_def.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/kernel_def.proto
@@ -0,0 +1,36 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "KernelDefProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/attr_value.proto";
+
+message KernelDef {
+  // Must match the name of an Op.
+  string op = 1;
+
+  // Type of device this kernel runs on.
+  string device_type = 2;
+
+  message AttrConstraint {
+    // Name of an attr from the Op.
+    string name = 1;
+
+    // A list of values that this kernel supports for this attr.
+    // Like OpDef.AttrDef.allowed_values, except for kernels instead of Ops.
+    AttrValue allowed_values = 2;
+  }
+  repeated AttrConstraint constraint = 3;
+
+  // Names of the Op's input_/output_args that reside in host memory
+  // instead of device memory.
+  repeated string host_memory_arg = 4;
+
+  // This allows experimental kernels to be registered for an op that
+  // won't be used unless the user specifies a "_kernel" attr with
+  // value matching this.
+  string label = 5;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/log_memory.proto b/third_party/tensorflow/tensorflow/core/framework/log_memory.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/log_memory.proto
@@ -0,0 +1,93 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "LogMemoryProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/tensor_description.proto";
+
+message MemoryLogStep {
+  // Process-unique step id.
+  int64 step_id = 1;
+
+  // Handle describing the feeds and fetches of the step.
+  string handle = 2;
+};
+
+message MemoryLogTensorAllocation {
+  // Process-unique step id.
+  int64 step_id = 1;
+
+  // Name of the kernel making the allocation as set in GraphDef,
+  // e.g., "affine2/weights/Assign".
+  string kernel_name = 2;
+
+  // Allocated tensor details.
+  TensorDescription tensor = 3;
+};
+
+message MemoryLogTensorDeallocation {
+  // Id of the tensor buffer being deallocated, used to match to a
+  // corresponding allocation.
+  int64 allocation_id = 1;
+
+  // Name of the allocator used.
+  string allocator_name = 2;
+};
+
+message MemoryLogTensorOutput {
+  // Process-unique step id.
+  int64 step_id = 1;
+
+  // Name of the kernel producing an output as set in GraphDef, e.g.,
+  // "affine2/weights/Assign".
+  string kernel_name = 2;
+
+  // Index of the output being set.
+  int32 index = 3;
+
+  // Output tensor details.
+  TensorDescription tensor = 4;
+}
+
+message MemoryLogRawAllocation {
+  // Process-unique step id.
+  int64 step_id = 1;
+
+  // Name of the operation making the allocation.
+  string operation = 2;
+
+  // Number of bytes in the allocation.
+  int64 num_bytes = 3;
+
+  // Address of the allocation.
+  uint64 ptr = 4;
+
+  // Id of the tensor buffer being allocated, used to match to a
+  // corresponding deallocation.
+  int64 allocation_id = 5;
+
+  // Name of the allocator used.
+  string allocator_name = 6;
+};
+
+message MemoryLogRawDeallocation {
+  // Process-unique step id.
+  int64 step_id = 1;
+
+  // Name of the operation making the deallocation.
+  string operation = 2;
+
+  // Id of the tensor buffer being deallocated, used to match to a
+  // corresponding allocation.
+  int64 allocation_id = 3;
+
+  // Name of the allocator used.
+  string allocator_name = 4;
+
+  // True if the deallocation is queued and will be performed later,
+  // e.g. for GPU lazy freeing of buffers.
+  bool deferred = 5;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/node_def.proto b/third_party/tensorflow/tensorflow/core/framework/node_def.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/node_def.proto
@@ -0,0 +1,65 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "NodeProto";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/attr_value.proto";
+
+message NodeDef {
+  // The name given to this operator. Used for naming inputs,
+  // logging, visualization, etc.  Unique within a single GraphDef.
+  // Must match the regexp "[A-Za-z0-9.][A-Za-z0-9_./]*".
+  string name = 1;
+
+  // The operation name.  There may be custom parameters in attrs.
+  // Op names starting with an underscore are reserved for internal use.
+  string op = 2;
+
+  // Each input is "node:src_output" with "node" being a string name and
+  // "src_output" indicating which output tensor to use from "node". If
+  // "src_output" is 0 the ":0" suffix can be omitted.  Regular inputs
+  // may optionally be followed by control inputs that have the format
+  // "^node".
+  repeated string input = 3;
+
+  // A (possibly partial) specification for the device on which this
+  // node should be placed.
+  // The expected syntax for this string is as follows:
+  //
+  // DEVICE_SPEC ::= COLOCATED_NODE | PARTIAL_SPEC
+  //
+  // COLOCATED_NODE ::= "@" NODE_NAME  // See NodeDef.name above.
+  // PARTIAL_SPEC ::= ("/" CONSTRAINT) *
+  // CONSTRAINT ::= ("job:" JOB_NAME)
+  //              | ("replica:" [1-9][0-9]*)
+  //              | ("task:" [1-9][0-9]*)
+  //              | ( ("gpu" | "cpu") ":" ([1-9][0-9]* | "*") )
+  //
+  // Valid values for this string include:
+  // * "@other/node"                         (colocate with "other/node")
+  // * "/job:worker/replica:0/task:1/gpu:3"  (full specification)
+  // * "/job:worker/gpu:3"                   (partial specification)
+  // * ""                                    (no specification)
+  //
+  // If the constraints do not resolve to a single device (or if this
+  // field is empty or not present), the runtime will attempt to
+  // choose a device automatically.
+  string device = 4;
+
+  // Operation-specific graph-construction-time configuration.
+  // Note that this should include all attrs defined in the
+  // corresponding OpDef, including those with a value matching
+  // the default -- this allows the default to change and makes
+  // NodeDefs easier to interpret on their own.  However, if
+  // an attr with a default is not specified in this list, the
+  // default will be used.
+  // The "names" (keys) must match the regexp "[a-z][a-z0-9_]+" (and
+  // one of the names from the corresponding OpDef's attr field).
+  // The values must have a type matching the corresponding OpDef
+  // attr's type field.
+  // TODO(josh11b): Add some examples here showing best practices.
+  map<string, AttrValue> attr = 5;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/op_def.proto b/third_party/tensorflow/tensorflow/core/framework/op_def.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/op_def.proto
@@ -0,0 +1,157 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "OpDefProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/attr_value.proto";
+import "tensorflow/core/framework/types.proto";
+
+// Defines an operation. A NodeDef in a GraphDef specifies an Op by
+// using the "op" field which should match the name of a OpDef.
+message OpDef {
+  // Op names starting with an underscore are reserved for internal use.
+  // Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9_]*".
+  string name = 1;
+
+  // For describing inputs and outputs.
+  message ArgDef {
+    // Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
+    string name = 1;
+
+    // Human readable description.
+    string description = 2;
+
+    // Describes the type of one or more tensors that are accepted/produced
+    // by this input/output arg.  The only legal combinations are:
+    // * For a single tensor: either the "type" field is set or the
+    //   "type_attr" field is set to the name of an attr with type "type".
+    // * For a sequence of tensors with the same type: the "number_attr"
+    //   field will be set to the name of an attr with type "int", and
+    //   either the "type" or "type_attr" field will be set as for
+    //   single tensors.
+    // * For a sequence of tensors, the "type_list_attr" field will be set
+    //   to the name of an attr with type "list(type)".
+    DataType type = 3;
+    string type_attr = 4;    // if specified, attr must have type "type"
+    string number_attr = 5;  // if specified, attr must have type "int"
+    // If specified, attr must have type "list(type)", and none of
+    // type, type_attr, and number_attr may be specified.
+    string type_list_attr = 6;
+
+    // For inputs: if true, the inputs are required to be refs.
+    //   By default, inputs can be either refs or non-refs.
+    // For outputs: if true, outputs are refs, otherwise they are not.
+    bool is_ref = 16;
+  };
+
+  // Description of the input(s).
+  repeated ArgDef input_arg = 2;
+
+  // Description of the output(s).
+  repeated ArgDef output_arg = 3;
+
+  // Description of the graph-construction-time configuration of this
+  // Op.  That is to say, this describes the attr fields that will
+  // be specified in the NodeDef.
+  message AttrDef {
+    // A descriptive name for the argument.  May be used, e.g. by the
+    // Python client, as a keyword argument name, and so should match
+    // the regexp "[a-z][a-z0-9_]+".
+    string name = 1;
+
+    // One of the type names from attr_value.proto ("string", "list(string)",
+    // "int", etc.).
+    string type = 2;
+
+    // A reasonable default for this attribute if the user does not supply
+    // a value.  If not specified, the user must supply a value.
+    AttrValue default_value = 3;
+
+    // Human-readable description.
+    string description = 4;
+
+    // TODO(josh11b): bool is_optional?
+
+    // --- Constraints ---
+    // These constraints are only in effect if specified.  Default is no
+    // constraints.
+
+    // For type == "int", this is a minimum value.  For "list(___)"
+    // types, this is the minimum length.
+    bool has_minimum = 5;
+    int64 minimum = 6;
+
+    // The set of allowed values.  Has type that is the "list" version
+    // of the "type" field above (uses the "list" field of AttrValue).
+    // If type == "type" or "list(type)" above, then the "type" field
+    // of "allowed_values.list" has the set of allowed DataTypes.
+    // If type == "string" or "list(string)", then the "s" field of
+    // "allowed_values.list" has the set of allowed strings.
+    AttrValue allowed_values = 7;
+  }
+  repeated AttrDef attr = 4;
+
+  // Optional deprecation based on GraphDef versions.
+  OpDeprecation deprecation = 8;
+
+  // One-line human-readable description of what the Op does.
+  string summary = 5;
+
+  // Additional, longer human-readable description of what the Op does.
+  string description = 6;
+
+  // -------------------------------------------------------------------------
+  // Which optimizations this operation can participate in.
+
+  // True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
+  bool is_commutative = 18;
+
+  // If is_aggregate is true, then this operation accepts N >= 2
+  // inputs and produces 1 output all of the same type.  Should be
+  // associative and commutative, and produce output with the same
+  // shape as the input.  The optimizer may replace an aggregate op
+  // taking input from multiple devices with a tree of aggregate ops
+  // that aggregate locally within each device (and possibly within
+  // groups of nearby devices) before communicating.
+  // TODO(josh11b): Implement that optimization.
+  bool is_aggregate = 16;  // for things like add
+
+  // Other optimizations go here, like
+  //   can_alias_input, rewrite_when_output_unused, partitioning_strategy, etc.
+
+  // -------------------------------------------------------------------------
+  // Optimization constraints.
+
+  // By default Ops may be moved between devices.  Stateful ops should
+  // either not be moved, or should only be moved if that state can also
+  // be moved (e.g. via some sort of save / restore).
+  // Stateful ops are guaranteed to never be optimized away by Common
+  // Subexpression Elimination (CSE).
+  bool is_stateful = 17;  // for things like variables, queue
+
+  // -------------------------------------------------------------------------
+  // Non-standard options.
+
+  // By default, all inputs to an Op must be initialized Tensors.  Ops
+  // that may initialize tensors for the first time should set this
+  // field to true, to allow the Op to take an uninitialized Tensor as
+  // input.
+  bool allows_uninitialized_input = 19;  // for Assign, etc.
+};
+
+// Information about version-dependent deprecation of an op
+message OpDeprecation {
+  // First GraphDef version at which the op is disallowed.
+  int32 version = 1;
+
+  // Explanation of why it was deprecated and what to use instead.
+  string explanation = 2;
+};
+
+// A collection of OpDefs
+message OpList {
+  repeated OpDef op = 1;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/op_gen_overrides.proto b/third_party/tensorflow/tensorflow/core/framework/op_gen_overrides.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/op_gen_overrides.proto
@@ -0,0 +1,67 @@
+// Defines the text format for adding per-op overrides for client
+// language op code generators.
+
+syntax = "proto3";
+
+package tensorflow;
+import "tensorflow/core/framework/attr_value.proto";
+
+// Used to override the default API & behavior in the generated code
+// for client languages, from what you would get from the OpDef alone.
+// This is so we can evolve the API while remaining backwards
+// compatible when interpretting old graphs.  Overrides go in an
+// "op_gen_overrides.pbtxt" file with a text-format OpGenOverrides
+// message.  Right now these only apply to the C++ API.
+// TODO(josh11b): In the future there will be a common set of overrides
+// and per-client-language overrides.
+//
+// WARNING: Be *very* careful using these features -- these overrides
+// can change the semantics of existing code.  These changes may need
+// to wait until a major release of TensorFlow to avoid breaking our
+// compatibility promises.
+message OpGenOverride {
+  // Name of the op to apply overrides to.
+  string name = 1;
+
+  // Do not include this op in the generated API.
+  // If `skip` is true, all other overrides are ignored for this op.
+  bool skip = 2;
+
+  // Hide this op by putting it into an internal namespace (or whatever
+  // is appropriate in the target language).
+  bool hide = 3;
+
+  // Use a different name in the API than the op's name. Note that
+  // the op's name in `backticks` will also be replaced in the docs.
+  string rename_to = 4;
+
+  // Create *additional* API endpoints with different names (contrast
+  // with rename_to, which affects the original name).
+  repeated string alias = 5;
+
+  // Map the name of an attr to a new default value to use.  This
+  // default will be used when creating new graphs, as opposed to the
+  // default in the OpDef, which will be used when interpreting old
+  // GraphDefs.  If this attr is also renamed (using attr_rename
+  // below), use the original name of the attr.
+  message AttrDefault {
+    string name = 1;
+    AttrValue value = 2;
+  }
+  repeated AttrDefault attr_default = 6;
+
+  // Change the name used to access attrs/inputs/outputs in the API
+  // from what is used in the GraphDef.  Note that these names in
+  // `backticks` will also be replaced in the docs.
+  message Rename {
+    string from = 1;
+    string to = 2;
+  }
+  repeated Rename attr_rename = 7;
+  repeated Rename input_rename = 8;
+  repeated Rename output_rename = 9;
+}
+
+message OpGenOverrides {
+  repeated OpGenOverride op = 1;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/resource_handle.proto b/third_party/tensorflow/tensorflow/core/framework/resource_handle.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/resource_handle.proto
@@ -0,0 +1,29 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "ResourceHandleProto";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+// Protocol buffer representing a handle to a tensorflow resource. Handles are
+// not valid across executions, but can be serialized back and forth from within
+// a single run.
+message ResourceHandle {
+  // Unique name for the device containing the resource.
+  string device = 1;
+
+  // Container in which this resource is placed.
+  string container = 2;
+
+  // Unique name of this resource.
+  string name = 3;
+
+  // Hash code for the type of the resource. Is only valid in the same device
+  // and in the same execution.
+  uint64 hash_code = 4;
+
+  // For debug-only, the name of the type pointed to by this handle, if
+  // available.
+  string maybe_type_name = 5;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/step_stats.proto b/third_party/tensorflow/tensorflow/core/framework/step_stats.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/step_stats.proto
@@ -0,0 +1,54 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "StepStatsProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/allocation_description.proto";
+import "tensorflow/core/framework/tensor_description.proto";
+
+// TODO(tucker): The next 4 message defs are very similar to
+// the *LogEntry messages in profile.proto.  They should be
+// unified in one place.
+
+message AllocatorMemoryUsed {
+  string allocator_name = 1;
+  int64 total_bytes = 2;
+  int64 peak_bytes = 3;
+}
+
+// Output sizes recorded for a single execution of a graph node.
+message NodeOutput {
+  int32 slot = 1;
+  TensorDescription tensor_description = 3;
+};
+
+// Time/size stats recorded for a single execution of a graph node.
+message NodeExecStats {
+  // TODO(tucker): Use some more compact form of node identity than
+  // the full string name.  Either all processes should agree on a
+  // global id (cost_id?) for each node, or we should use a hash of
+  // the name.
+  string node_name = 1;
+  int64 all_start_micros = 2;
+  int64 op_start_rel_micros = 3;
+  int64 op_end_rel_micros = 4;
+  int64 all_end_rel_micros = 5;
+  repeated AllocatorMemoryUsed memory = 6;
+  repeated NodeOutput output = 7;
+  string timeline_label = 8;
+  int64 scheduled_micros = 9;
+  uint32 thread_id = 10;
+  repeated AllocationDescription referenced_tensor = 11;
+};
+
+message DeviceStepStats {
+  string device = 1;
+  repeated NodeExecStats node_stats = 2;
+}
+
+message StepStats {
+  repeated DeviceStepStats dev_stats = 1;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/summary.proto b/third_party/tensorflow/tensorflow/core/framework/summary.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/summary.proto
@@ -0,0 +1,103 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "SummaryProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/tensor.proto";
+
+// Metadata associated with a series of Summary data
+message SummaryDescription {
+  // Hint on how plugins should process the data in this series.
+  // Supported values include "scalar", "histogram", "image", "audio"
+  string type_hint = 1;
+}
+
+// Serialization format for histogram module in
+// core/lib/histogram/histogram.h
+message HistogramProto {
+  double min = 1;
+  double max = 2;
+  double num = 3;
+  double sum = 4;
+  double sum_squares = 5;
+
+  // Parallel arrays encoding the bucket boundaries and the bucket values.
+  // bucket(i) is the count for the bucket i.  The range for
+  // a bucket is:
+  //   i == 0:  -DBL_MAX .. bucket_limit(0)
+  //   i != 0:  bucket_limit(i-1) .. bucket_limit(i)
+  repeated double bucket_limit = 6 [packed = true];
+  repeated double bucket = 7 [packed = true];
+};
+
+// A Summary is a set of named values to be displayed by the
+// visualizer.
+//
+// Summaries are produced regularly during training, as controlled by
+// the "summary_interval_secs" attribute of the training operation.
+// Summaries are also produced at the end of an evaluation.
+message Summary {
+  message Image {
+    // Dimensions of the image.
+    int32 height = 1;
+    int32 width = 2;
+    // Valid colorspace values are
+    //   1 - grayscale
+    //   2 - grayscale + alpha
+    //   3 - RGB
+    //   4 - RGBA
+    //   5 - DIGITAL_YUV
+    //   6 - BGRA
+    int32 colorspace = 3;
+    // Image data in encoded format.  All image formats supported by
+    // image_codec::CoderUtil can be stored here.
+    bytes encoded_image_string = 4;
+  }
+
+  message Audio {
+    // Sample rate of the audio in Hz.
+    float sample_rate = 1;
+    // Number of channels of audio.
+    int64 num_channels = 2;
+    // Length of the audio in frames (samples per channel).
+    int64 length_frames = 3;
+    // Encoded audio data and its associated RFC 2045 content type (e.g.
+    // "audio/wav").
+    bytes encoded_audio_string = 4;
+    string content_type = 5;
+  }
+
+  message Value {
+    // Name of the node that output this summary; in general, the name of a
+    // TensorSummary node. If the node in question has multiple outputs, then
+    // a ":\d+" suffix will be appended, like "some_op:13".
+    // Might not be set for legacy summaries (i.e. those not using the tensor
+    // value field)
+    string node_name = 7;
+
+    // Tag name for the data.  Will only be used by legacy summaries
+    // (ie. those not using the tensor value field)
+    // For legacy summaries, will be used as the title of the graph
+    // in the visualizer.
+    //
+    // Tag is usually "op_name:value_name", where "op_name" itself can have
+    // structure to indicate grouping.
+    string tag = 1;
+
+    // Value associated with the tag.
+    oneof value {
+      float simple_value = 2;
+      bytes obsolete_old_style_histogram = 3;
+      Image image = 4;
+      HistogramProto histo = 5;
+      Audio audio = 6;
+      TensorProto tensor = 8;
+    }
+  }
+
+  // Set of values for the summary.
+  repeated Value value = 1;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/tensor.proto b/third_party/tensorflow/tensorflow/core/framework/tensor.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/tensor.proto
@@ -0,0 +1,75 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "TensorProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/resource_handle.proto";
+import "tensorflow/core/framework/tensor_shape.proto";
+import "tensorflow/core/framework/types.proto";
+
+// Protocol buffer representing a tensor.
+message TensorProto {
+  DataType dtype = 1;
+
+  // Shape of the tensor.  TODO(touts): sort out the 0-rank issues.
+  TensorShapeProto tensor_shape = 2;
+
+  // Only one of the representations below is set, one of "tensor_contents" and
+  // the "xxx_val" attributes.  We are not using oneof because as oneofs cannot
+  // contain repeated fields it would require another extra set of messages.
+
+  // Version number.
+  //
+  // In version 0, if the "repeated xxx" representations contain only one
+  // element, that element is repeated to fill the shape.  This makes it easy
+  // to represent a constant Tensor with a single value.
+  int32 version_number = 3;
+
+  // Serialized raw tensor content from either Tensor::AsProtoTensorContent or
+  // memcpy in tensorflow::grpc::EncodeTensorToByteBuffer. This representation
+  // can be used for all tensor types. The purpose of this representation is to
+  // reduce serialization overhead during RPC call by avoiding serialization of
+  // many repeated small items.
+  bytes tensor_content = 4;
+
+  // Type specific representations that make it easy to create tensor protos in
+  // all languages.  Only the representation corresponding to "dtype" can
+  // be set.  The values hold the flattened representation of the tensor in
+  // row major order.
+
+  // DT_HALF. Note that since protobuf has no int16 type, we'll have some
+  // pointless zero padding for each value here.
+  repeated int32 half_val = 13 [packed = true];
+
+  // DT_FLOAT.
+  repeated float float_val = 5 [packed = true];
+
+  // DT_DOUBLE.
+  repeated double double_val = 6 [packed = true];
+
+  // DT_INT32, DT_INT16, DT_INT8, DT_UINT8.
+  repeated int32 int_val = 7 [packed = true];
+
+  // DT_STRING
+  repeated bytes string_val = 8;
+
+  // DT_COMPLEX64. scomplex_val(2*i) and scomplex_val(2*i+1) are real
+  // and imaginary parts of i-th single precision complex.
+  repeated float scomplex_val = 9 [packed = true];
+
+  // DT_INT64
+  repeated int64 int64_val = 10 [packed = true];
+
+  // DT_BOOL
+  repeated bool bool_val = 11 [packed = true];
+
+  // DT_COMPLEX128. dcomplex_val(2*i) and dcomplex_val(2*i+1) are real
+  // and imaginary parts of i-th double precision complex.
+  repeated double dcomplex_val = 12 [packed = true];
+
+  // DT_RESOURCE
+  repeated ResourceHandle resource_handle_val = 14;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/tensor_description.proto b/third_party/tensorflow/tensorflow/core/framework/tensor_description.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/tensor_description.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "TensorDescriptionProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/types.proto";
+import "tensorflow/core/framework/tensor_shape.proto";
+import "tensorflow/core/framework/allocation_description.proto";
+
+message TensorDescription {
+  // Data type of tensor elements
+  DataType dtype = 1;
+
+  // Shape of the tensor.
+  TensorShapeProto shape = 2;
+
+  // Information about the size and allocator used for the data
+  AllocationDescription allocation_description = 4;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/tensor_shape.proto b/third_party/tensorflow/tensorflow/core/framework/tensor_shape.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/tensor_shape.proto
@@ -0,0 +1,45 @@
+// Protocol buffer representing the shape of tensors.
+
+syntax = "proto3";
+option cc_enable_arenas = true;
+option java_outer_classname = "TensorShapeProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+package tensorflow;
+
+// Dimensions of a tensor.
+message TensorShapeProto {
+  // One dimension of the tensor.
+  message Dim {
+    // Size of the tensor in that dimension.
+    // This value must be >= -1, but values of -1 are reserved for "unknown"
+    // shapes (values of -1 mean "unknown" dimension).  Certain wrappers
+    // that work with TensorShapeProto may fail at runtime when deserializing
+    // a TensorShapeProto containing a dim value of -1.
+    int64 size = 1;
+
+    // Optional name of the tensor dimension.
+    string name = 2;
+  };
+
+  // Dimensions of the tensor, such as {"input", 30}, {"output", 40}
+  // for a 30 x 40 2D tensor.  If an entry has size -1, this
+  // corresponds to a dimension of unknown size. The names are
+  // optional.
+  //
+  // The order of entries in "dim" matters: It indicates the layout of the
+  // values in the tensor in-memory representation.
+  //
+  // The first entry in "dim" is the outermost dimension used to layout the
+  // values, the last entry is the innermost dimension.  This matches the
+  // in-memory layout of RowMajor Eigen tensors.
+  //
+  // If "dim.size()" > 0, "unknown_rank" must be false.
+  repeated Dim dim = 2;
+
+  // If true, the number of dimensions in the shape is unknown.
+  //
+  // If true, "dim.size()" must be 0.
+  bool unknown_rank = 3;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/tensor_slice.proto b/third_party/tensorflow/tensorflow/core/framework/tensor_slice.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/tensor_slice.proto
@@ -0,0 +1,37 @@
+// Protocol buffer representing slices of a tensor
+
+syntax = "proto3";
+option cc_enable_arenas = true;
+option java_outer_classname = "TensorSliceProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+package tensorflow;
+
+// Can only be interpreted if you know the corresponding TensorShape.
+message TensorSliceProto {
+  // Extent of the slice in one dimension.
+  message Extent {
+    // Either both or no attributes must be set.  When no attribute is set
+    // means: All data in that dimension.
+
+    // Start index of the slice, starting at 0.
+    int64 start = 1;
+
+    // Length of the slice: if the length is missing or -1 we will
+    // interpret this as "everything in this dimension".  We use
+    // "oneof" to preserve information about whether the length is
+    // present without changing the serialization format from the
+    // prior proto2 version of this proto.
+    oneof has_length {
+      int64 length = 2;
+    }
+  };
+
+  // Extent of the slice in all tensor dimensions.
+  //
+  // Must have one entry for each of the dimension of the tensor that this
+  // slice belongs to.  The order of sizes is the same as the order of
+  // dimensions in the TensorShape.
+  repeated Extent extent = 1;
+};
diff --git a/third_party/tensorflow/tensorflow/core/framework/types.proto b/third_party/tensorflow/tensorflow/core/framework/types.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/types.proto
@@ -0,0 +1,64 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "TypesProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+// LINT.IfChange
+enum DataType {
+  // Not a legal value for DataType.  Used to indicate a DataType field
+  // has not been set.
+  DT_INVALID = 0;
+
+  // Data types that all computation devices are expected to be
+  // capable to support.
+  DT_FLOAT = 1;
+  DT_DOUBLE = 2;
+  DT_INT32 = 3;
+  DT_UINT8 = 4;
+  DT_INT16 = 5;
+  DT_INT8 = 6;
+  DT_STRING = 7;
+  DT_COMPLEX64 = 8;  // Single-precision complex
+  DT_INT64 = 9;
+  DT_BOOL = 10;
+  DT_QINT8 = 11;     // Quantized int8
+  DT_QUINT8 = 12;    // Quantized uint8
+  DT_QINT32 = 13;    // Quantized int32
+  DT_BFLOAT16 = 14;  // Float32 truncated to 16 bits.  Only for cast ops.
+  DT_QINT16 = 15;    // Quantized int16
+  DT_QUINT16 = 16;   // Quantized uint16
+  DT_UINT16 = 17;
+  DT_COMPLEX128 = 18;  // Double-precision complex
+  DT_HALF = 19;
+  DT_RESOURCE = 20;
+
+  // TODO(josh11b): DT_GENERIC_PROTO = ??;
+  // TODO(jeff,josh11b): DT_UINT64?  DT_UINT32?
+
+  // Do not use!  These are only for parameters.  Every enum above
+  // should have a corresponding value below (verified by types_test).
+  DT_FLOAT_REF = 101;
+  DT_DOUBLE_REF = 102;
+  DT_INT32_REF = 103;
+  DT_UINT8_REF = 104;
+  DT_INT16_REF = 105;
+  DT_INT8_REF = 106;
+  DT_STRING_REF = 107;
+  DT_COMPLEX64_REF = 108;
+  DT_INT64_REF = 109;
+  DT_BOOL_REF = 110;
+  DT_QINT8_REF = 111;
+  DT_QUINT8_REF = 112;
+  DT_QINT32_REF = 113;
+  DT_BFLOAT16_REF = 114;
+  DT_QINT16_REF = 115;
+  DT_QUINT16_REF = 116;
+  DT_UINT16_REF = 117;
+  DT_COMPLEX128_REF = 118;
+  DT_HALF_REF = 119;
+  DT_RESOURCE_REF = 120;
+}
+// LINT.ThenChange(https://www.tensorflow.org/code/tensorflow/c/c_api.h,https://www.tensorflow.org/code/tensorflow/go/tensor.go)
diff --git a/third_party/tensorflow/tensorflow/core/framework/variable.proto b/third_party/tensorflow/tensorflow/core/framework/variable.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/variable.proto
@@ -0,0 +1,33 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "VariableProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+// Protocol buffer representing a Variable.
+message VariableDef {
+  // Name of the variable tensor.
+  string variable_name = 1;
+
+  // Name of the initializer op.
+  string initializer_name = 2;
+
+  // Name of the snapshot tensor.
+  string snapshot_name = 3;
+
+  // Support for saving variables as slices of a larger variable.
+  SaveSliceInfoDef save_slice_info_def = 4;
+}
+
+message SaveSliceInfoDef {
+  // Name of the full variable of which this is a slice.
+  string full_name = 1;
+  // Shape of the full variable.
+  repeated int64 full_shape = 2;
+  // Offset of this variable into the full variable.
+  repeated int64 var_offset = 3;
+  // Shape of this variable.
+  repeated int64 var_shape = 4;
+}
diff --git a/third_party/tensorflow/tensorflow/core/framework/versions.proto b/third_party/tensorflow/tensorflow/core/framework/versions.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/framework/versions.proto
@@ -0,0 +1,31 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "VersionsProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+// Version information for a piece of serialized data
+//
+// There are different types of versions for each type of data
+// (GraphDef, etc.), but they all have the same common shape
+// described here.
+//
+// Each consumer has "consumer" and "min_producer" versions (specified
+// elsewhere).  A consumer is allowed to consume this data if
+//
+//   producer >= min_producer
+//   consumer >= min_consumer
+//   consumer not in bad_consumers
+//
+message VersionDef {
+  // The version of the code that produced this data.
+  int32 producer = 1;
+
+  // Any consumer below this version is not allowed to consume this data.
+  int32 min_consumer = 2;
+
+  // Specific consumer versions which are disallowed (e.g. due to bugs).
+  repeated int32 bad_consumers = 3;
+};
diff --git a/third_party/tensorflow/tensorflow/core/protobuf/config.proto b/third_party/tensorflow/tensorflow/core/protobuf/config.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/protobuf/config.proto
@@ -0,0 +1,278 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "ConfigProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+import "tensorflow/core/framework/cost_graph.proto";
+import "tensorflow/core/framework/graph.proto";
+import "tensorflow/core/framework/step_stats.proto";
+import "tensorflow/core/protobuf/debug.proto";
+
+message GPUOptions {
+  // A value between 0 and 1 that indicates what fraction of the
+  // available GPU memory to pre-allocate for each process.  1 means
+  // to pre-allocate all of the GPU memory, 0.5 means the process
+  // allocates ~50% of the available GPU memory.
+  double per_process_gpu_memory_fraction = 1;
+
+  // The type of GPU allocation strategy to use.
+  //
+  // Allowed values:
+  // "": The empty string (default) uses a system-chosen default
+  //     which may change over time.
+  //
+  // "BFC": A "Best-fit with coalescing" algorithm, simplified from a
+  //        version of dlmalloc.
+  string allocator_type = 2;
+
+  // Delay deletion of up to this many bytes to reduce the number of
+  // interactions with gpu driver code.  If 0, the system chooses
+  // a reasonable default (several MBs).
+  int64 deferred_deletion_bytes = 3;
+
+  // If true, the allocator does not pre-allocate the entire specified
+  // GPU memory region, instead starting small and growing as needed.
+  bool allow_growth = 4;
+
+  // A comma-separated list of GPU ids that determines the 'visible'
+  // to 'virtual' mapping of GPU devices.  For example, if TensorFlow
+  // can see 8 GPU devices in the process, and one wanted to map
+  // visible GPU devices 5 and 3 as "/gpu:0", and "/gpu:1", then one
+  // would specify this field as "5,3".  This field is similar in
+  // spirit to the CUDA_VISIBLE_DEVICES environment variable, except
+  // it applies to the visible GPU devices in the process.
+  //
+  // NOTE: The GPU driver provides the process with the visible GPUs
+  // in an order which is not guaranteed to have any correlation to
+  // the *physical* GPU id in the machine.  This field is used for
+  // remapping "visible" to "virtual", which means this operates only
+  // after the process starts.  Users are required to use vendor
+  // specific mechanisms (e.g., CUDA_VISIBLE_DEVICES) to control the
+  // physical to visible device mapping prior to invoking TensorFlow.
+  string visible_device_list = 5;
+};
+
+// Options passed to the graph optimizer
+message OptimizerOptions {
+  // If true, optimize the graph using common subexpression elimination.
+  bool do_common_subexpression_elimination = 1;
+
+  // If true, perform constant folding optimization on the graph.
+  bool do_constant_folding = 2;
+
+  // If true, perform function inlining on the graph.
+  bool do_function_inlining = 4;
+
+  // Optimization level
+  enum Level {
+    // L1 is the default level.
+    // Optimization performed at L1 :
+    // 1. Common subexpression elimination
+    // 2. Constant folding
+    L1 = 0;
+
+    // No optimizations
+    L0 = -1;
+  }
+
+  Level opt_level = 3;
+
+  // Control the use of the compiler/jit.  Experimental.
+  enum GlobalJitLevel {
+    DEFAULT = 0;  // Default setting ("off" now, but later expected to be "on")
+    OFF = -1;
+    // The following settings turn on compilation, with higher values being
+    // more aggressive.  Higher values may reduce opportunities for parallelism
+    // and may use more memory.  (At present, there is no distinction, but this
+    // is expected to change.)
+    ON_1 = 1;
+    ON_2 = 2;
+  }
+  GlobalJitLevel global_jit_level = 5;
+}
+
+message GraphOptions {
+  // Removed, use optimizer_options below.
+  reserved "skip_common_subexpression_elimination";
+  reserved 1;
+
+  // If true, use control flow to schedule the activation of Recv nodes.
+  // (Currently ignored.)
+  bool enable_recv_scheduling = 2;
+
+  // Options controlling how graph is optimized.
+  OptimizerOptions optimizer_options = 3;
+
+  // The number of steps to run before returning a cost model detailing
+  // the memory usage and performance of each node of the graph. 0 means
+  // no cost model.
+  int64 build_cost_model = 4;
+
+  // The number of steps to skip before collecting statistics for the
+  // cost model.
+  int64 build_cost_model_after = 9;
+
+  // Annotate each Node with Op output shape data, to the extent it can
+  // be statically inferred.
+  bool infer_shapes = 5;
+
+  // Only place the subgraphs that are run, rather than the entire graph.
+  //
+  // This is useful for interactive graph building, where one might
+  // produce graphs that cannot be placed during the debugging
+  // process.  In particular, it allows the client to continue work in
+  // a session after adding a node to a graph whose placement
+  // constraints are unsatisfiable.
+  bool place_pruned_graph = 6;
+
+  // If true, transfer float values between processes as bfloat16.
+  bool enable_bfloat16_sendrecv = 7;
+
+  // If > 0, record a timeline every this many steps.
+  // EXPERIMENTAL: This currently has no effect in MasterSession.
+  int32 timeline_step = 8;
+};
+
+message ThreadPoolOptionProto {
+  // The number of threads in the pool.
+  //
+  // 0 means the system picks a value based on where this option proto is used
+  // (see the declaration of the specific field for more info).
+  int32 num_threads = 1;
+};
+
+message RPCOptions {
+  // If true, always use RPC to contact the session target.
+  //
+  // If false (the default option), TensorFlow may use an optimized
+  // transport for client-master communication that avoids the RPC
+  // stack. This option is primarily for used testing the RPC stack.
+  bool use_rpc_for_inprocess_master = 1;
+};
+
+// Session configuration parameters.
+// The system picks appropriate values for fields that are not set.
+message ConfigProto {
+  // Map from device type name (e.g., "CPU" or "GPU" ) to maximum
+  // number of devices of that type to use.  If a particular device
+  // type is not found in the map, the system picks an appropriate
+  // number.
+  map<string, int32> device_count = 1;
+
+  // The execution of an individual op (for some op types) can be
+  // parallelized on a pool of intra_op_parallelism_threads.
+  // 0 means the system picks an appropriate number.
+  int32 intra_op_parallelism_threads = 2;
+
+  // Nodes that perform blocking operations are enqueued on a pool of
+  // inter_op_parallelism_threads available in each process.
+  //
+  // 0 means the system picks an appropriate number.
+  //
+  // Note that the first Session created in the process sets the
+  // number of threads for all future sessions unless use_per_session_threads is
+  // true or session_inter_op_thread_pool is configured.
+  int32 inter_op_parallelism_threads = 5;
+
+  // If true, use a new set of threads for this session rather than the global
+  // pool of threads. Only supported by direct sessions.
+  //
+  // If false, use the global threads created by the first session, or the
+  // per-session thread pools configured by session_inter_op_thread_pool.
+  //
+  // This option is deprecated. The same effect can be achieved by setting
+  // session_inter_op_thread_pool to have one element, whose num_threads equals
+  // inter_op_parallelism_threads.
+  bool use_per_session_threads = 9;
+
+  // This option is experimental - it may be replaced with a different mechanism
+  // in the future. The intended use is for when some session invocations need
+  // to run in a background pool limited to a small number of threads.
+  //
+  // Configures session thread pools. If this is configured, then RunOptions for
+  // a Run call can select the thread pool to use.
+  //
+  // If a pool's num_threads is 0, then inter_op_parallelism_threads is used.
+  repeated ThreadPoolOptionProto session_inter_op_thread_pool = 12;
+
+  // Assignment of Nodes to Devices is recomputed every placement_period
+  // steps until the system warms up (at which point the recomputation
+  // typically slows down automatically).
+  int32 placement_period = 3;
+
+  // When any filters are present sessions will ignore all devices which do not
+  // match the filters. Each filter can be partially specified, e.g. "/job:ps"
+  // "/job:worker/replica:3", etc.
+  repeated string device_filters = 4;
+
+  // Options that apply to all GPUs.
+  GPUOptions gpu_options = 6;
+
+  // Whether soft placement is allowed. If allow_soft_placement is true,
+  // an op will be placed on CPU if
+  //   1. there's no GPU implementation for the OP
+  // or
+  //   2. no GPU devices are known or registered
+  // or
+  //   3. need to co-locate with reftype input(s) which are from CPU.
+  bool allow_soft_placement = 7;
+
+  // Whether device placements should be logged.
+  bool log_device_placement = 8;
+
+  // Options that apply to all graphs.
+  GraphOptions graph_options = 10;
+
+  // Global timeout for all blocking operations in this session.  If non-zero,
+  // and not overridden on a per-operation basis, this value will be used as the
+  // deadline for all blocking operations.
+  int64 operation_timeout_in_ms = 11;
+
+  // Options that apply when this session uses the distributed runtime.
+  RPCOptions rpc_options = 13;
+};
+
+// EXPERIMENTAL. Options for a single Run() call.
+message RunOptions {
+  // TODO(pbar) Turn this into a TraceOptions proto which allows
+  // tracing to be controlled in a more orthogonal manner?
+  enum TraceLevel {
+    NO_TRACE = 0;
+    SOFTWARE_TRACE = 1;
+    HARDWARE_TRACE = 2;
+    FULL_TRACE = 3;
+  }
+  TraceLevel trace_level = 1;
+
+  // Time to wait for operation to complete in milliseconds.
+  int64 timeout_in_ms = 2;
+
+  // The thread pool to use, if session_inter_op_thread_pool is configured.
+  int32 inter_op_thread_pool = 3;
+
+  // Whether the partition graph(s) executed by the executor(s) should be
+  // outputted via RunMetadata.
+  bool output_partition_graphs = 5;
+
+  // EXPERIMENTAL.  Options used to initialize DebuggerState, if enabled.
+  DebugOptions debug_options = 6;
+
+  reserved 4;
+}
+
+// EXPERIMENTAL. Metadata output (i.e., non-Tensor) for a single Run() call.
+message RunMetadata {
+  // Statistics traced for this step. Populated if tracing is turned on via the
+  // "RunOptions" proto.
+  // EXPERIMENTAL: The format and set of events may change in future versions.
+  StepStats step_stats = 1;
+
+  // The cost graph for the computation defined by the run call.
+  CostGraphDef cost_graph = 2;
+
+  // Graphs of the partitions executed by executors.
+  repeated GraphDef partition_graphs = 3;
+}
diff --git a/third_party/tensorflow/tensorflow/core/protobuf/debug.proto b/third_party/tensorflow/tensorflow/core/protobuf/debug.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/protobuf/debug.proto
@@ -0,0 +1,37 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "DebugProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.framework";
+
+// EXPERIMENTAL. Option for watching a node.
+message DebugTensorWatch {
+  // Name of the node to watch.
+  string node_name = 1;
+
+  // Output slot to watch.
+  // The semantics of output_slot == -1 is that the node is only watched for
+  // completion, but not for any output tensors. See NodeCompletionCallback
+  // in debug_gateway.h.
+  // TODO(cais): Implement this semantics.
+  int32 output_slot = 2;
+
+  // Name(s) of the debugging op(s).
+  // One or more than one probes on a tensor.
+  // e.g., {"DebugIdentity", "DebugNanCount"}
+  repeated string debug_ops = 3;
+
+  // URL(s) for debug targets(s).
+  //   E.g., "file:///foo/tfdbg_dump", "grpc://localhost:11011"
+  // Each debug op listed in debug_ops will publish its output tensor (debug
+  // signal) to all URLs in debug_urls.
+  repeated string debug_urls = 4;
+}
+
+// EXPERIMENTAL. Options for initializing DebuggerState.
+message DebugOptions {
+  // Debugging options
+  repeated DebugTensorWatch debug_tensor_watch_opts = 4;
+}
diff --git a/third_party/tensorflow/tensorflow/core/util/event.proto b/third_party/tensorflow/tensorflow/core/util/event.proto
new file mode 100644
--- /dev/null
+++ b/third_party/tensorflow/tensorflow/core/util/event.proto
@@ -0,0 +1,78 @@
+syntax = "proto3";
+
+package tensorflow;
+option cc_enable_arenas = true;
+option java_outer_classname = "EventProtos";
+option java_multiple_files = true;
+option java_package = "org.tensorflow.util";
+
+import "tensorflow/core/framework/summary.proto";
+
+// Protocol buffer representing an event that happened during
+// the execution of a Brain model.
+message Event {
+  // Timestamp of the event.
+  double wall_time = 1;
+
+  // Global step of the event.
+  int64 step = 2;
+
+  oneof what {
+    // An event file was started, with the specified version.
+    // This is use to identify the contents of the record IO files
+    // easily.  Current version is "brain.Event:2".  All versions
+    // start with "brain.Event:".
+    string file_version = 3;
+    // An encoded version of a GraphDef.
+    bytes graph_def = 4;
+    // A summary was generated.
+    Summary summary = 5;
+    // The user output a log message. Not all messages are logged, only ones
+    // generated via the Python tensorboard_logging module.
+    LogMessage log_message = 6;
+    // The state of the session which can be used for restarting after crashes.
+    SessionLog session_log = 7;
+    // The metadata returned by running a session.run() call.
+    TaggedRunMetadata tagged_run_metadata = 8;
+    // An encoded version of a MetaGraphDef.
+    bytes meta_graph_def = 9;
+  }
+}
+
+// Protocol buffer used for logging messages to the events file.
+message LogMessage {
+  enum Level {
+    UNKNOWN = 0;
+    DEBUG = 10;
+    INFO = 20;
+    WARN = 30;
+    ERROR = 40;
+    FATAL = 50;
+  }
+  Level level = 1;
+  string message = 2;
+}
+
+// Protocol buffer used for logging session state.
+message SessionLog {
+  enum SessionStatus {
+    STATUS_UNSPECIFIED = 0;
+    START = 1;
+    STOP = 2;
+    CHECKPOINT = 3;
+  }
+
+  SessionStatus status = 1;
+  // This checkpoint_path contains both the path and filename.
+  string checkpoint_path = 2;
+  string msg = 3;
+}
+
+// For logging the metadata output for a single session.run() call.
+message TaggedRunMetadata {
+  // Tag name associated with this metadata.
+  string tag = 1;
+  // Byte-encoded version of the `RunMetadata` proto in order to allow lazy
+  // deserialization.
+  bytes run_metadata = 2;
+}
