{"action":"created","comment":{"url":"https://api.github.com/repos/tensorflow/community/pulls/comments/268325991","pull_request_review_id":217958080,"id":268325991,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI2ODMyNTk5MQ==","diff_hunk":"@@ -0,0 +1,481 @@\n+# Modular TensorFlow\n+\n+| Status        | Proposed                                             |\n+:-------------- |:---------------------------------------------------- |\n+| **Author(s)** | Gunhan Gulsoy (gunan@google.com)                     |\n+| **Sponsor**   | Martin Wicke (wicke@google.com)                      |\n+| **Updated**   | 2019-03-06                                           |\n+\n+\n+## Motivation\n+\n+TensorFlow is a very successful open source project. Since it has been open sourced, [1800+ contributors](https://github.com/tensorflow/tensorflow) have submitted code into TF from outside Google. However, as more and more developers contribute, it becomes more and more difficult to manage contributions in the single repository.\n+\n+This project aims to split the TensorFlow codebase into **smaller, more focused**, repositories that can be released and managed separately. These modules will talk to each other using **well defined APIs** that guarantee backwards compatibility. Thanks to the module APIs, these modules are now **managed/owned/released independently.**\n+\n+### Problems addressed\n+\n+#### Spaghetti dependencies\n+\n+Everything being in a single repository encourages everyone to freely use all other code in the repository, even when this does not make sense. This ensures the library is very difficult to modify later.\n+\n+#### Long build times\n+\n+Many volunteers and developers outside Google use their laptops for development. On such systems, TF development cycles require building all of tensorflow that takes around 2 hours. While there is an argument to be made that bazel caching should ensure that they build all of TF only once, without forge, bazel caching is not working as [well as expected](https://docs.bazel.build/versions/master/remote-caching.html#known-issues).\n+\n+#### Adding support for new hardware is very difficult and not scalable\n+\n+The ML ecosystem is constantly expanding. New hardware for accelerating ML applications is being worked on by many teams inside and outside Google. As the most popular machine learning framework, TF is expected to add support for many of these hardware as quickly as possible.\n+\n+Currently, this means that all such hardware developers need to check in their code into the [main tensorflow repository](http://github.com/tensorflow/tensorflow). This means that all the changes are required to go through TF team's review. This can make merging support for new hardware very very difficult.\n+\n+#### Long PR review queue\n+\n+TensorFlow is a very successful opensource project. It is the [4th most forked](https://github.com/search?o=desc&q=stars:%3E1&s=forks&type=Repositories) and [5th most starred](https://github.com/search?q=stars%3A%3E0&s=stars&type=Repositories) project on github. This also means that TF receives quite a lot of opensource contributions. The TensorFlow team has to review all contributions to TensorFlow itself. This creates a bottleneck for merging the changes to the main repository.\n+\n+#### Flexibility for collaborators\n+\n+Currently, any partner or contributor that would like to work with us are subject to all the rules within of the main repository. Some of these can be relaxed through modularization, where work can happen in a separate repository.\n+\n+#### Large TF support matrix\n+\n+The TF support story is a unique beast. Our support matrix has a lot of orthogonal dimensions. Below are some of the more prominent dimensions:\n+\n+*   Environment (google3, opensource)\n+*   Operating system (Linux, windows, macos, mobile)\n+*   Architecture (x86, arm, ppc64, …)\n+*   Accelerator (CPU, GPU,  TPU)\n+*   Compiler (GCC, Clang, MSVC)\n+*   Python version (2, 3.4, 3.5, 3.6,  3.7)\n+\n+More can be added to this list where we have to rebuild TensorFlow to support different network architectures, CUDA versions, SIMD instruction sets, etc.\n+\n+Having a monolithic repository means we need to rebuild all of our code for all of these different combinations. However, it makes no sense to rebuild all of our C++ code if the only difference is the Python version. Or rebuild all of our CPU kernels for different CUDA versions. Modularizing our code means we only need to rebuild and test the modules that are directly impacted by the dimensions we are changing in the support matrix.\n+\n+\n+## Overview\n+\n+This project aims to split the TensorFlow codebase into **smaller, more focused**, repositories that can be released and managed separately. These modules will talk to each other using **well defined APIs** that guarantee backwards compatibility. Thanks to these APIs, these modules will be **managed/owned/released independently**. There will be different strategies to break apart pieces based on the languages, but below summarizes the approach for C++ and Python:\n+\n+\n+![alt_text](20190305-modular-tensorflow/big_picture.png \"Overview of modular TensorFlow\")\n+\n+A summary of the above is:\n+\n+\n+\n+*   Core TF functionality will be implemented in C++\n+*   Core TF functionality can be extended using shared objects.\n+*   On top of the core C++ libraries, we will have the language bindings (Using the C API)\n+*   There can be more functionality built on top of the core TF bindings in different languages, which can be maintained and distributed separately.\n+*   All different pieces need to use Stable public APIs with backwards compatibility guarantees.\n+\n+\n+### Definitions\n+\n+This section will briefly describe the terms we will use in the rest of this design.\n+\n+**Modules:** These are the components of core TF library that will \"accept\" plugins to expand their capabilities. Examples of modules are networking, filesystem, (graph) optimizers.\n+\n+**Plugins:** Plugins are extensions to different modules. For example, filesystem module can have a GCP plugin, an S3 plugin, an HDFS plugin.\n+\n+**Shared objects:** These are  dll/so/dylib files that can house **one or more** plugins for **one or more** modules.\n+\n+**Packages:** Python pip packages which may include Python files and/or shared objects.\n+\n+\n+### C++\n+\n+This project aims to implement similar plugin architectures for multiple components of TF code. While these will be listed separately, **there will be a lot of shared pieces between these components**. The modules we would like to handle are:\n+\n+1.  Networking module, with verbs, gdr plugins initially\n+1.  Filesystems module, with GCP, AWS and HDFS support\n+1.  Kernels module, \n+1.  Optimizers/Graph rewrite module,","path":"rfcs/20190305-modular-tensorflow.md","position":94,"original_position":94,"commit_id":"b42798f11d59dc9818bce4bd2cf6a276b4889518","original_commit_id":"b42798f11d59dc9818bce4bd2cf6a276b4889518","user":{"login":"nhasabni","id":22304502,"node_id":"MDQ6VXNlcjIyMzA0NTAy","avatar_url":"https://avatars0.githubusercontent.com/u/22304502?v=4","gravatar_id":"","url":"https://api.github.com/users/nhasabni","html_url":"https://github.com/nhasabni","followers_url":"https://api.github.com/users/nhasabni/followers","following_url":"https://api.github.com/users/nhasabni/following{/other_user}","gists_url":"https://api.github.com/users/nhasabni/gists{/gist_id}","starred_url":"https://api.github.com/users/nhasabni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nhasabni/subscriptions","organizations_url":"https://api.github.com/users/nhasabni/orgs","repos_url":"https://api.github.com/users/nhasabni/repos","events_url":"https://api.github.com/users/nhasabni/events{/privacy}","received_events_url":"https://api.github.com/users/nhasabni/received_events","type":"User","site_admin":false},"body":"(1) Will optimizers/graph rewrite modules offer same capabilities (such as different phases of rewrite such as pre-placement, post-placement, etc) that exists in current design? (2) What if plugins/backends want to have plugin-specific or backend-specific optimizers?","created_at":"2019-03-22T20:20:12Z","updated_at":"2019-03-22T20:20:12Z","html_url":"https://github.com/tensorflow/community/pull/77#discussion_r268325991","pull_request_url":"https://api.github.com/repos/tensorflow/community/pulls/77","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/tensorflow/community/pulls/comments/268325991"},"html":{"href":"https://github.com/tensorflow/community/pull/77#discussion_r268325991"},"pull_request":{"href":"https://api.github.com/repos/tensorflow/community/pulls/77"}}},"pull_request":{"url":"https://api.github.com/repos/tensorflow/community/pulls/77","id":260510503,"node_id":"MDExOlB1bGxSZXF1ZXN0MjYwNTEwNTAz","html_url":"https://github.com/tensorflow/community/pull/77","diff_url":"https://github.com/tensorflow/community/pull/77.diff","patch_url":"https://github.com/tensorflow/community/pull/77.patch","issue_url":"https://api.github.com/repos/tensorflow/community/issues/77","number":77,"state":"open","locked":false,"title":"RFC: Modular TensorFlow","user":{"login":"gunan","id":7946809,"node_id":"MDQ6VXNlcjc5NDY4MDk=","avatar_url":"https://avatars3.githubusercontent.com/u/7946809?v=4","gravatar_id":"","url":"https://api.github.com/users/gunan","html_url":"https://github.com/gunan","followers_url":"https://api.github.com/users/gunan/followers","following_url":"https://api.github.com/users/gunan/following{/other_user}","gists_url":"https://api.github.com/users/gunan/gists{/gist_id}","starred_url":"https://api.github.com/users/gunan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gunan/subscriptions","organizations_url":"https://api.github.com/users/gunan/orgs","repos_url":"https://api.github.com/users/gunan/repos","events_url":"https://api.github.com/users/gunan/events{/privacy}","received_events_url":"https://api.github.com/users/gunan/received_events","type":"User","site_admin":false},"body":"**Comment period is open until 2019-03-26**\r\n\r\n# Modular TensorFlow\r\n\r\n| Status        | Proposed                                             |\r\n:-------------- |:---------------------------------------------------- |\r\n| **Author(s)** | Gunhan Gulsoy (gunan@google.com)                     |\r\n| **Sponsor**   | Martin Wicke (wicke@google.com)                      |\r\n| **Updated**   | 2019-03-06                                           |\r\n\r\n\r\nObjective: Propose an architecture where smaller, more focused TensorFlow modules can be created, maintained and released separately. ","created_at":"2019-03-12T19:43:49Z","updated_at":"2019-03-22T20:20:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1b34250b00566caa5e2c0f98b1e64bb087aba5d4","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ewilderj","id":9475,"node_id":"MDQ6VXNlcjk0NzU=","avatar_url":"https://avatars1.githubusercontent.com/u/9475?v=4","gravatar_id":"","url":"https://api.github.com/users/ewilderj","html_url":"https://github.com/ewilderj","followers_url":"https://api.github.com/users/ewilderj/followers","following_url":"https://api.github.com/users/ewilderj/following{/other_user}","gists_url":"https://api.github.com/users/ewilderj/gists{/gist_id}","starred_url":"https://api.github.com/users/ewilderj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewilderj/subscriptions","organizations_url":"https://api.github.com/users/ewilderj/orgs","repos_url":"https://api.github.com/users/ewilderj/repos","events_url":"https://api.github.com/users/ewilderj/events{/privacy}","received_events_url":"https://api.github.com/users/ewilderj/received_events","type":"User","site_admin":false},{"login":"martinwicke","id":577277,"node_id":"MDQ6VXNlcjU3NzI3Nw==","avatar_url":"https://avatars2.githubusercontent.com/u/577277?v=4","gravatar_id":"","url":"https://api.github.com/users/martinwicke","html_url":"https://github.com/martinwicke","followers_url":"https://api.github.com/users/martinwicke/followers","following_url":"https://api.github.com/users/martinwicke/following{/other_user}","gists_url":"https://api.github.com/users/martinwicke/gists{/gist_id}","starred_url":"https://api.github.com/users/martinwicke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martinwicke/subscriptions","organizations_url":"https://api.github.com/users/martinwicke/orgs","repos_url":"https://api.github.com/users/martinwicke/repos","events_url":"https://api.github.com/users/martinwicke/events{/privacy}","received_events_url":"https://api.github.com/users/martinwicke/received_events","type":"User","site_admin":false},{"login":"goldiegadde","id":43185254,"node_id":"MDQ6VXNlcjQzMTg1MjU0","avatar_url":"https://avatars2.githubusercontent.com/u/43185254?v=4","gravatar_id":"","url":"https://api.github.com/users/goldiegadde","html_url":"https://github.com/goldiegadde","followers_url":"https://api.github.com/users/goldiegadde/followers","following_url":"https://api.github.com/users/goldiegadde/following{/other_user}","gists_url":"https://api.github.com/users/goldiegadde/gists{/gist_id}","starred_url":"https://api.github.com/users/goldiegadde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/goldiegadde/subscriptions","organizations_url":"https://api.github.com/users/goldiegadde/orgs","repos_url":"https://api.github.com/users/goldiegadde/repos","events_url":"https://api.github.com/users/goldiegadde/events{/privacy}","received_events_url":"https://api.github.com/users/goldiegadde/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":950965027,"node_id":"MDU6TGFiZWw5NTA5NjUwMjc=","url":"https://api.github.com/repos/tensorflow/community/labels/RFC:%20Proposed","name":"RFC: Proposed","color":"f2712b","default":false},{"id":1204250421,"node_id":"MDU6TGFiZWwxMjA0MjUwNDIx","url":"https://api.github.com/repos/tensorflow/community/labels/cla:%20yes","name":"cla: yes","color":"59db94","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/tensorflow/community/pulls/77/commits","review_comments_url":"https://api.github.com/repos/tensorflow/community/pulls/77/comments","review_comment_url":"https://api.github.com/repos/tensorflow/community/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tensorflow/community/issues/77/comments","statuses_url":"https://api.github.com/repos/tensorflow/community/statuses/b42798f11d59dc9818bce4bd2cf6a276b4889518","head":{"label":"gunan:master","ref":"master","sha":"b42798f11d59dc9818bce4bd2cf6a276b4889518","user":{"login":"gunan","id":7946809,"node_id":"MDQ6VXNlcjc5NDY4MDk=","avatar_url":"https://avatars3.githubusercontent.com/u/7946809?v=4","gravatar_id":"","url":"https://api.github.com/users/gunan","html_url":"https://github.com/gunan","followers_url":"https://api.github.com/users/gunan/followers","following_url":"https://api.github.com/users/gunan/following{/other_user}","gists_url":"https://api.github.com/users/gunan/gists{/gist_id}","starred_url":"https://api.github.com/users/gunan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gunan/subscriptions","organizations_url":"https://api.github.com/users/gunan/orgs","repos_url":"https://api.github.com/users/gunan/repos","events_url":"https://api.github.com/users/gunan/events{/privacy}","received_events_url":"https://api.github.com/users/gunan/received_events","type":"User","site_admin":false},"repo":{"id":136122660,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYxMjI2NjA=","name":"community","full_name":"gunan/community","private":false,"owner":{"login":"gunan","id":7946809,"node_id":"MDQ6VXNlcjc5NDY4MDk=","avatar_url":"https://avatars3.githubusercontent.com/u/7946809?v=4","gravatar_id":"","url":"https://api.github.com/users/gunan","html_url":"https://github.com/gunan","followers_url":"https://api.github.com/users/gunan/followers","following_url":"https://api.github.com/users/gunan/following{/other_user}","gists_url":"https://api.github.com/users/gunan/gists{/gist_id}","starred_url":"https://api.github.com/users/gunan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gunan/subscriptions","organizations_url":"https://api.github.com/users/gunan/orgs","repos_url":"https://api.github.com/users/gunan/repos","events_url":"https://api.github.com/users/gunan/events{/privacy}","received_events_url":"https://api.github.com/users/gunan/received_events","type":"User","site_admin":false},"html_url":"https://github.com/gunan/community","description":"Stores documents used by the TensorFlow developer community","fork":true,"url":"https://api.github.com/repos/gunan/community","forks_url":"https://api.github.com/repos/gunan/community/forks","keys_url":"https://api.github.com/repos/gunan/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gunan/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gunan/community/teams","hooks_url":"https://api.github.com/repos/gunan/community/hooks","issue_events_url":"https://api.github.com/repos/gunan/community/issues/events{/number}","events_url":"https://api.github.com/repos/gunan/community/events","assignees_url":"https://api.github.com/repos/gunan/community/assignees{/user}","branches_url":"https://api.github.com/repos/gunan/community/branches{/branch}","tags_url":"https://api.github.com/repos/gunan/community/tags","blobs_url":"https://api.github.com/repos/gunan/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gunan/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gunan/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/gunan/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gunan/community/statuses/{sha}","languages_url":"https://api.github.com/repos/gunan/community/languages","stargazers_url":"https://api.github.com/repos/gunan/community/stargazers","contributors_url":"https://api.github.com/repos/gunan/community/contributors","subscribers_url":"https://api.github.com/repos/gunan/community/subscribers","subscription_url":"https://api.github.com/repos/gunan/community/subscription","commits_url":"https://api.github.com/repos/gunan/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/gunan/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/gunan/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/gunan/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/gunan/community/contents/{+path}","compare_url":"https://api.github.com/repos/gunan/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gunan/community/merges","archive_url":"https://api.github.com/repos/gunan/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gunan/community/downloads","issues_url":"https://api.github.com/repos/gunan/community/issues{/number}","pulls_url":"https://api.github.com/repos/gunan/community/pulls{/number}","milestones_url":"https://api.github.com/repos/gunan/community/milestones{/number}","notifications_url":"https://api.github.com/repos/gunan/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gunan/community/labels{/name}","releases_url":"https://api.github.com/repos/gunan/community/releases{/id}","deployments_url":"https://api.github.com/repos/gunan/community/deployments","created_at":"2018-06-05T05:06:53Z","updated_at":"2019-03-13T03:57:31Z","pushed_at":"2019-03-13T03:57:29Z","git_url":"git://github.com/gunan/community.git","ssh_url":"git@github.com:gunan/community.git","clone_url":"https://github.com/gunan/community.git","svn_url":"https://github.com/gunan/community","homepage":"","size":610,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"tensorflow:master","ref":"master","sha":"e003c95bdb2fbfd9c73b68bd5c3b69889ff2a672","user":{"login":"tensorflow","id":15658638,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1NjU4NjM4","avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"repo":{"id":134885523,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQ4ODU1MjM=","name":"community","full_name":"tensorflow/community","private":false,"owner":{"login":"tensorflow","id":15658638,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1NjU4NjM4","avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/tensorflow/community","description":"Stores documents used by the TensorFlow developer community","fork":false,"url":"https://api.github.com/repos/tensorflow/community","forks_url":"https://api.github.com/repos/tensorflow/community/forks","keys_url":"https://api.github.com/repos/tensorflow/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tensorflow/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tensorflow/community/teams","hooks_url":"https://api.github.com/repos/tensorflow/community/hooks","issue_events_url":"https://api.github.com/repos/tensorflow/community/issues/events{/number}","events_url":"https://api.github.com/repos/tensorflow/community/events","assignees_url":"https://api.github.com/repos/tensorflow/community/assignees{/user}","branches_url":"https://api.github.com/repos/tensorflow/community/branches{/branch}","tags_url":"https://api.github.com/repos/tensorflow/community/tags","blobs_url":"https://api.github.com/repos/tensorflow/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tensorflow/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tensorflow/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/tensorflow/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tensorflow/community/statuses/{sha}","languages_url":"https://api.github.com/repos/tensorflow/community/languages","stargazers_url":"https://api.github.com/repos/tensorflow/community/stargazers","contributors_url":"https://api.github.com/repos/tensorflow/community/contributors","subscribers_url":"https://api.github.com/repos/tensorflow/community/subscribers","subscription_url":"https://api.github.com/repos/tensorflow/community/subscription","commits_url":"https://api.github.com/repos/tensorflow/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/tensorflow/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/tensorflow/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/tensorflow/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/tensorflow/community/contents/{+path}","compare_url":"https://api.github.com/repos/tensorflow/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tensorflow/community/merges","archive_url":"https://api.github.com/repos/tensorflow/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tensorflow/community/downloads","issues_url":"https://api.github.com/repos/tensorflow/community/issues{/number}","pulls_url":"https://api.github.com/repos/tensorflow/community/pulls{/number}","milestones_url":"https://api.github.com/repos/tensorflow/community/milestones{/number}","notifications_url":"https://api.github.com/repos/tensorflow/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tensorflow/community/labels{/name}","releases_url":"https://api.github.com/repos/tensorflow/community/releases{/id}","deployments_url":"https://api.github.com/repos/tensorflow/community/deployments","created_at":"2018-05-25T17:23:23Z","updated_at":"2019-03-22T16:00:38Z","pushed_at":"2019-03-16T01:30:15Z","git_url":"git://github.com/tensorflow/community.git","ssh_url":"git@github.com:tensorflow/community.git","clone_url":"https://github.com/tensorflow/community.git","svn_url":"https://github.com/tensorflow/community","homepage":"","size":1557,"stargazers_count":266,"watchers_count":266,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":72,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":72,"open_issues":18,"watchers":266,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tensorflow/community/pulls/77"},"html":{"href":"https://github.com/tensorflow/community/pull/77"},"issue":{"href":"https://api.github.com/repos/tensorflow/community/issues/77"},"comments":{"href":"https://api.github.com/repos/tensorflow/community/issues/77/comments"},"review_comments":{"href":"https://api.github.com/repos/tensorflow/community/pulls/77/comments"},"review_comment":{"href":"https://api.github.com/repos/tensorflow/community/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tensorflow/community/pulls/77/commits"},"statuses":{"href":"https://api.github.com/repos/tensorflow/community/statuses/b42798f11d59dc9818bce4bd2cf6a276b4889518"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"nhasabni"}}